Como hacer para ver sólo los registros relacionados al registro corriente en un cuadro combinado en Access 2007

Estoy desarrollando una pequeña aplicación para el control de materiales de la oficina (bolígrafos, lápices, papel, etc.) y el lugar adonde estos productos se encuentran almacenados. Un problema adicional es que hay productos que se almacenan en lugares diferentes

Para controlar la entrega de materiales lo hago por funcionario y producto. El problema ocurre cuando luego de seleccionar el producto, intento intentar el lugar, el cuadro combinado me muestra todos los productos almacenados, siendo que sólo necesito ver los lugares adonde se encuentra el producto que estoy tratando en ese momento.

Agrego que si bien no soy precisamente un lego en programación, no tengo ninguna experiencia en VBA; el desarrollo lo estoy llevando a cabo utilizando Tablas, Consultas de varios tipos, Formularios y subformularios, algunos informes rudimentarios y principalmente Macros. Por eso preferiría una solución que no involucre a VBA, pero si no fuese posible, tampoco le voy a hacer ascos a dicha solución.

Si bien considero que es una pregunta bastante genérica, no tengo inconveniente en enviarles una detalle de la estructura de las tablas, formularios y consultas involucrados.

1 respuesta

Respuesta
2

Pues me temo que vas a necesitar, en mayor o menor medida, algo de VBA, pero tranquilo, que no es nada complicado. Para darte una solución precisa sería necesario conocer la estructura de tu BD, pero te doy unas indicaciones generales, a ver si te arreglas con ellas:

1º/ Supongamos que tienes una tabla (TProductos) en la que tienes un campo Producto y otro Almacen.

Tu cuadro combinado, si le sacas sus propiedades, en la pestaña Datos verás que tiene una llamada "Origen de la fila" y lo más probable es que tengas en ella algo como "SELECT Almacen FROM TuTabla", donde TuTabla será la tabla con los datos de los almacenes.

2º/ Hechas estas suposiciones, sacas las propiedades del cuadro de texto Producto, vas a la pestaña Eventos, buscas "después de actualizar" y cuando te coloque en ella verás un botón con 3 puntos a la derecha. Lo pulsas y seleccionas "Generador de código", lo que te llevará al editor de VBA.

3º/ Entre las lineas que te aparecen (Private Sub.... y End Sub), escribes:

Me.nombreCuadroCombinado.RowSource=" SELECT Almacen FROM TuTAbla WHERE Producto='" & Me.Producto & "'"

Me. NombreCuadroCombinado. Requery

Lo que quiere decir, la primera linea que te seleccione de TuTabla los registros de Alamacen en los que el producto es el que acabas de teclear. Y la segunda línea, que actualice la información del cuadro combinado.

Si no te sale, me cuentas cómo son tus tablas y te indico.

Un saludo.


Hola, muchas gracias por tu pronta respuesta.

He probado lo que me aconsejaste y sigue respondiendo del mismo modo. Creo que tendría que pasarte la estructura de los datos, por lo menos los que están involucrados en el problema.

Si me dices como alcanzarte esta información lo haré en el acto.

Gracias.

Puedes subir una o más imágenes aquí, o describirla con palabras.

Lo que me haría falta saber es en qué tabla o tablas tienes los campos "producto" y "almacen" (o como los llames), y en caso de ser en varias tablas, cómo están relacionadas.

También puedes hacer una copia de tu BD únicamente con los elementos de tu consulta (la tabla/tablas que intervienen y el formulario) y un par de datos inventados, subirla a mega, dropbox... y poner aquí el enlace de descarga

Hola, aquí de nuevo. Acaabo de instalar dropbox y cuando le digo que voy a compartir el archivo me solicita el correo del destinatario. ¿Cómo hago?

No te hace falta el correo, hay una opción que es "copiar enlace" o "copiar enlace a dropbox". Ese es el link que tienes que poner por aquí

Este es el código que necesitas:

Private Sub Cuadro_combinado17_AfterUpdate()
Me.Cuadro_combinado19.RowSource = "SELECT [Tdeppro].[id_deposito], [Tdeppro].[cod_pro], [Tdeppro].[cantidad] FROM Tdeppro " _
& "WHERE [Tdeppro].[cod_pro]=" & Me.Cuadro_combinado17 & " ORDER BY [id_deposito];"
Me.Cuadro_combinado19.Requery
End Sub

Viendo tu BD, yo también añadiría este otro, al evento "Al recibir enfoque" del cuadro combinado del almacén:

Private Sub Cuadro_combinado19_GotFocus()
Me.Cuadro_combinado19.RowSource = "SELECT [Tdeppro].[id_deposito], [Tdeppro].[cod_pro], [Tdeppro].[cantidad] FROM Tdeppro " _
& "WHERE [Tdeppro].[cod_pro]=" & Me.Cuadro_combinado17 & " ORDER BY [id_deposito];"
Me.Cuadro_combinado19.Requery
End Sub

Es más, con este último código únicamente te funcionaría igual.

Perfecto!

No se como agradecerte el apoyo que me diste. Parece que voy a tener que comenzar a leer un poco más de VBA. Me recomendarías algún texto si es que existe, ¿por favor?

Muchísimas gracias.

Abrazo

Yo empecé con los manuales y ejemplos de Neckkito: http://siliconproject.com.ar/neckkito/ 

Y también son muy buenos el de Fermí Vila y el de Eduardo Olaz: http://www.mvp-access.com/foro/curso-de-access-y-vba_forum19.html

Y si estás atento a nuestra web (http://nksvaccessolutions.com/ ), en breve empezaremos a ofrecer cursos, además de que ya tenemos un foro de Access funcionando.

Muchas gracias por la data! Una pregunta mas, es posible que en lugar del código de depósito se vea el descriptor que está en la tabla Tdeposito? Yo inicialmente diseñé la consulta Consulta_Lugar, pero eso fue antes de contactarte. Por supuesto no funcionó, pero la idea era que mostrara el nombre del/los lugar(es) donde se encontraba almacenado el  artículo y la cantidad en dicho lugar.

Perdón por molestarte nuevamente.

Tienes que hacer varias operaciones:

1º/ Modificar, en la vista diseño del formulario, las propiedades del cuadro combinado, para que te queden así:

Pestaña Datos->Origen de la fila: SELECT Tdeppro.id_deposito, tdeposito.Lugar, Tdeppro.cod_pro, Tdeppro.cantidad FROM tdeposito INNER JOIN Tdeppro ON tdeposito.Id_deposito=Tdeppro.id_deposito ORDER BY Tdeppro.[id_deposito]; 

Pestaña Formato->Número de columnas: 4

Pestaña Formato->Ancho de columnas: 0cm;2,542cm;0cm;2,542cm (las que le pongas ancho 0 no las verás)

2º/ Cambia la primera linea del código por esta otra:

Me.Cuadro_combinado19.RowSource = "SELECT Tdeppro.id_deposito, tdeposito.Lugar, Tdeppro.cod_pro, Tdeppro.cantidad FROM tdeposito " _
& "INNER JOIN Tdeppro ON tdeposito.Id_deposito=Tdeppro.id_deposito WHERE [Tdeppro].[cod_pro]=" & Me.Cuadro_combinado17 & " ORDER BY Tdeppro.[id_deposito];"

Gracias, ahora lo probaré. Pero tengo una duda muy grande: introdujimos un SELECT en "Al recibir el enfoque"; pero en la pestaña DATOS tenemos otro SELECT!!! Como ejecuta el que definiste en VBA y no el otro?  Como no hay conflicto entre estos dos comandos?

Para mi, todavía esto es sánscrito!

Inicialmente (al cargar el formulario) el SELECT que actúa es el de la propiedad origen de datos de la pestaña Datos. Luego, al recibir el enfoque, se modifica (con la primera línea del código) y con la segunda se "actualiza" con los nuevos datos del segundo SELECT.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas