Filtrar por un cuadro combinado de múltiples opciones y ver resultado en un listbox

Quisiera que me guíen, tengo un cuadro combinado de opciones múltiples y quisiera que al seleccionar esas opciones, por medio de un botón, me muestre los resultados en un listbox. He intentado hacerlo por medio de este código, pero me desaparecen los resultados.

If IsNull(cuadrocomb.Value) Or cuadrocomb.Value = "" Then
listbox.RowSource = "Select Id, Campo1, Campo2 from Tabla"
Else
listbox.RowSource = "Select Id, Campo1, Campo2 from Tabla where Campo2 like '*" & cuadrocomb.Value & "*'"
Exit Sub
End If

2 respuestas

Respuesta
1

Carlos: La construcción no la veo inadecuada salvo que>>

listbox.RowSource = "Select Id, Campo1, Campo2 from Tabla where Campo2 like '*" & cuadrocomb.Value & "*'"

Debería de ser>>   '*" & cuadrocomb.Column(x) & "*'"

Siendo x la columna en la que tengas el valor a buscar, teniendo en cuenta que la primera es > 0 "Cero", la segunda 1 y así sucesivamente.

Y además supongo que ese código lo tienes en el AfterUpdate del Combo. Saludos >> Jacinto

Hola Jacinto. El código lo tengo en un botón que dice Buscar. Es correcto o la recomendación es que esté en AfterUpdate?

Carlos: Mejor te ahorras el Botón y lo pones directo en el AfterUpdate del Combo.

Mis saludos >> Jacinto

Hola Jacinto de nuevo. No me funciono de esta manera. El problema puede deberse a que el campo, tanto en la tabla como en el formulario donde cargo los registros, es un cuadro combinado? Gracias nuevamente por su tiempo. 

Saludos

Carlos: La idea que te propone Ricardo es una buena alternativa, pero si quieres seguir probando en tu idea inicial, puedes hacer lo que a continuación te explico, suponiendo que los Nombres de tus Objetos sean:

El del ListBox >> LBoxDatos

El del Combo >> CboDatos

En el evento al cargar del Formulario:

Private Sub Form_Load()

'Para que no te muestre ningún valor en la Lista

Me.LBoxDatos.RowSource = ""

End Sub

Ahora en el Evento AfterUpdate del Combo

Private Sub CboDatos_AfterUpdate()

If IsNull(Me.CboDatos) Or Me.CboDatos = "" Then

'Con ésta Línea te mostrará todos los datos en la Lista
Me.LBoxDatos.RowSource = "SELECT Id, Campo1, Campo2 FROM TuTabla;"
Else
Me.LBoxDatos.RowSource = "SELECT Id, Campo1, Campo2 FROM TuTabla WHERE Campo2 Like '*" & Me.CboDatos.Column(0) & "*'"

End If

End Sub

Y ahora vamos a ver que datos pones como Origen de Fila del Combo.

Si vas a filtrar los valores del Campo2 de la Tabla, lo lógico sería que el CboDatos tenga una sola Columna >> Por eso te he puesto ... Column(0)

Esa columna puede ser: Tabla/Consulta, Lista de valores, o Lista de Campos y eso tu mejor que cualquiera de nosotros sabe lo que es mas adecuado a tu necesidad.

Mis saludos >> Jacinto

Respuesta

Has las consulta por fuera del RowSource y llena el list con otro procedimiento de acuerdo a tu criterio solicitado:

Dim rst as ADODB.Recordset

Dim SQL as string

Set rst = New ADODB.Recordset

SQL = "Select Id,Campo1,Campo2 From tabal

rst.open SQL, CONEXION ' "CONEXION ES EL NOMBRE DE TU CONEXION QUE TENGAS"

if rst.EOF = False then ' Si la consulta que realizas es precisa

listbox1.clear

While Not rst.EOF  'Mientras no se termine los registro de tu consulta

listbox1.add (rst!campo1) ' Metes en el List el campo que deseas

rst.movenext

wend

Else ' si no consigue la consulta especifica 

SQL = "Select Id,Campo1,campo2 From tabla Where '% & cuadrocomb.value & %'"

Set rst = New ADODB.Recordset

rst.open isql,CONEXION

 if rst.EOF = False then

Listbox1.clear

While Not rst.EOF 

listbox1.add (rst!campo1)

rst.movenext

wend

else

msgbox("No se consigue datos relacionados")

end if

end if

Espero sea lo que necesitas amigo responde si fue de ayuda

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas