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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-06-2006
Avatar de judit25
judit25 judit25 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Bronx, NY
Posts: 122
Poder: 18
judit25 Va por buen camino
Question Problema al filtrar un Query entre fechas

Buenas tardes!

Tengo un formulario con un TQuery, un Datasource , un TDBGrid enlazado al DataSource del TQuery, varios edit y 2 datetimepicker, apuntando a una base de datos Access conectado desde un ODBC.

Estoy utilizando el siguiente código para ir filtrando los datos que se van a mostrar en el DBGrid mediante el Query.

Código Delphi [-]
Query1.Close();
Query1.SQL.Text := 'SELECT nombres_campos FROM TDocumento WHERE Userscre like '+quotedStr(('%'+Eus.Text)+'%')+ 'and Tipo_Doc like '+quotedStr(('%'+Edit4.Text)+'%')+'and Forma_Pago like '+quotedStr(('%'+Edit5.Text)+'%')+ ' and Fecha_Emision between '+ FormatDateTime('dd/mm/yyyy', EFD.date) + ' and  ' + FormatDateTime('dd/mm/yyyy', EFH.Date) + ' Order By Numero';
Query1.Open();


El problema es que cuando intento filtrar por fecha no me muestra ninguna información.

Alguien sabe que es lo que estoy haciendo mal?

He probado algunas de las soluciones en hilos anteriores y no he podido resolver mi problema.

Gracias anticipadas.

Saludos
Responder Con Cita
  #2  
Antiguo 09-06-2006
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 23
vtdeleon Va por buen camino
Usa parametros para esos asuntos.

Ej:
Código Delphi [-]
begin
 Query.Close;
 Query.Sql.Text:='Select campo1, campo2 from tabla1 where campo1=:1parametro and campo2=:2parametro';
  //Se asignan valores a los parametros
  Query.ParamByName('1parametro').AsDate:=now;//Fecha actual en este caso
  Query.paramByname('2parametro'.AsInteger:=2342;
  Query.Open;
End;
Analiza eso, o busca en el foto sobre temas parecidos.

Suerte
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #3  
Antiguo 09-06-2006
Avatar de judit25
judit25 judit25 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Bronx, NY
Posts: 122
Poder: 18
judit25 Va por buen camino
Gracias

Deja probar nuevamente con parámetros, ya había intentado pero me daba un error deja ver si ahora no lo hace.

Gracias nuevamente
Responder Con Cita
  #4  
Antiguo 09-06-2006
Rayku Rayku is offline
Miembro
 
Registrado: jun 2006
Posts: 12
Poder: 0
Rayku Va por buen camino
HOLA MAN , ESTO ES BIEN FACIL, ESTE PROBLEMA DE LAS FECHAS SOLO SE PRESENTA CUANDO TRABAJAS CON ACCESS LA SOLUCION ES QUE ANTECEDAS LA PALABRA CDATE('+QuotedStr('01/01/2006')+') ALGO ASI , OK SUERTE ESPERO PODER AYUDARTE MAS COSAS NOS VEMOS
Responder Con Cita
  #5  
Antiguo 09-06-2006
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola Rayku, funciona pero solo en access y no en sqlServer porque no existe dicha función CDate, yo quisiera usar parametros justamente para no depender de una base de Datos y su respectivo formato de fecha, muchisimas gracias por responder.

Saludos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #6  
Antiguo 09-06-2006
Avatar de judit25
judit25 judit25 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Bronx, NY
Posts: 122
Poder: 18
judit25 Va por buen camino
Gracias

Probé con la opción que me diste, pero resulta que delphi no reconoce CDATE, seguiré probando a ver si doy con la solución.

PSD: No soy Man, soy Woman

Última edición por judit25 fecha: 09-06-2006 a las 17:56:02.
Responder Con Cita
  #7  
Antiguo 09-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
La opción de vtdeleon es la "más limpia". Normalmente los motores de bases de datos esperan la fecha en formato mm/dd/yyyy, si no cuadra en ese formato, lo intenta encajar con dd/mm/yyyy, el problema viene cuando se tiene dos parámetros de fecha (fecha_inicio y fecha_fin), las dos pueden encajar en un formato, en los dos formatos, o incluso puede llegar a tomar una fecha en un formato y la otra en el otro formato....

Resumen: Usa la fórmula de vtdeleon y delphi pasará las fechas en el formato adecuado según el motor de bases de datos que uses.

Saludos y espero que te ayude a entender el tema .
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 09-06-2006
Avatar de judit25
judit25 judit25 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Bronx, NY
Posts: 122
Poder: 18
judit25 Va por buen camino
Hola!

Gracias

Aplicando lo de los parámetros como me sugirió vtdeleon y Lepe el código a funcionado, le dejo el código por si alguien tiene el mismo problema.

Código Delphi [-]
Query1.Close();
Query1.SQL.Text := 'SELECT Nombre_Campos FROM TDocumento WHERE Fecha_Emision between :PFechad and :PFechah Order by Numero';
Query1.ParamByName('PFechad').AsDateTime := DateTimePicker1.DateTime;
Query1.ParamByName('PFechah').AsDateTime := DateTimePicker1.DateTime;
Query1.Open();

Para que funcionara con Access tuve que definir los parámetros como DateTime

Saludos

Gracias a todos por sus respuestas

Última edición por judit25 fecha: 09-06-2006 a las 18:27:30.
Responder Con Cita
  #9  
Antiguo 09-06-2006
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola Lepe una preguntita cuando usaba los componentes de BDE con la forma que indica vtdeLeon todo bien me funciono perfectamente, pero ahora que estoy utilizando ADO tuve problemas no me devolvia ningun valor lo hice de la siguiente forma:

Código Delphi [-]
   qry.Close;
   qry.SQL.Text:='SELECT * FROM tabla WHERE fecha=:Param1';
   qry.Parameters.ParamByName('Param1').DataType:=ftDate;
   qry.Parameters.ParamByName('Param1').Value:=datepick1.Date; 
   qry.Open;

de esa forma no me saca ningun resultado pero si hago esto si me devuelve resultados
Código Delphi [-]
   qry.Close;
   qry.SQL.Text:='SELECT * FROM tabla WHERE fecha=:Param1';
   qry.Parameters.ParamByName('Param1').DataType:=ftDate;
   qry.Parameters.ParamByName('Param1').Value:=FormatDateTime ('mm/dd/yyyy',datepick1.Date);
   qry.Open;

dandole formato si muestra resultados hice la prueba con access y sqlServer y funciona, pero a mi me gustaria que funcionara de la otra forma, sin darle el formato asi como lo dices tu

Cita:
Empezado por Lepe
........................................
Resumen: Usa la fórmula de vtdeleon y delphi pasará las fechas en el formato adecuado según el motor de bases de datos que uses.
........................................
Saludos y que tengan un bonito dia
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #10  
Antiguo 09-06-2006
Avatar de judit25
judit25 judit25 is offline
Miembro
 
Registrado: abr 2006
Ubicación: Bronx, NY
Posts: 122
Poder: 18
judit25 Va por buen camino
Hola Caro!

Intenta en vez de ftDate y datepick1.Date usar ftDateTime y datepick1.DateTime, tuve problema con Access usando solo Date y al utlizar DateTime me funcionó, intenta a ver si eso resuelve tu problema.

Saludos
Responder Con Cita
  #11  
Antiguo 09-06-2006
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Muchisimas gracias por responder judit25
Cita:
Empezado por judit25
...............
Intenta en vez de ftDate y datepick1.Date usar ftDateTime y datepick1.DateTime,
................
Saludos
hice el cambio pero tampoco me devuelve resultados, por si acaso mis campos si son de tipo Fecha.
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #12  
Antiguo 09-06-2006
Rayku Rayku is offline
Miembro
 
Registrado: jun 2006
Posts: 12
Poder: 0
Rayku Va por buen camino
Código Delphi [-]
cn.BeginTrans;
    cm := TADOCommand.Create(nil);
    cm.Connection := cn;
    cm.CommandText := ' UPDATE TIngresoDetalle SET '+
                      ' Tipo='+ QuotedStr(Tipo)+ ','+
                      ' Cantidad='+ Cantidad+ ','+
                      ' Monto='+ Monto+
                      ' WHERE  FechaLlegada=CDate('+QuotedStr(FechaLlegada)+') AND SerieF='+ QuotedStr(SerieF)+' AND NroFactura='+ QuotedStr(NroFactura)+' AND SerieG='+ QuotedStr(SerieG)+' AND NroGuia='+ QuotedStr(NroGuia)+'AND IDTipo='+ QuotedStr(IDTipo);
    cm.Execute;
    cn.CommitTrans;

espero q esto te sirva

Última edición por vtdeleon fecha: 10-06-2006 a las 01:25:34.
Responder Con Cita
  #13  
Antiguo 10-06-2006
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 23
vtdeleon Va por buen camino
Saludos
Cita:
Empezado por judit
Para que funcionara con Access tuve que definir los parámetros como DateTime
En realidad es asi que debe ser (DateTime) pues AsDate no exites, el codigo que habia puesto lo hice de memoria y no me acordaba.
Cita:
Empezado por Caro
pero si hago esto si me devuelve resultados
Código Delphi [-]
   qry.Close;
   qry.SQL.Text:='SELECT * FROM tabla WHERE fecha=:Param1';
   qry.Parameters.ParamByName('Param1').DataType:=ftDate;
   qry.Parameters.ParamByName('Param1').Value:=FormatDateTime ('mm/dd/yyyy',datepick1.Date);
   qry.Open;
dandole formato si muestra resultados hice la prueba con access y sqlServer y funciona, pero a mi me gustaria que funcionara de la otra forma,
Con Ado es diferente, eso es lo malo que he visto de esos componentes, a veces hay que especificarle el tipo del dato.
Cita:
Empezado por Rayku
Código Delphi [-]
cn.BeginTrans;
    cm := TADOCommand.Create(nil);
    cm.Connection := cn;
    cm.CommandText := ' UPDATE TIngresoDetalle SET '+
                      ' Tipo='+ QuotedStr(Tipo)+ ','+
                      ' Cantidad='+ Cantidad+ ','+
                      ' Monto='+ Monto+
                      ' WHERE  FechaLlegada=CDate('+QuotedStr(FechaLlegada)+') AND SerieF='+ QuotedStr(SerieF)+' AND NroFactura='+ QuotedStr(NroFactura)+' AND SerieG='+ QuotedStr(SerieG)+' AND NroGuia='+ QuotedStr(NroGuia)+'AND IDTipo='+ QuotedStr(IDTipo);
    cm.Execute;
    cn.CommitTrans;

espero q esto te sirva
Aqui volvemos al mismo problema de antes, pues estas enviando los datos directamente. Yo insisto en el uso de parametros, dejar que Delphi y la base de datos se encarguen del tipo de dato.
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #14  
Antiguo 17-04-2007
gabriel_romo gabriel_romo is offline
Registrado
 
Registrado: sep 2006
Posts: 2
Poder: 0
gabriel_romo Va por buen camino
Hola

Bueno ante todo dejenme decir que soy unpoco inexperto en esto; pero pues tengo un problema y no se como resolverlo, es con el manejo de fechas en las consultas sql, ya intente paando paramentros, pasando la fecha directamente de la fotma #mm/dd/aa# y la consulta no me regresa nada. el probolemacreo yo esta en la base de datos, porque yo he usado la forma #mm/dd/aa# en bases de datos que yo hago y me funciona bien; una vez me paso lo mismo,pero lo unico quie hice fue borrar la tabla y crearla de nuevo. pero ahora es distinto porque esa base de datos ya estaba y al parecer tiene el mismo problema, y como podrasn imaginarse no puedo borrar la tabla. El problema radica creo yo que el campo de fecha (que esta definido como fecha/hora en la base de datos) tiene algo asi como si la fecha la exigiera en formato mm/dd/aa hh:mm:ss yo que hice es quele envie la fecha #mm/dd/aa hh:mm:ss# pero pues me meraca error de todos modos. si alguien me puediera ayudar con eso, se los agradeceria mucho.
saludos
Responder Con Cita
  #15  
Antiguo 17-04-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
No dices que base de datos estas usando pero asi al vuelo intenta pasando asi los datos.

Cita:
#mm.dd.aaaa hh:mm:ss#
Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #16  
Antiguo 17-04-2007
hach hach is offline
Miembro
 
Registrado: mar 2007
Ubicación: Bariloche, Argentina
Posts: 44
Poder: 0
hach Va por buen camino
Formato fecha

Hace rato que no hago nada sobre access (por suerte decidi pasar todos mis desarrollos a firebird) pero creo recordar que tenes que pasar en el query las fechas con formato 'mm/dd/yyyy' no 'dd/mm/yyyy' como estas pasando

Espero que esto se sea de ayuda
Responder Con Cita
  #17  
Antiguo 17-04-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola a todos
Bueno para empezar access es como el juguete en bases de datos, tiene un generador de consultas muy facil de usar.
Para hacer una consulta estimando dos fechas se puede hacer tanto por parametros como ya han indicado los maestros, como por una sencilla sentencia sql.
Para empezar como access es un poco quisquillosa pues le decimos lo que queremos y luego le decimos como queremos que nos presente la fecha asi:
Código Delphi [-]
ADOQuery1.SQL.Add('  Select FechaTransac, CodTransac, Documento From TUTABLA ');
ADOQuery1.SQL.Add(' WHERE  TUTABLA.FechaTransac >= #'+DateToStr(DateTimePicker1.Date)+ '# AND  TUTABLA.FechaTransac <= # '+DateToStr(DateTimePicker2.Date)+'#');
ShortDateFormat := 'dd/mm/yyyy';
Al usar el generador de consultas de access, se vera el codigo sql y facilmente se podra implementar en un query.
Bueno creo que mas facil no se puede.
Saludos
Responder Con Cita
  #18  
Antiguo 18-04-2007
gabriel_romo gabriel_romo is offline
Registrado
 
Registrado: sep 2006
Posts: 2
Poder: 0
gabriel_romo Va por buen camino
Gracias!!!

Muchas Gracias!!, si era eso el error. Una disculpa que soy novato
Responder Con Cita
  #19  
Antiguo 20-04-2007
Avatar de Maury Manosalva
Maury Manosalva Maury Manosalva is offline
Miembro
 
Registrado: ago 2005
Posts: 101
Poder: 19
Maury Manosalva Va por buen camino
Respuesta para esto

Lo realice para MySQL, por si alguien lo necesita

Código Delphi [-]
 
//En las variables
Var formato : TFormatSettings;
 
//En la Consulta
 
Consulta := Consulta +' where a.FecAnuRep between Cast( :fi  as Date) and Cast( :ff as Date)';
 
// Despues de generar la consulta
 
GetLocaleFormatSettings(0, formato);
     formato.ShortDateFormat:= 'yyyy-MM-dd';
     ParamByName('fi').Value := DateToStr(tmrFechaInicial.Date,formato);
     ParamByName('ff').Value := DateToStr(tmrFechaFinal.Date,formato);
     open;

aca utilizo 2 datetimepicker para la fecha inicial y para la fecha final. funciona OK, si tienen dudas con gusto les ayudo.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Filtrar por fechas CamiloU Varios 1 11-04-2006 00:37:02
Problema entre query y sentencia sql ilichhernandez Conexión con bases de datos 1 17-11-2005 22:00:05
Filtrar fechas en QuickReport blamsa Impresión 1 06-05-2005 15:15:46
filtrar por fechas y por un campo mas mainau Conexión con bases de datos 9 01-04-2004 17:23:16
Problema con Query y Fechas anitra_cattivo Conexión con bases de datos 1 03-09-2003 20:15:42


La franja horaria es GMT +2. Ahora son las 20:51:34.


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