PDA

Ver la Versión Completa : ADOQuery con SQL y ACCESS seleccionando por fechas


saldanaluis
04-07-2007, 03:59:33
Hola, Tengo una situación que espero me puedan apoyar.
Tengo un SQL donde selecciono registros de una tabla con limites de fechas.
El asunto es que la fecha de limite superior como que no lo está tomando correctamente. El SQL es algo como esto:
SELECT * FROM TABLA
WHERE FECHA >= FECHA1
AND FECHA <= FECHA2
Tengo registros con fecha de los dias 1,2 y 3, si le pongo la FECHA1 como dia 1 y la FECHA2 como dia 3, solo me selecciona los registros de los dias 1 y 2.
Además, si le pongo la misma fecha a la FECHA1 y FECHA2 para tener los registros de un solo dia, no me selecciona nada.
Como ven en el título, estoy utilizando TADOQuery con ACCESS.
¿Que puedo hacer con esta situación? Gracias por su valiosa ayuda.

marcoszorrilla
04-07-2007, 07:12:09
A simple vista la consulta está bien formulada, posibles fallos, el formato de fecha en SQL debe de ser mm/dd/yyyy, Access utiliza la almohadilla # para delimitar las fechas.

Un Saludo.

Neftali [Germán.Estévez]
04-07-2007, 10:04:53
También miraría posibles problemas relacionados con la hora; A veces sin darnos cuenta no tenemos en cuenta eso y en la BD y/o en el programa éstán almacenados los campos de forma distinta (en uno con heras y en otro no).

saldanaluis
04-07-2007, 20:15:30
Gracias a ambos. Voy a tomar en consideración ambos comentarios. Pero ahora me salta una duda. Eso de las almohadilla # para delimitar las fechas. Esto quiere decir que le tengo que especificar de esta manera:
WHERE FECHA = #FECHA1#
Gracias

Caral
04-07-2007, 21:40:08
Hola

ShortDateFormat := '#yyyy/mm/dd#';
ADOQuery1.SQL.Text:= 'SELECT * FROM TABLA';
ADOQuery1.SQL.Add(' WHERE Fecha >= '+DateToStr(DateTimePicker1.Date)+' AND Fecha <= '+DateToStr(DateTimePicker2.Date));
ADOQuery1.Open;
Esta es una manera de hacerlo, hay otras.
Como ves en este caso es sin parametros, se utiliza en DateTimePicker.
Saludos

aldmoscardi
04-07-2007, 23:10:26
Bueno, el problema no esta en tu consulta, sino que en el acces, lo que deves hacer es utilizar una consulta parametrizada, y cuando le pases los parametros utiliza la funcion FormatDateTieme(formato, fecha) donde en el campo formato le pasaras 'dd/MM/yyyy' y en el formato fecha el tipo datetime, calculo que proviene de un DateTimePicker1 por consecuente te quedaria algo asi como:


Query1.close;
Query1.Parameters.ParamByName('Fecha1').Value := FormatdateTime('dd/MM/yyyy', DateTimePicker1.Date)

Query1.Parameters.ParamByName('Fecha2').Value := FormatdateTime('dd/MM/yyyy', DateTimePicker2.Date)
Query1.Open;


y la consulta deveria ser algo como esto


SELECT * FROM tabla1 WHERE (fecha >= :Fecha1) AND (fecha <= :Fecha2)



Espero te sirva, saludos;)