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)
-   -   Select con DATETIME sobre access (https://www.clubdelphi.com/foros/showthread.php?t=48546)

FerCastro 27-09-2007 17:47:47

Select con DATETIME sobre access
 
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:
Código Delphi [-]
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

Marcos
 
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

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

Between
 
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

Resuelto
 
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

Cita:

Empezado por waly2k1 (Mensaje 234613)
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:

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


La franja horaria es GMT +2. Ahora son las 10:16:15.

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