Consultas en delphi

Ruego respuesta a la mayor brevedad, estoy con mi proyecto fin de carrera y necesito respuesta rápida. Resulta que tengo que hacer consultas en Delphi, sobre una base de datos programada en Access 2000. Todas me salen bien, excepto las que efectúo sobre un campo de tipo fecha, que no sé porque motivo no sale, aunque la consulta no da error, siempre me encuentra 0 registros, y seguro que hay al menos uno. Yo hago la consulta de la siguiente forma
with query1 do
begin
close; sql.clear;
sql.add('select nombre from empleados');
sql.add('where fecha='+datetostr(empleados.fecha));
open;
end;
Cuando hago esta consulta, me lista bien, y me coge bien la fecha, que la tengo en el formato dd/mm/aa, pero siempre me saca 0 registros, cuando sé que al menos hay 1. ¿Lo estoy haciendo bien?.
Respuesta
1
El problema con las conversiones de fechas es muy común. Hay que ir con mucho cuidado al hacer este tipo de consultas. Para ello lo mejor es pasarle a la query el datetime tal cual sin hacerle conversiones de la manera siguiente:
1.Ponemos un componente tquery y le añadimos en la property SQL el SQL parametrizado siguiente: select nombre from empleados where fecha=:pfecha
2.En la función o procedure escribiremos el siguiente código:
procedure ObtenerDataset(fecha : TDatetime);
begin
with query1 do
begin
close;
Parambyname('pfecha').AsDatetime := fecha;
Open;
end;
end;
Perdona, pero el procedimiento ObtenerDataset te sirve en tiempo de ejecución, que por cierto, si no es en tiempo de ejecución, ¿cómo diantres pensabas comprobar que funcionaba?
En el caso de las dos fechas, se soluciona fácil:
1.Ponemos un componente tquery y le añadimos en la property SQL el SQL parametrizado siguiente: select nombre from empleados where fecha between :pfechaini and :pfechafin
2.En la función o procedure escribiremos el siguiente código:
procedure ObtenerDataset(fechaini,fechafin : TDatetime);
begin
with query1 do
begin
close;
Parambyname('pfechaini').AsDatetime := fechaini;
Parambyname('pfechafin').AsDatetime := fechafin;
Open;
end;
end;
Nota: La query debe estar ligada a un tdatasource y a su vez éste a una dbgrid.
Cuando presiones al botón que sea, sólo tendrás que hacer la llamada de la forma:
ObtenerDataset(dtp1.DateTime, dtp1.DateTime);

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas