Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-09-2007
FerCastro FerCastro is offline
Miembro
 
Registrado: abr 2006
Posts: 97
Poder: 19
FerCastro Va por buen camino
Thumbs up 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
Responder Con Cita
  #2  
Antiguo 27-09-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 27-09-2007
FerCastro FerCastro is offline
Miembro
 
Registrado: abr 2006
Posts: 97
Poder: 19
FerCastro Va por buen camino
Marcos

Muchas gracias, agradezco tu valiosa ayuda. Voy a probar y te comento que sucede.

Saludos desde la Ciudad de México
Responder Con Cita
  #4  
Antiguo 27-09-2007
FerCastro FerCastro is offline
Miembro
 
Registrado: abr 2006
Posts: 97
Poder: 19
FerCastro Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 27-09-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Has probado con Between xxx and xxx

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 27-09-2007
FerCastro FerCastro is offline
Miembro
 
Registrado: abr 2006
Posts: 97
Poder: 19
FerCastro Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 27-09-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
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
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #8  
Antiguo 27-09-2007
FerCastro FerCastro is offline
Miembro
 
Registrado: abr 2006
Posts: 97
Poder: 19
FerCastro Va por buen camino
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
Responder Con Cita
  #9  
Antiguo 28-09-2007
waly2k1 waly2k1 is offline
Miembro
 
Registrado: dic 2006
Ubicación: El país de las maravillas(Argentina)
Posts: 251
Poder: 18
waly2k1 Va por buen camino
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
Responder Con Cita
  #10  
Antiguo 16-04-2008
FerCastro FerCastro is offline
Miembro
 
Registrado: abr 2006
Posts: 97
Poder: 19
FerCastro Va por buen camino
Cita:
Empezado por waly2k1 Ver Mensaje
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
duda sobre un select (sql) acrophet Conexión con bases de datos 13 16-01-2008 20:24:51
Duda sobre el tipo de datos DATETIME en MYSQL flystar MySQL 2 16-07-2007 22:21:43
select sobre campo que contiene etiquetas HTML del cual quiero solo el contenido arantzal Varios 0 13-07-2006 14:28:12
Select no se ejecuta sobre el mimos registro... Alfredo Conexión con bases de datos 2 08-03-2005 14:49:42
Comentarios sobre access davidgaldo Conexión con bases de datos 1 27-02-2004 20:00:53


La franja horaria es GMT +2. Ahora son las 10:35:43.


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