Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta ADOQuery (https://www.clubdelphi.com/foros/showthread.php?t=85619)

barakuda 09-04-2014 05:03:19

Consulta ADOQuery
 
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.

Código Delphi [-]
  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:
Código Delphi [-]
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:

Código Delphi [-]
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:

Código Delphi [-]
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.:

Código Delphi [-]
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!!


La franja horaria es GMT +2. Ahora son las 08:50:20.

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