PDA

Ver la Versión Completa : Select con DATETIME sobre access


FerCastro
27-09-2007, 17:47:47
Hola amigos,

Tengo un pequeño problema a la hora de hacer un query.

D7
Access
Campo DATETIME

Quiero hacer un select entre fechas pero cuando ejecuto el query el sistema me manda el siguiente error:

No coinciden los tipos de datos en la expresión de criterios



Así es com tengo mi query:

ADOAttend.Connected := TRUE;
TCheckinout.Active := TRUE;

cDesde := DateToStr(dDesde.Date);
cHasta := DateToStr(dHasta.Date);

With QCheckinout Do
Begin
SQL.Text := '';
SQL.Text := 'SELECT USERID, CHECKTIME, CHECKTYPE, manageId FROM checkinout '+
' WHERE CHECKTIME>='+Chr(39)+ cDesde +Chr(39)+
' AND CHECKTIME<=' +Chr(39)+ cHasta +Chr(39);
ExecSQL;
end;



Alguna pista de que este haciendo mal?

Agradezco mucho la ayuda

Fernando

marcoszorrilla
27-09-2007, 18:09:11
Por una parte DateToStr no devuelve el formato de fecha correcto para SQL
Prueba este ejemplo:

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(DateToStr(Date));
ShowMessage(FormatDateTime('mm/dd/yyyy',Date));
end;

y por otra Access espera que las fechas entre almohadillas:
>#01/01/2006#

Un Saludo.

FerCastro
27-09-2007, 19:06:54
Muchas gracias, agradezco tu valiosa ayuda. Voy a probar y te comento que sucede.

Saludos desde la Ciudad de México

FerCastro
27-09-2007, 21:17:04
Marcos,

Muchas gracias por la ayuda, está ejecutando el query pero pasa algo curioso.

Fijate que para que el sistema me devuelva datos de una fecha en especifico tengo que indicar mi limite inferior un dia antes y mi limite superior un dia después. Por ejemplo, si quiero el reporte del 3 de septiembre tengo que poner que lo quiero del 2 al 4, y asi sucesivamente.

Lo curioso es que mis operadores son >= y <=

Alguna idea?

Agradezco la ayuda

marcoszorrilla
27-09-2007, 21:25:44
Has probado con Between xxx and xxx

Un Saludo.

FerCastro
27-09-2007, 23:15:22
Hola Marcos,

Probé con el between y obtengo el mismo resultado, o casi el mismo, para pedir por ejemplo datos del 6 de el mes tengo que pedir datos entre el 6 y el 7.

Gracias por la ayuda, sigo probando

Fernando Castro

fjcg02
27-09-2007, 23:29:48
El problema viene por ser datetime el campo por el que buscas.
Si quieres que busque algo del día 6 de Enero de 2007, tienes que buscar desde el 6/01/07 00:00:00 horas hasta el 6/01/07 23:59:59 horas.
Por eso pones del 6/01/07 al 7/01/07 y el resultado es correcto, porque supone las 00:00:00 horas en las dos fechas.

Para corregir esto, tendrías que hacer un cast del campo de la bbdd para que compare solo la fecha y desprecie la hora, o tenerlo en cuenta sin más para futuras ocasiones.

Espero haberte ayudado.

Saludos

FerCastro
27-09-2007, 23:55:45
Simplemente le agrego un día a la fecha que es mi límite superior. Agradezco el tip, me has resuelto un gran problema de novato.

Fernando

waly2k1
28-09-2007, 05:25:06
Siempre que guardes las fechas hacelo con formato fecha no now
ya que si te guarda horas no te funcionan las consultas

dado que '10/10/2007' no es lo mismo a '10/10/2007 00:15:00 am'
ahora '10/10/2007' = '10/10/2007 00:00:00'

En SQL Server tenes funciones para formatear las fechas desde un stored procedures pero desde access no, el formato de consultas en Access es como te lo mencionaron anteriormente #MM/dd/yyyy#, con simbolo numeral y formato yankee, de esta manera funciona con cualquier configuración regional.

Salu2

FerCastro
16-04-2008, 00:46:24
Siempre que guardes las fechas hacelo con formato fecha no now
ya que si te guarda horas no te funcionan las consultas

dado que '10/10/2007' no es lo mismo a '10/10/2007 00:15:00 am'
ahora '10/10/2007' = '10/10/2007 00:00:00'

En SQL Server tenes funciones para formatear las fechas desde un stored procedures pero desde access no, el formato de consultas en Access es como te lo mencionaron anteriormente #MM/dd/yyyy#, con simbolo numeral y formato yankee, de esta manera funciona con cualquier configuración regional.

Salu2


Hola, estoy teniendo problemas para hacer un select sobre un campo datetime, pero cuando lo quiero hacer mas o menos asi:


DateTimeToString(formattedDateTime, 'dd/mm/yyyy hh:mm:ss', dFecha);
DM1.ADOQBEventos.Active := false;
DM1.ADOQBEventos.SQL.Text := '';
DM1.ADOQBEventos.SQL.Text := ' SELECT * FROM eventos ' +
' WHERE ( IDDispositivo = ' + cIDDispositivo + ') AND ' +
' (IDEmpleado = ' + cnEmpleado + ') AND' +
' (Fecha = #'+formattedDateTime+'#)';


Al momento de activar el query me dice que se ha introducido información incompleta o incoherente.

Sabe alguien como puedo hacer la consulta en access, utilizando un query sobre un campo datetime que incluye la hora?

Agradezco mucho

Fernando Castro