![]() |
Filtrar un resultado en DBGRID desde dos combobox
Buenas,
Tengo un problema, tengo una base de datos con un campo MES que me guarda el nombre del mes en curso, eje.: Marzo, Abril, Agosto. Tengo un formulario con un DBGRID donde quiero mostrar un resultado, el hecho es que tengo dos combobox "CMBDESDE" y "CMBHASTA" quiero que en el DBGRID se me filtren los resultados que seleccione en los dos combobox, es decir; Coloco en CMBDESDE: Enero y en CMBHASTA: Abril, en el dbgrid me mostraria todos los resultados que esten entre Enero y Abril (Enero, Febrero, Marzo, Abril) Sera posible una mano para eso...estoy algo parado en este paso! Gracias |
en el evento onChange de los combos:
|
No me muestra resultado alguno en el dbgrid!
|
me parece que en lugar de filtrar por el nombre del mes debes hacer un artificio para filtrar por el "numero" del mes
|
Hola.
Por supuesto funciona si en los combos tenés los nombres de los meses y asignas ComboBoxChange al evento OnChange de los dos combos... Un saludo. |
Muchas gracias por su ayuda, hice exactamente lo que me dijiste...le asigne Comboboxchange a ambos comobox, y ajuste el codigo a mi proyecto...Sin embargo los resultados no se ajustan a lo que quiero! Explico:
Si Selecciono ENERO y DICIEMBRE no me muestra resultados... Si selecciono ENERO y NOVIEMBRE me muestra solo algunos resultados (ENERO, FEBRERO, MARZO, MAYO, JULIO, JUNIO, NOVIEMBRE) aun cuando también tengo ABRIL, DICIEMBRE en mis registros... ¿A que podría deberse? |
no lo se no he podido hacer pruebas
pero me parece que deberias hacer el filtro por numero de mes en lugar de nombre de mes salvo error u omision |
Hola ZiriusB.
Es realmente extraño, a mí me funciona correctamente esté o no la columna ordenada alfabéticamente... La prueba la realizé sobre Firebird, pero para estar seguro que trabajemos sobre los mismos datos y no sé que BD estás usando, el código lo ajusté a la tabla Country (DBDDEMOS) ya que viene con Delphi. Te adjunto la prueba para que puedas realizar las comprobaciones necesarias y si encontras algún caso en que no se cumpla la condición del filtro, lo vemos en concreto. Un saludo. |
es un problema de mal diseño, si quieres hacer un filtro por mes, debes definir dicho campo (en tu base de datos) como entero, si lo defines como cadena, el filtro no funcionara por que al hacer el filtro el componente dataset no sabra que 'MARZO' < 'ABRIL' puesto que el componente hace la comparacion por orden alfabetico cuando se trata de cadenas, suerte, salu2
|
Aquí tienes un ejemplo de cómo realizar filtros sobre un Grid. Es ente caso se usa un exto de un Edit, pero la mecánica es la misma si el valor sale de un combo.
|
Hola.
Lo que lleva rato diciendo oscarac :) y ahora ratifica JoseAntonio lo dice todo: El algorítmo es correcto, pero no es aplicable a este caso... ;) Se me escapó el carácter ordinal de los nombres de los meses que no es precisamente el alfabético... Una idea que se me ocurre (y no es la mejor por que ensucias la tabla), es agregar un campo 'NroMes' de tipo numérico que se corresponda con el mes del registro. En el DBGrid deberías agregar todas las columnas menos la correspondiente a ese campo, luego podrías hacer:
No es "la" solución, pero no se me ocurre otra cosa usando filtros. Un saludo. |
Ok adopte una mejor opcion y mas rapida, luego pruebo con los nombres...
Me fui por los Numeros, una cosa que quiero dejar clara es que yo no tomo los valores de la base de datos para cargarlos a los Combobox, en la Propiedad ITEMS ahi coloco (1,2,3,4,5,6,7,8,9,10,11,12) ya que es una tabla en donde van a ir varios trabajadors con el mismo mes. Lo cambie a numeros y todo bien hasta cierto punto...Al seleccionar del mes 1 al mes 11 me selecciona solo (1,11,12) supongo que solo esta tomando el primer numero "1" al seleccionar del mes 2 al mes 12,11 o 10 no me muestra resultados sin embargo si selecciono del mes 2 al 9 si me hace bien la busqueda! Gracias por su ayuda, la aprecio mucho... |
mmm
entonces el campo no es entero, debe ser de tipo caracter por eso no te funciona |
Pues si, de hecho con tantas cosas en la cabeza no guarde el cambio que hice a Entero! por eso aun no lo tomaba...gracias, resuelto!!
Un millon por sus opiniones y ayuda! fueron un gran impulso! |
Muchachos, he querido filtrar un dblookupcombobox y me sale un error. me llama la atención por que lo he hecho tantas veces y ahora no me sale, no se si se me está pasando algo...
Les envío el código y el mensaje de error... Código:
procedure TFBuscar.DBLCBCargoClick(Sender: TObject); TBCargos: Field 'C' not found. FPrincipal: Formulario principal donde se encuentra el ttable. TBCargos: Ttable DBLCBCargo: dblookupcombobox donde programo el evento DBLCBIDSARH: otro dblookupcomboboxque sólo habilito cuandoya se hizo el fintrado. Gracias por su tiempo... Saludos. |
el campo de tu tabla tiene acentro? Cátedra????
no estoy seguro (porque no uso filtros)... pero no creo que el operador logico "o" exista en delphi Prueba asi
|
"Cátedra o Cargo" es el nombre del campo.
=p Pruebo lo que me pasaste... Gracias por responder. |
ah pues pense que eran 2 campos diferentes.....
los nombres de los campos que uso no son asi |
Gracias chicos, ahí resolví el problema, no se por qué pero no me acepta nombre de campos que contenga más de una palabra...
En lugar de poner "Cátedras o Cargos" puse "Cargos" Gracias por todo chicos. |
no te acepta por el espacio.
Proba con corchetes.
Ahí debería funcionar. |
La franja horaria es GMT +2. Ahora son las 15:29: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