[RESUELTO] Filtrar por 2 o mas valores seleccionados de un componente
#1
Posted 17 August 2010 - 07:26 PM
Estoy trabajando con delphi 7, access 2003 y ADO.
Necesito poder seleccionar varios valores desde un combobox o un componente parecido, y filtrar por esos valores.
Me explico:
Tengo un TDLookuoComboBox donde muestro todos los empleados, y necesito poder seleccionar varios de esos empleados y filtrar por esos valores.
Alguna sugerencia de como puedo lograr eso?
Gracias anticipadas
#2
Posted 17 August 2010 - 07:43 PM
Con el TDLookuoComboBox no es posible realizar esta operación directamente. Para lograrlo utilizando este componente, una posible solución sea que pongas un botón al lado de dicho componente y en el codifiques para llenar algún TListBox y después recorrer el mismo para obtener los valores que andas buscando.
Nos mantenemos en contacto!
#3
Posted 17 August 2010 - 07:51 PM
Yo haría algo así:
Salud OS
PD; Usé la idea de nuestro amigo Rolphy
Attached Files
#4
Posted 17 August 2010 - 08:45 PM
Interesante, pero Where campo in ????.
No se......
Saludos
#5
Posted 17 August 2010 - 09:14 PM
Hola
Interesante, pero Where campo in ????.
No se......
Saludos
Pues habrá que probar ¿ no ?
Salud OS
PD, bueno, bueno, cambiando los [] por () y listo, ya funciona
SELECT * FROM consumos WHERE referencia IN ('071820101','071820102')
Probado y funcionando en Firebird 2.1
#6
Posted 18 August 2010 - 07:24 AM
Hola
Interesante, pero Where campo in ????.
No se......
Saludos
Si amigo, es una opción para evitarte tantos OR en tus consultas.... en pocas palabras, hace la misma función... al menos en Firebird
Saludox !
#7
Posted 18 August 2010 - 09:31 AM
La cuestión es que IN es uno de los operadores más lentos. Si bien para Firebird esto no le es un problema porque es un campeón de la velocidad... para Access... tengo mis reservas.
No es lo mismo tirar un IN sobre 1 millón que sobre 10 millones.
No he visto por debajo como traducirá FB una consulta IN... creo que cuando se trata de algo como:
IN (valor1, valor2, ..., ValorN)
hace una traducción directa a ORs:
WHERE (campo = valor1) OR (campo = valor2) .... OR (campo = valorN)
Lo que terminaría siendo en cierto modo equivalente, se perdiría un poquillo de tiempo en generar la consulta definitiva. Para consultas más complejas habría que ver como se comporta.
En lo posible se debe recurrir a consultas a nivel y con operadores booleanos. FB, al menos, cuenta con un analizador y optimizador de expresiones lógicas... No recuerdo el nombre correcto, pero creo que se llama algo como OR-Tree (Árbol-OR).
Si son pocos valores no habría problema, pero cuanto más registros y más valores se requieran comparar es mejor optimizar esa consulta; por empezar... asegurarse de que para el campo en cuestión existe un índice.
Saludos,
#8
Posted 18 August 2010 - 09:44 AM
Estoy trabajando con delphi 7, access 2003 y ADO.
Hay caramba !!! no vi que era para access, ahi si no tengo idea si existe o no, en eso si que me quedo callado ante Caral
Salud OS
#9
Posted 22 August 2010 - 09:18 PM
Hola
Interesante, pero Where campo in ????.
No se......
Saludos
Pues habrá que probar ¿ no ?
Salud OS
PD, bueno, bueno, cambiando los [] por () y listo, ya funciona
sql
SELECT * FROM consumos WHERE referencia IN ('071820101','071820102')
Probado y funcionando en Firebird 2.1
Perdón por la demora en responder.
Les cuento que funcionó perfecto las soluciones que me ofrecieron.
Gracias a todos por su coolaboración y ayuda.
Saludos