Cuadro combinado vinculado al contenido de otro cuadro combinado en un subformulario

Tengo un subformulario de Detalles de venta con campos id_pedido, id_producto, kilos y precio dentro de un formulario de Compra, con campos como id_compra, proveedor, fecha-compra y otros. Para el campo precio del subformulario necesito usar un cuadro combinado que me saque una lista con los últimos precios (uno o dos) aplicados a ese id-producto, para todos los proveedores de ese mismo producto (en caso de que existan más de un proveedor) y también con su id_compra correspondiente, por lo que en la lista quiero que me salga además del precio, id_producto, id_proveedor, id-compra y la fecha-compra. Como origen de esta lista uso una consulta multitabla que me saca los campos necesarios y como criterio necesito el valor del campo id_producto sea igual al contenido actual del cuadro combinado que me muestra el id_producto en la misma fila del Detalle de compra donde tengo el cuadro combinado para precios. El problema es que como veo este subformulario en vista Hoja de datos dentro del formulario Compras, la consulta origen de la lista del cuadro combinado para precios no me está cogiendo el valor de id_producto de la fila donde estoy editando el campo precio y quería saber como indicar qué quiero el valor de id_producto para la fila que esté editando. Hasta el momento dicha consulta se queda el valor de id_producto de la primera fila de detalla donde hago clic y ya no es capaz de leer el valor de id-producto para la nueva fila a donde me mueva.

No sé si tengo que ir a VBA y crearme un objeto recorset para de ahí sacar los valores para la lista del cuadro combinado precios, y en tal caso como sería el código a escribir

La consulta en sql es:

SELECT [Detalle-Compra].precio, producto.[nombre-producto], Compra.proveedor, Compra.fecha
FROM producto INNER JOIN (Compra INNER JOIN [Detalle-Compra] ON Compra.[nºalbaran-compra] = [Detalle-Compra].[nºalbaran-compra]) ON producto.[id-producto] = [Detalle-Compra].[id-producto]
WHERE ((([Detalle-Compra].[id-producto])=[Formularios]![Albaranes de compra]![Detalles Albaranes Subformulario].[Form]![cmbIdProducto]))
ORDER BY Compra.fecha DESC;

Bueno, te agradecería que si tienes una solución para este problema me la comunicaras por email cuanto antes, ya que no encuentro la solución con mi actual conocimiento de ACCEss, ni tampoco en ningún libro que he consultado.

2 Respuestas

Respuesta
1

Abre tu subformulario en vista diseño, colócate sobre el cuadro combinado, haz clickderecho sobre el para ver sus propiedades, y vete a la pestaña eventos. Localiza el evento Al recibir el enfoque, y le das al botón con los 3 puntos que aparece a la derecha del mismo. Eliges generador de código, y en el editor de vba que se abre, escribes esto:

Me. Precio. Requery

Si tu cuadro combinado no se llama precio, cambialo por el nombre que tenga en tu BD (lo puedes ver en la pestaña Otras->Nombre)

Mil gracias Sveinbjorn, la verdad es que había intentado poner el Requery en el evento After_Update del cuadro combinado cmbIdproducto, pero no conseguía que al cambiar de fila la consulta origen de datos del cuadro combinado cmbPrecios detectara el valor de id_producto para esa fila del subformulario.

Ahora si lo hace, y para cada fila obtengo la lista de precios para el idproducto de esa fila.

Tu respuesta rápida me ha resuelto un gran problema.

Respuesta
1

No entiendo muy bien lo que quieres hacer, mi impresión es que te estas complicando, pero tu decides el diseño de tu base, solo te orientare.

Yo hice dos bases para inventarios, te dejo mi carpeta SkyDrive, hay muchos ejemplos y varios manuales. Busca en la carpeta de ejemplos los de inventarios, están completos y editables, tal vez te orientan lo que quieres hacer, también en la carpeta de manuales busca el de Nekkito, el de access y el de vb, son muy buenos y no tan complicados.

Espero que te ayude mi material.

Pincha aquí.

Creo que los ejemplos pueden ayudarte mas que una explicación.

Muchas gracias por todos estos ejemplos que seguro me servirán para aclararme un montón de dudas. Pero la duda por la que preguntaba en concreto ya la he resuelto.

Un saludo

Jorge

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas