Jump to content


Photo

[RESUELTO] Filtrar por 2 o mas valores seleccionados de un componente


  • Please log in to reply
8 replies to this topic

#1 jcheco

jcheco

    Member

  • Miembros
  • PipPip
  • 46 posts
  • LocationBronx, NY

Posted 17 August 2010 - 07:26 PM

Buenas Noches.

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
  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2092 posts
  • LocationRepública Dominicana

Posted 17 August 2010 - 07:43 PM

Saludos.

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!
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 17 August 2010 - 07:51 PM

Hola

Yo haría algo así:

Imagen Enviada

Salud OS

PD; Usé la idea de nuestro amigo Rolphy :)

Attached Files


  • 0

#4 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4266 posts
  • LocationCosta Rica

Posted 17 August 2010 - 08:45 PM

Hola
Interesante, pero Where campo in ????.
No se...... (y)
Saludos

  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 17 August 2010 - 09:14 PM

Hola
Interesante, pero Where campo in ????.
No se...... (y)
Saludos


Pues habrá que probar ¿ no ? :D

Salud OS

PD, bueno, bueno, cambiando los [] por () y listo, ya funciona :p



sql
  1. SELECT * FROM consumos
  2. WHERE referencia IN ('071820101','071820102')



Probado y funcionando en Firebird 2.1 :)
  • 0

#6 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 18 August 2010 - 07:24 AM

Hola
Interesante, pero Where campo in ????.
No se...... (y)
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 :D (y)

Saludox ! :)
  • 0

#7 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 18 August 2010 - 09:31 AM

Pues si, no discuto que con IN se consigue una consulta muy bonita y fácil de leer. Como lo ha dicho Fena... nos evitamos unos cuantos ORs.
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.  ^o|
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:



sql
  1. IN (valor1, valor2, ..., ValorN)



hace una traducción directa a ORs:


sql
  1. 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,
  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

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 :p

Salud OS
  • 0

#9 jcheco

jcheco

    Member

  • Miembros
  • PipPip
  • 46 posts
  • LocationBronx, NY

Posted 22 August 2010 - 09:18 PM


Hola
Interesante, pero Where campo in ????.
No se...... (y)
Saludos


Pues habrá que probar ¿ no ? :D

Salud OS

PD, bueno, bueno, cambiando los [] por () y listo, ya funciona :p



sql
  1. SELECT * FROM consumos
  2. 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
  • 0




IP.Board spam blocked by CleanTalk.