Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-10-2008
FerCastro FerCastro is offline
Miembro
 
Registrado: abr 2006
Posts: 97
Poder: 19
FerCastro Va por buen camino
Siguiendo con el mismo hilo, pero con diferente tema, estoy modificando los comandos que tenía por sentencias Update, pero tengo el siguiente problema:

Cuando quería registrar los cambios en un cambio datetime, tomando en cuenta solo la hora hacía esto:

Código Delphi [-]
FieldValues['HoraInicio1']:=TimeToStr(dsInicio1.Time);
FieldValues['HoraInicio2']:=TimeToStr(dsInicio2.Time);
FieldValues['HoraInicio3']:=TimeToStr(dsInicio3.Time);


Pero la momento de querer hacer lo mismo para generar la sentencia SQL, que queda así:

Código Delphi [-]
' , HoraInicio1 = '+ QuotedStr(TimeToStr(dsInicio1.Time))+
' , HoraInicio2 = '+ QuotedStr(TimeToStr(dsInicio2.Time))+
' , HoraInicio3 = '+ QuotedStr(TimeToStr(dsInicio3.Time))+

EL resultado en SQL queda asi:

Código SQL [-]
HoraInicio1 = '09:00:00 a.m.' , 
HoraInicio2 = '04:00:00 p.m.' , 
HoraInicio3 = '12:00:00 a.m.'

Pero me manda el siguiente error :

Error de conversión al convertir una cadena de caracteres a datetime.

Quiero hacer la sentencia con un convert, por consejo de Poliburro, pero pues no doy pie con bola.

Alguien sabe que se tiene que hacer? por que no me está aceptando los datos en la sentencia SQl?

Muchas gracias por la ayuda

FCG
Responder Con Cita
  #2  
Antiguo 28-10-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Lo recomendado siempre en estos casos es usar parámetros y suplir su valor con los métodos adecuados al tipo:

Código Delphi [-]
Query1.ParamByName('HoraInicio1').AsDateTime := dsInicio1.Time

De esta forma le dejas el trabajo y pormenores de la conversión al componente en sí.

// Saludos
Responder Con Cita
  #3  
Antiguo 28-10-2008
FerCastro FerCastro is offline
Miembro
 
Registrado: abr 2006
Posts: 97
Poder: 19
FerCastro Va por buen camino
Hola Román,

La verdad es que nunca he usado parámetros, dónde puedo hallar un ejemplo pequeño de cómo hacerlo?

Gracias

Fernando
Responder Con Cita
  #4  
Antiguo 28-10-2008
FerCastro FerCastro is offline
Miembro
 
Registrado: abr 2006
Posts: 97
Poder: 19
FerCastro Va por buen camino
Hallé esto en el foro:

Código Delphi [-]
cadena := 'Update Documentos set doc_apel1=:apel1 ,doc_apel2=:apel2';
cadena := cadena + ', doc_nombre=:nombre';
cadena := cadena + ', usuario=:usu, fechagrab=:Fecha';
cadena := cadena + ' where doc_id=:id and doc_NH=:NH';
ADOQVarios.Active:=false;
ADOQVarios.SQL.Clear;
ADOQVarios.SQL.Add(cadena);
ADOQVarios.Parameters.ParamByName('id').DataType := ftInteger;
ADOQVarios.Parameters.ParamByName('id').Value :=cod;
ADOQVarios.Parameters.ParamByName('apel2').DataType := ftString;
ADOQVarios.Parameters.ParamByName('apel2').Value := eApe2.text;
ADOQVarios.Parameters.ParamByName('apel1').DataType := ftString;
ADOQVarios.Parameters.ParamByName('apel1').Value := eApe1.text;
ADOQVarios.Parameters.ParamByName('Nombre').DataType := ftString;
ADOQVarios.Parameters.ParamByName('Nombre').Value := eNombre.text;
ADOQVarios.Parameters.ParamByName('NH').DataType := ftInteger;
ADOQVarios.Parameters.ParamByName('NH').Value :=StrToInt(eNH.text);
ADOQVarios.Parameters.ParamByName('Fecha').DataType := ftDateTime;
ADOQVarios.Parameters.ParamByName('Fecha').Value := Now;
ADOQVarios.Parameters.ParamByName('Usu').DataType := ftString;
ADOQVarios.Parameters.ParamByName('Usu').Value :=MFunciones.GetLoginName;
ADOQVarios.ExecSQL;

Solo una pregunta, los parámetros se tiene que declarar todos y cada uno como variables?

Perdon por la pregunta, solo es una duda.

Saludos
Responder Con Cita
  #5  
Antiguo 28-10-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Se puede interpretar a los parámetros como unas variables especiales que luego serán sustituídas por los valores que se desean suministrar. Un parámetro se distingue en el SQL anteponiendo los dos puntos. Algo como:

Código SQL [-]
SELECT tus_campos
FROM tu_tabla
WHERE Campo1 = :ElParametro

En este caso el parámetro se llama ElParametro.

Luego, se debe indicar de donde va obtener los datos el parámetro. Esto se hace con:
Código Delphi [-]
TQuery1.Params.ParamByName('NombreParametro').AsTipo := ....

Recomiendo la lectura de la ayuda que proporciona al respecto.
Como podrás comprobar, si haces unas búsquedas encontrarás muchos hilos que hablan al respecto.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 28-10-2008
FerCastro FerCastro is offline
Miembro
 
Registrado: abr 2006
Posts: 97
Poder: 19
FerCastro Va por buen camino
Román y todos, muchas gracias por la ayuda, ya quedó.

Hoy aprendí algo, ya me puedo dormir tranquilo

Perdón por las preguntas de párvulo, así pasa cuando uno apenas está aprendiendo.

FCG

Código Delphi [-]
        cCadena := ' UPDATE segmento SET '+
                    ' IDEmpresa = '+ QuotedStr(IntToStr(FMain.oVariables.nEmpresa))+
                   ' , IDSucursal = '+ QuotedStr(IntToStr(FMain.oVariables.nSucursal))+
                   ' , Nombre = '+ QuotedStr(csNombre.Text)+
                   ' , Comentario = '+ QuotedStr(csComentario.Text)+
                   ' , Lapsos = '+ QuotedStr(IntToStr(nLapsos))+
                   ' , Usuario = '+ QuotedStr(FMain.oVariables.cUsuario)+
                   ' , U_Fecha = '+ QuotedStr(DateToStr(Now))+
                   ' , Juntar1 = '+ QuotedStr(FloatToStr (nsJuntar1.Value))+
                   ' , Juntar2 = '+ QuotedStr(FloatToStr (nsJuntar2.Value))+
                   ' , Juntar3 = '+ QuotedStr(FloatToStr (nsJuntar3.Value))+
                   ' , Juntar4 = '+ QuotedStr(FloatToStr (nsJuntar4.Value))+
                   ' , Juntar5 = '+ QuotedStr(FloatToStr (nsJuntar5.Value))+
                   ' , Juntar6 = '+ QuotedStr(FloatToStr (nsJuntar6.Value))+
                   ' , Juntar7 = '+ QuotedStr(FloatToStr (nsJuntar7.Value))+
                   ' , Juntar8 = '+ QuotedStr(FloatToStr (nsJuntar8.Value))+
                   ' , Juntar9 = '+ QuotedStr(FloatToStr (nsJuntar9.Value))+
                   ' , Juntar10 = '+ QuotedStr(FloatToStr (nsJuntar10.Value))+

                   ' , HoraInicio1 = :h1'+
                   ' , HoraInicio2 = :h2'+
                   ' , HoraInicio3 = :h3'+
                   ' , HoraInicio4 = :h4'+
                   ' , HoraInicio5 = :h5'+
                   ' , HoraInicio6 = :h6'+
                   ' , HoraInicio7 = :h7'+
                   ' , HoraInicio8 = :h8'+
                   ' , HoraInicio9 = :h9'+
                   ' , HoraInicio10 = :h10'+

                   ' , HoraFin1 = :f1'+
                   ' , HoraFin2 = :f2'+
                   ' , HoraFin3 = :f3'+
                   ' , HoraFin4 = :f4'+
                   ' , HoraFin5 = :f5'+
                   ' , HoraFin6 = :f6'+
                   ' , HoraFin7 = :f7'+
                   ' , HoraFin8 = :f8'+
                   ' , HoraFin9 = :f9'+
                   ' , HoraFin10 = :f10'+
                  ' Where IDSegmento = '+ QuotedStr(IntToStr(nIDSegmento)) ;

          SQL.Clear;
          SQL.Add(cCadena);
          Parameters.ParamByName('h1').Value := dsInicio1.Time;
          Parameters.ParamByName('h2').Value := dsInicio2.Time;
          Parameters.ParamByName('h3').Value := dsInicio3.Time;
          Parameters.ParamByName('h4').Value := dsInicio4.Time;
          Parameters.ParamByName('h5').Value := dsInicio5.Time;
          Parameters.ParamByName('h6').Value := dsInicio6.Time;
          Parameters.ParamByName('h7').Value := dsInicio7.Time;
          Parameters.ParamByName('h8').Value := dsInicio8.Time;
          Parameters.ParamByName('h9').Value := dsInicio9.Time;
          Parameters.ParamByName('h10').Value := dsInicio10.Time;

          Parameters.ParamByName('f1').Value := dFin1.Time;
          Parameters.ParamByName('f2').Value := dFin2.Time;
          Parameters.ParamByName('f3').Value := dFin3.Time;
          Parameters.ParamByName('f4').Value := dFin4.Time;
          Parameters.ParamByName('f5').Value := dFin5.Time;
          Parameters.ParamByName('f6').Value := dFin6.Time;
          Parameters.ParamByName('f7').Value := dFin7.Time;
          Parameters.ParamByName('f8').Value := dFin8.Time;
          Parameters.ParamByName('f9').Value := dFin9.Time;
          Parameters.ParamByName('f10').Value := dFin10.Time;


          SQL.Text := cCadena;
          ExecSQL;
Responder Con Cita
  #7  
Antiguo 28-10-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por FerCastro Ver Mensaje
Román y todos, muchas gracias por la ayuda, ya quedó.

Hoy aprendí algo, ya me puedo dormir tranquilo

Perdón por las preguntas de párvulo, así pasa cuando uno apenas está aprendiendo.

FCG
Ya ves wey, y no querias usar parámetros

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 28-10-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
De todas formas, yo no me quedaría tranquilo. La técnica original debe funcionar, además de que es más sencilla. El componente se encarga de generar la sentencia update. ¿De qué base de datos hablamos?

// Saludos
Responder Con Cita
  #9  
Antiguo 28-10-2008
FerCastro FerCastro is offline
Miembro
 
Registrado: abr 2006
Posts: 97
Poder: 19
FerCastro Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Ya ves wey, y no querias usar parámetros

Salud OS

No quería porque no sabía como, crees que a partir de ahora los voy a dejar de usar?

Gracias Eliseo!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Duplica registro en ClientDataSet maestro-detalle Josepo Conexión con bases de datos 8 07-05-2013 10:59:09
Duplica informacion en archivo txt muppett Varios 5 22-02-2008 13:08:28
Update!!!, pero solo para un registro ELINK Firebird e Interbase 6 08-01-2008 20:26:41
INSERT INTO duplica registros. Duc SQL 3 02-08-2004 16:46:09
Update registro - fallo con variable Gorehide SQL 4 13-07-2004 19:12:32


La franja horaria es GMT +2. Ahora son las 14:08:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi