ListBox enlazados entre sí en un Form

Tengo lo siguiente en Access:

Tabla Producto: CodProducto + CodCategoria + Nombre + Precio + Stock
Tabla Categoria: CodCategoria + Nombre
Deseo realizar una búsqueda rápida utilizando dos ListBox en un form:
Listbox 1 contenga las categoría del producto a la izquierda
Listbox 2 contenga los productos a la derecha
Cuando yo haga clic en la lista 1, solamente me aparezcan en la lista 2 los productos de esa categoría.
Estaré esperando por su ayuda.

1 respuesta

Respuesta
3

Parto de la base de que ya tienes los dos ListBox y que para el código que te pongo a continuación les voy a llamar LstCateg y LstProd.

Supongo además que los dos ListBox están en un Formulario, que se llama >> FListBoxProductos

El origen de Fila de LstCateg >>

SELECT [Categorias].[IdCategoria], [Categorias].[NombCateg] FROM [Categorias] ORDER BY [NombCateg];

El Origen de Fila de LstProd

SELECT Productos.IdProducto, Productos.NombreProducto, Productos.IdCategoria FROM Productos WHERE (((Productos.IdCategoria)=[Formularios]![FListBoxProductos]![LstCateg])) ORDER BY Productos.[NombreProducto];

Después en el Evento Click de LstCateg

Private Sub LstCateg_Click()
Me.LstProd.RowSource = "SELECT Productos.IdProducto, Productos.NombreProducto, Productos.IdCategoria FROM Productos WHERE (((Productos.IdCategoria)=[Forms]![FListBoxProductos]![LstCateg])) ORDER BY Productos.[NombreProducto];"
End Sub

Adapta los Nombres de los elementos a los tuyos. Saludos >> Jacinto

Gracias por la ayuda inmediata... En caso que desee que el rowsource sea una consulta ya elaborada, y solamente tenga que llamarla, poniendo la condición de la categoría de producto, ¿Cómo seria el código?

Dependerá de cómo esté construida la consulta, porque si tiene otros filtros, puede interferir con éste código. Si puedes pon la SQL de la consulta aquí y vemos que se puede hacer y que no. Mis saludos >> Jacinto

SELECT Producto.Codigo, [Producto]![Nombre] & " " & [Producto]![Medida] AS Producto, Producto.Descripcion, Categoria.Nombre AS Categoria, Producto.CodProducto, Categoria.CodCategoria
FROM Marca INNER JOIN (Categoria INNER JOIN Producto ON Categoria.CodCategoria = Producto.CodCategoria) ON Marca.CodMarca = Producto.CodMarca
WHERE (((Producto.Codigo) Like "*" & [Forms]![Buscar-Producto-Categ]![t2] & "*"));

Esta es la consulta que deseo contenga la ListaProducto al hacer clic en la ListaCateg, ya que estoy usando un campo de texto para hacer la busqueda del producto por medio del codigo.

Esa consulta, ya tiene un filtro, que según creo es un TextBox de un Formulario.

Si es que necesitas esos campos, la parte final deberías cambiarla más menos así>>

Like "*" & [Forms]![NombreDelNuevoForm]![LstCateg] & "*"));

Y en el Evento Click De LstCateg, pones >>

Me. LstProd. Requery

Un saludo >> Jacinto

SELECT Producto.Codigo, [Producto]![Nombre] & " " & [Producto]![Medida] AS Producto, Producto.Descripcion, Categoria.Nombre AS Categoria, Producto.CodProducto, Categoria.CodCategoria
FROM Marca INNER JOIN (Categoria INNER JOIN Producto ON Categoria.CodCategoria = Producto.CodCategoria) ON Marca.CodMarca = Producto.CodMarca
WHERE (((Producto.Codigo) Like "*" & [Forms]![Buscar-Producto-Categ]![t2] & "*")) OR (((Categoria.CodCategoria) Like "*" & [Forms]![Buscar-Producto-Categ]![ListCateg] & "*"));

La Lista Producto tiene esta consulta. Cuando hago click en la lista categoria, no me realizar la busqueda de los productos de acuerdo a la categoria seleccionada.

Por lo que veo de los criterios que usas y sin profundizar demasiado, estás dando la instrucción de que te devuelva los valores que cumplan una condición "O" que cumplan la otra.

No he analizado el código más profundamente, pero si quieres acotar resultados para que el resultado cumpla las dos condiciones has de sustituir el "OR" por "AND". Saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas