Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   ADOQuery con SQL y ACCESS seleccionando por fechas (https://www.clubdelphi.com/foros/showthread.php?t=45465)

saldanaluis 04-07-2007 03:59:33

ADOQuery con SQL y ACCESS seleccionando por fechas
 
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:
Cita:

WHERE FECHA = #FECHA1#
Gracias

Caral 04-07-2007 21:40:08

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

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

Código SQL [-]
SELECT * FROM tabla1 WHERE (fecha >= :Fecha1) AND (fecha <= :Fecha2)


Espero te sirva, saludos;)


La franja horaria es GMT +2. Ahora son las 07:33:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi