Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Consulta rango de fechas con ADO y Access (https://www.clubdelphi.com/foros/showthread.php?t=93755)

lbidi 15-02-2019 15:51:30

Consulta rango de fechas con ADO y Access
 
Buenas, necesito consultar una bd access con ADO y obtener registros con un rango de fechas.
He buscado en el foro y un par de soluciones que he probado no me han resultado.

Tengo el siguiente codigo el cual al ejecutarlo me dice que el parametro pdate1 no existe

Código Delphi [-]
    Qry_ADO.SQL.Clear;
    Qry_ADO.SQL.Add( 'SELECT * FROM checkinout ');
    Qry_ADO.SQL.Add( 'Where checktime between : pdate1 and : pdate2' );
    Qry_ADO.SQL.Add( 'ORDER by userid, checktime' );
    Qry_ADO.Parameters.ParamByName('pdate1').Value := FormatDateTime('dd/mm/yyyy', edt_Desde.Date );
    Qry_ADO.Parameters.ParamByName('pdate2').Value := FormatDateTime('dd/mm/yyyy', edt_Hasta.Date );
    Qry_ADO.Open;

que puede estar mal ??
Hay que agregar los parametros en el componente adoquery ??

Gracias

Sir16 15-02-2019 17:47:08

creo que el problema esta en el espacio al declarar las variables que le pasas, no deben tener espacios
Código Delphi [-]
Qry_ADO.SQL.Add( 'Where checktime between :pdate1 and :pdate2' );

coge el icono pero seria los puntos seguidos del nombre de la variable

ecfisa 15-02-2019 17:54:09

Hola.

A golpe de ojo el problema está en la línea,
Código Delphi [-]
Qry_ADO.SQL.Add( 'Where checktime between : pdate1 and : pdate2' );
quita los espacios entre los dos puntos y los nombres de parámetros.

Saludos :)

Edito: Tal como dijo Sir16. ( No había visto su respuesta :o )

lbidi 15-02-2019 18:44:18

Puse los espacios en la pregunta solo para que no salieran los iconos.. :)

En el codigo, los tengo sin espacios..

Gracias !!

Sir16 15-02-2019 19:01:09

ok,

la otra opcion que podria ser es el tema de tener encapsulados los datos con '' para que cogiera los parametros algo como



Código Delphi [-]

Qry_ADO.SQL.Add( 'Where checktime between '': pdate1'' and '': pdate2''' );


aciendo el escape de poner '00/00/000' y no coger 00/00/0000 las fechas.
Tambien hay el QuotedStr(fecha) ponerlo en el parametro de las fechas

lbidi 15-02-2019 19:09:56

Gracias Sir16, probare de esa manera.

He probado de la siguiente manera
Código Delphi [-]
    Qry_ADO.SQL.Clear;
    Qry_ADO.SQL.Add( 'SELECT * FROM checkinout c ');
    Qry_ADO.SQL.Add( 'Where c.checktime between ' + '#' + FormatDateTime('mm/dd/yy', edt_Desde.Date ) + '#' );
    Qry_ADO.SQL.Add( 'and ' + '#' + FormatDateTime('mm/dd/yy', edt_Hasta.Date ) + '#' );

y funciona si el rango de fechas tiene mas de 1 dia de diferencia, ahora si los 2 edits son iguales , o sea que quiero buscar datos de un dia solo, no me trae registros..

Tambien he probado con el formato del año con 4 digitos pero no obtengo resultados.

Me enloquece !!!

lbidi 15-02-2019 20:29:56

Logre hacerlo de esta manera

Código Delphi [-]
    With Qry_ADO do
    begin
        SQL.Clear;
        SQL.Add( 'SELECT * FROM checkinout c ');
        SQL.Add( 'Where Format( c.checktime, "dd/mm/yyyy" ) between ' + QuotedStr( FormatDateTime('dd/mm/yyyy', edt_Desde.Date ) ) );
        SQL.Add( 'and ' + QuotedStr( FormatDateTime('dd/mm/yyyy', edt_Hasta.Date ) ) );
        Open;
    end;

Gracias por las respuestas..


La franja horaria es GMT +2. Ahora son las 04:15:58.

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