FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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. |
#2
|
||||
|
||||
¿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.
|
#3
|
|||
|
|||
Creo que te faltan las comillas:
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. |
#4
|
|||
|
|||
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 ) ); 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. |
#5
|
||||
|
||||
Cita:
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. |
#6
|
||||
|
||||
Cita:
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. |
#7
|
||||
|
||||
Claro, si las pones en formato visual, dd/mm/aaaa, si las pasas en formato fecha (milisegundos desde una fecha de referencia) no.
|
#8
|
|||
|
|||
llamada al filtro
en el evento
Código:
OnfilterRecord Código:
Filtered=TRUE Código:
OnfilterRecord Código:
Filtered Código:
First |
#9
|
||||
|
||||
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. |
|
|
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 |
|