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 28-08-2007
Avatar de radiohead
radiohead radiohead is offline
Miembro
 
Registrado: may 2004
Ubicación: Oliva (Valencia)
Posts: 34
Poder: 0
radiohead Va por buen camino
Cool Buscar registro por fecha utilizando filtro de ClientDataSet

Hola!

Tengo un problema al buscar registros por fecha en un programa de facturacion.

Utiliza una tabla grande, por lo que se hace la consulta sql con las condiciones requeridas por los parámetros especificados.

Pero, una vez cargados los datos y visualizados, utilizo la función de filtros e indices propia del ClientDataSet para navegar y buscar los datos que se encuentran en este momento en memoria. No me da ningún problema, excepto cuando busco por un campo de fecha.


Para introducir la fecha utilizo un MaskEdit con la típica máscara: Código Delphi [-]!99/99/0000;1;_

que le facilita al usuario la entrada de una fecha válida.

Luego traslado el valor que me da al texto de filtro de la siguiente forma:


Código Delphi [-]
campo := 'FechaRecibo';
cadena := mkdFecha.Text;
If (campo = 'FechaRecibo') Then
begin
cdsFacturacion.Filtered := False;
cdsFacturacion.Filter := campo + ' = ' + cadena;
cdsFacturacion.Filtered := True;
end






Es entonces cuando me sale el típico mensaje "Type mismach in expresion."

Creo que el formato de los campos de fecha en el ClientDataSet no son los mismos que el simple texto que utilizo para filtrar.

¿Alguien sabe si es posible filtrar por fecha?

Salu2
__________________
La vida es un desliz. Después, te mueres.
Responder Con Cita
  #2  
Antiguo 28-08-2007
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 20
kuan-yiu Va camino a la fama
¿Y por qué no utilizas un componente específico para que el usuario seleccione la fecha? Un TDateTimePicker siempre es mejor que un TEdit para capturar una fecha.
Responder Con Cita
  #3  
Antiguo 28-08-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 21
basti Va por buen camino
Creo que te faltan las comillas:
Código Delphi [-]
  cdsFacturacion.Filter := campo + ' = ' + QuotedStr(cadena);

otra cosa que tienes que comprobar es que la base de datos use el mismo formato de fecha que estás introduciendo en el edit.
__________________
Saludos.
Responder Con Cita
  #4  
Antiguo 28-08-2007
JosepGA JosepGA is offline
Miembro
 
Registrado: jun 2007
Ubicación: Tarragona
Posts: 166
Poder: 18
JosepGA Va por buen camino
Evento OnFilterRecord

Hola, si usas este evento podrás filtrar por más de un campo asignando a la variable Accept si el registro es valido o no. Podrás comparar directamente por el/los campo/s de la tabla de la siguiente forma:

Código:
Accept := ( tClientdataset.FieldByName( 'FechaRecibo' ).AsDateTime =
 StrToDate( mkdFecha.Text ) );
Hace tiempo lei que el comportamiento de este evento es similar a la propiedad filter, pero con la ventaja de poder comparar por mas de un campo y poder añadir llamadas a procesos.

Te recomiendo, por algun bug del componente, que la propiedad Filtered la pongas a TRUE despues de abrir la tabla, ya que en ocasiones me ha pasado que si la activo antes de abrir la tabla, no entra en el evento.
Responder Con Cita
  #5  
Antiguo 28-08-2007
Avatar de radiohead
radiohead radiohead is offline
Miembro
 
Registrado: may 2004
Ubicación: Oliva (Valencia)
Posts: 34
Poder: 0
radiohead Va por buen camino
Cita:
Empezado por kuan-yiu Ver Mensaje
¿Y por qué no utilizas un componente específico para que el usuario seleccione la fecha? Un TDateTimePicker siempre es mejor que un TEdit para capturar una fecha.
Gracias, Kuan-yiu

Es que ya utilizo los TDataTimePicker para la consulta sql.

Pero de con los datos que tengo en memoria hago una serie de búsquedas rápidas y flexibles directamente sobre el clientdataset
__________________
La vida es un desliz. Después, te mueres.
Responder Con Cita
  #6  
Antiguo 29-08-2007
Avatar de radiohead
radiohead radiohead is offline
Miembro
 
Registrado: may 2004
Ubicación: Oliva (Valencia)
Posts: 34
Poder: 0
radiohead Va por buen camino
Cita:
Empezado por JosepGA Ver Mensaje
Código:
Accept := ( tClientdataset.FieldByName( 'FechaRecibo' ).AsDateTime =
 StrToDate( mkdFecha.Text ) );
Una opcion interesante. Pero, si este evento se ejecuta al filtrar, ¿como haces para llamar a una función de filtro?



Por cierto, me funcionó poniendo comillas. En los casos en los que filtro por cualquier campo de texto funciona bien sin ellas.
Pero por lo visto, para la fecha las requiere.
__________________
La vida es un desliz. Después, te mueres.

Última edición por radiohead fecha: 29-08-2007 a las 10:20:29.
Responder Con Cita
  #7  
Antiguo 29-08-2007
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 20
kuan-yiu Va camino a la fama
Cita:
Empezado por radiohead Ver Mensaje
[...]
Por cierto, me funcionó poniendo comillas. En los casos en los que filtro por cualquier campo de texto funciona bien sin ellas.
Pero por lo visto, para la fecha las requiere.
Claro, si las pones en formato visual, dd/mm/aaaa, si las pasas en formato fecha (milisegundos desde una fecha de referencia) no.
Responder Con Cita
  #8  
Antiguo 29-08-2007
JosepGA JosepGA is offline
Miembro
 
Registrado: jun 2007
Ubicación: Tarragona
Posts: 166
Poder: 18
JosepGA Va por buen camino
llamada al filtro

en el evento
Código:
OnfilterRecord
pones las funciones de aceptación del registro, despues se activa la tabla y a continuación se pone la propiedad de la tabla
Código:
Filtered=TRUE
, en este momento la tabla aplica el evento
Código:
OnfilterRecord
. Yo por seguridad (o mania, no lo se), después de activar la propiedad
Código:
Filtered
, pongo la tabla en el primer registro con
Código:
First
, me he encontrado a veces que en este momento es cuando realmente realiza el filtro.
Responder Con Cita
  #9  
Antiguo 31-08-2007
Avatar de radiohead
radiohead radiohead is offline
Miembro
 
Registrado: may 2004
Ubicación: Oliva (Valencia)
Posts: 34
Poder: 0
radiohead Va por buen camino
RE: Llamada al filtro

Gracias, lo probaré. Es interesante filtrar por más de un campo.
__________________
La vida es un desliz. Después, te mueres.
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
Primer registro de un ClientDataSet?? Berto2003 Varios 4 13-03-2007 18:24:49
Filtro de fecha vencida leodelca23 Tablas planas 29 25-09-2006 14:08:03
No. de Registro y Filtro correcaminos2k2 Conexión con bases de datos 1 03-08-2006 10:54:01
Buscar por fecha.....ayuda!!! ronimaxh Firebird e Interbase 6 18-08-2004 15:38:29
Agregado, Filtro, ClientDataSet, Problema en Count() andre Conexión con bases de datos 1 23-07-2004 15:47:07


La franja horaria es GMT +2. Ahora son las 02:38:51.


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