PDA

Ver la Versión Completa : Consulta ADOQuery


barakuda
09-04-2014, 05:03:19
Buenas

tengo otra piedrecita en el camino del aprendizaje y es que tengo que generar una consulta donde la condición es pasar una fecha y hora, si estos datos fueran por separado en la tabla no tendría problema pero, no lo están, 24/03/2014 21:45:00, y mi problema es que no se como entenderme con access cuando le paso la consulta.


AdoQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='Select * FROM Registro where CreationDate = 25/03/2014 15:21:43;
ADOQuery1.Open;


con: CreationDate = 25/03/2014 15:21:43 el mensaje de error es Parámetro mal definido
con: CreationDate = "25/03/2014 15:21:43" el mensaje de error es Se esperaba otro tipo de dato

Los fallos y el pq de los mensajes de error los entiendo y se pq pasan pero no consigo pesarle el formato correcto.

Alguna luz que me ilumine?
Gracias por adelantado

ecfisa
09-04-2014, 05:33:07
Hola barakuda.

Intenta de modo similar a este ejemplo:

var
UnDateTime: string;
begin
UnDateTime:= '25/03/2014 15:21:43';
with ADOQuerY1 do
begin
Close;
SQL.Text:= 'SELECT * FROM REGISTRO WHERE CREATIONDATE =:PCREAT';
Parameters.ParamByName('PCREAT').Value:= StrToDateTime(UnDateTime);
Open;
...
end;
end;


Saludos :)

barakuda
09-04-2014, 08:39:24
Hola ecfisa, gracias por la ayuda;

He probado el cod. que me comentas, ahora no me da error pero la consulta no me devuelve nada, modificando un poco el cod. he puesto el siguiente:

Adoquery1.SQL.text:='Select * from Registro where CreationDate = :FecHor';
ADOQuery1.Parameters.ParamByName('FecHor').DataType := ftDatetime;
ADOQuery1.Parameters.ParamByName('FecHor').Value := '24/03/2014 6:01:09';

Pero el resultado es el mismo que con tu cod.
Sospeche que quizás el problema este en la visualización pero simplemente cambie de campo y de dato y la consulta me muestra los datos bien.

sigoinvestigando, alguna idea?

ecfisa
09-04-2014, 09:49:20
Hola barakuda.

No sé que requisitos tiene tu aplicación, pero en principio te diría que buscar una fecha como tipo TDateTime (de tipo Double) es un poco complicado... Es fácil equivocar un minuto, segundo o ms, así que primero que nada revisaría que la fecha ingresada existe como tál.

Lo segundo es que el campo este declarado como Date y envíes a la búsqueda un DateTime o viceversa.

Saludos .)

barakuda
09-04-2014, 10:04:49
Hola !

He cambiado el ftDataTime por ftDate tienes toda la razon, el dato es del tipo 24/03/2014 5:43:25 y por otro lado en la bbdd, el campo si esta declarado como Fecha/Hora

gracias de nuevo por tus comentarios de ayuda, sigo con la "investigacion" :cool:

barakuda
09-04-2014, 23:56:55
Buenas !!

Gracias ecfisa por tus consejos dejando la cabeza reposar varias oras he conseguido que me funcione, adjunto el código tal cual yo lo voy a emplear:

Adoquery1.SQL.text:='Select * from Registro where ((CreationDate >= :datos) AND (CreationDate <= :datos2))';
ADOQuery1.Parameters.ParamByName('datos').DataType := ftDate;
ADOQuery1.Parameters.ParamByName('datos2').DataType := ftDate;
ADOQuery1.Parameters.ParamByName('datos').Value := ( '28/03/2014 22:44:59' );
ADOQuery1.Parameters.ParamByName('datos2').Value := ( '29/03/2014 00:44:59' );

Espero que también le pueda ser de ayuda a alguien mas, por mi parte quito esa piedrecita del camino rocoso del mi aprendizaje.

un saludo y gracias!

ecfisa
10-04-2014, 01:11:49
Me alegra que lo hayas solucionado :), y muchas gracias por enseñarnos como lo hiciste ^\||/

Saludos :)

barakuda
10-04-2014, 03:35:48
Buenas, de nuevo;
Añadir a lo anterior que; el cod anterior es para traerme unas determinadas fechas pero si lo que queremos es comprobar si existe una fecha en concreto uso el siguiente cod.:

Adoquery1.SQL.text:='Select * from Registro where CreationDate like :datos';
ADOQuery1.Parameters.ParamByName('datos').DataType := ftDate;
ADOQuery1.Parameters.ParamByName('datos').Value := ( '24/03/2014 5:43:25' );

Gracias a vosotros y a toda la gente que comparte sus conocimientos.

un saludo!!