Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta en un campo tipo fecha (https://www.clubdelphi.com/foros/showthread.php?t=13299)

Saul 13-08-2004 10:02:36

Consulta en un campo tipo fecha
 
Hola!
Me estoy iniciando en el uso de SQL y necesito saber como puedo hacer una consulta con un campo tipo fecha por ejemplo se que cuando tengo un campo tipo numerico y haga lo siguiente usando tablas en paradoz 7 uso el siguiente codigo para hacer un filtrado:

Query1.SQL.Add('Where Num_Client=' +Edit1.Text);



Pero si en la etiqueta quiero introducir un campo tipo fecha me manda un error
el codigo que pretendo poner es:

Query1.SQL.Add(Where Fecha Like' + Edit1.Text);


De antemano muchas gracias y espero sus repuestas

Nuria 13-08-2004 10:09:01

Hola Saul!

Código Delphi [-]
  Query1.SQL.Add('Where Fecha = :Fec ') ;
  Query1.ParamByName('Fec').AsDate := StrToDate(Edit1.Text);
  Query1.Active := True;

Espero que te sirva ;).

Saludos.

jachguate 13-08-2004 10:46:03

Solo aclaro:

No creo que haya motor que soporte el uso del operador like contra fechas, puesto que no tendria sentido (al menos no para mi).

Como ves, Nuria ha usado un operador de igualdad (=) que supongo será lo que buscabas.

Hasta luego.

;)

Lepe 13-08-2004 13:25:18

Si no quieres usar parámetros, (aunque deberías, ya que es más cómodo y elegante), puedes hacer esto otro, claro que debes dar 2 parametros fecha inicial y fecha final

Código Delphi [-]
Query1.SQL.Add('Where Fecha between ' + quotedstr(Edit1.Text) +' and ' + quotedstr(Edit2.text);

Uniendo la técnica de Nuria con esta, te podría quedar algo así
Código Delphi [-]
 Query1.SQL.Add('Where Fecha between :FecIni and FecFin ') ;
  Query1.ParamByName('FecIni').AsDate := StrToDate(Edit1.Text);
  Query1.ParamByName('FecFin').AsDate := StrToDate(Edit2.Text);
  Query1.Active := True;

Como sugerencia, te diría que para introducir fechas uses un TdateTimePicker o bien el que trae las RxLibs (es un control para bases de datos), así te quitarás los problemas de fechas incorrectas.

El siguiente paso es verificar que tu motor de bases de datos recibe la fecha en el mismo formato de fechas que tu quieres dd/mm/yyyy o bien mm/dd/yyyy. La función FormatDateTime te puede ayudar, modificando los parámetros del SQL a .AsString para más comodidad.

Espero te ayude.

Saludos

adan12 05-12-2011 06:00:00

problemas delphi y datapiker
 
yo tengo este codigo quiero hacer una consulta de tal fecha a tal fecha pero tengo este codigo y no me sale nada marco las fechas y sale q no hay registro y si hay registros

adoQuery2.Close;
adoQuery2.SQL.Clear;
adoQuery2.SQL.Add('select * from viatico where fecha_ida Between '+
FormatDateTime('DDMMYYYY',DateTimePicker1.Date)+' And '+
FormatDateTime('DDMMYYYY',DateTimePicker2.Date));
adoQuery2.Open;
if ADOQuery2.IsEmpty then
begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
MessageBox(Handle, 'No hay entradas.', 'Warnning', Mb_Ok + MB_ICONHAND + Mb_DefButton1)
end
end;

oscarac 05-12-2011 06:54:55

que base de datos usas?

oscarac 05-12-2011 06:56:50

prueba asi

Código Delphi [-]
adoQuery2.SQL.Add('select * from viatico where fecha_ida Between '+
quotedstr(FormatDateTime('DDMMYYYY',DateTimePicker1.Date))+' And '+
quotedstr(FormatDateTime('DDMMYYYY',DateTimePicker2.Date)));

adan12 05-12-2011 17:46:17

Cita:

Empezado por oscarac (Mensaje 420495)
que base de datos usas?

ESTOY USANDO POR AHORA Y POR SU PORTABILIDAD ACCES PERO SIEMPRE USO SQL 2008

oscarac 05-12-2011 17:50:17

oh ya
el tema es que en access el tema de las fechas es complicadito

tienes que usar el caracter # entre las fechas algo asi

Código Delphi [-]
 
adoQuery2.SQL.Add('select * from viatico where fecha_ida Between #'+
FormatDateTime('DDMMYYYY',DateTimePicker1.Date)+'# And #'+
FormatDateTime('DDMMYYYY',DateTimePicker2.Date) + '#');
y en SqlServer como te dije en el post anterior

adan12 05-12-2011 17:51:08

Cita:

Empezado por oscarac (Mensaje 420544)
oh ya
el tema es que en access el tema de las fechas es complicadito

tienes que usar el caracter # entre las fechas algo asi

Código Delphi [-]
 
adoQuery2.SQL.Add('select * from viatico where fecha_ida Between #'+
FormatDateTime('DDMMYYYY',DateTimePicker1.Date)+'# And #'+
FormatDateTime('DDMMYYYY',DateTimePicker2.Date) + '#');
y en SqlServer como te dije en el post anterior

dejame provar a ver q onda ok......

PepeLolo 12-12-2011 02:39:44

Simplifica la consulta usando parámetros con las fechas
Código Delphi [-]
adoQuery2.SQL.Add('select * from viatico where fecha_ida Between  :fcdesde and :fchasta'
Código Delphi [-]
adoQuery2.paramByName('fcdesde').AsDate := DateTimePicker1.Date
adoQuery2.paramByName('fcHasta').AsDate := DateTimePicker2.Date;

Si no quieres problemas con ellas es la mejor solución, los componentes se encargan de realizar las transformaciones necesarias según el motor de bbdd.:cool:


La franja horaria es GMT +2. Ahora son las 11:43:16.

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