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..
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.