Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error en código Sql (https://www.clubdelphi.com/foros/showthread.php?t=67908)

radenf 13-05-2010 13:12:07

Error en código Sql
 
Hola amigos del foro.
Recurro a Uds.una vez más para saber por qué me este código no funciona y siempre me arroja el mismo error.

Código Delphi [-]
procedure TCitaciones.DBPlanner1PlannerDblClick(Sender: TObject; Position,
FromSel, FromSelPrecise, ToSel, ToSelPrecise: Integer);
begin
with DBPlanner1.CreateItemAtSelection  do
Text.Text:= DBEdit7.Text;
DBPlanner1.Items.DBItem.Update;
Query3.Close;
Query3.SQL.Clear;
Query3.SQL.Add('select cast(startime as time)');
Query3.SQL.Add('from registros.citas');
Query3.SQL.Add('where startime='+QuotedStr(DBEditQuery1.Text));
Query3.Open;
Query4.Close;
Query4.SQL.Clear;
Query4.SQL.Add('select cast(startime as date)');
Query4.SQL.Add('from registros.citas');
Query4.SQL.Add('where startime='+QuotedStr(DBEditQuery1.Text));
Query4.Open;
DataSourceCitas.DataSet.Edit;
DataSourceCitas.DataSet.FieldByName('nombre').AsString:= DBEdit7.Text;
DataSourceCitas.DataSet.FieldByName('prevision').AsString:= DBComboBox5.Text;
DataSourceCitas.DataSet.FieldByName('telefono').AsString:= DBEdit2.Text;
DataSourceCitas.DataSet.FieldByName('fechacita').AsString:= DBEdit6.Text;
DataSourceCitas.DataSet.FieldByName('horacita').AsString:= DBEdit4.Text;
DataSourceCitas.DataSet.Refresh;
end;

El error es el siguiente:

Sql error:ERROR:invalid input syntax for type timestamp:""

Estoy utilizando D2007, Zeos y PostgreSql. Startime es un campo de tipo timestamp.
El form corresponde a un TMSDBplanner.

Muchas gracias por su tiempo y ayuda

Casimiro Notevi 13-05-2010 13:18:47

Pon un punto de ruptura (breakpoint) en query3.open y mira
lo que tiene almacenado query3.sql.text
Seguramente no recibe un valor correcto en quotedstr(dbeditquery1.text)

ContraVeneno 13-05-2010 16:14:33

Concuerdo con Casimiro, seguramente la línea:
...where startime='+QuotedStr(DBEditQuery1.Text));

no tiene el formato correcto para un campo de tipo timestamp..

la posible solución sería utilizar parámetros, en lugar de meterel valor en la consulta.

la otra opción sería utilizar alguna función como formatdatetime...

saludos.

radenf 13-05-2010 19:18:51

Muchas gracias Casimiro Notevi y ContraVeneno por sus aportes.
Voy a probar lo que me sugieren.
El valor del DBEditQuery1 se genera al hacer doble click en el TMSDBplanner, ya que cada espacio en él representa una fecha y una hora.

Salu2 y muchas gracias

radenf 14-05-2010 01:28:04

Probé lo que Uds. me señalaron y descubrí que el código está correcto, pero al aplicar un filtro que sólo muestra los registros de la semana que se quiere ver en el TMSDBPlanner, por alguna razón modifica el valor del DBEditQuery1 y no permite leerlo.
Adjunto el código del filtro, que me fue enviado por la gente de soporte deTMS y que siempre me había funcionado, en este caso bloquea el programa y como no tengo idea que es lo que hace, a lo mejor Uds. me pueden señalar cómo corregirlo.
Este filtro evita que cuando la Tabla.Citas tenga demasiados registros se enlentezca la ejecución del programa.

Código Delphi [-]
procedure TCitaciones.DBDaySource1SetFilter(Sender: TObject);
var
sd1,sd2:string;
begin
sd1 := DateToStr(DBDaySource1.Day);
sd1 := #39+sd1+#39;
sd2 := DateToStr(DBDaySource1.Day+6);
sd2 := #39+sd2+#39;
TablaCitas.Filter:=  'Startime > '+sd1+' and Endtime < '+sd2;
TablaCitas.Filtered := True;
end;

Un gran saludo y muchas gracias por su ayuda


La franja horaria es GMT +2. Ahora son las 08:53:52.

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