PDA

Ver la Versión Completa : Consulta rango de fechas con ADO y Access


lbidi
15-02-2019, 15:51:30
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

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

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





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

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