PDA

Ver la Versión Completa : Consulta en un campo tipo fecha


Saul
13-08-2004, 10:02:36
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!


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


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í

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
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

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
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


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
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


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 adoQuery2.SQL.Add('select * from viatico where fecha_ida Between :fcdesde and :fchasta'
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: