ComboBox que no muestra datos

Tengo la siguiente duda con el funcionamiento de un combobox en un sub formulario.
Primero voy a mostrar el diseño de tablas y sus relaciones y luego paso a explicar el problema.
Tengo las tablas:
Compras(Campos: nºalbaran-compra, id-proveedor, fecha-compra, ... ; Clave: nºalbaran-compra)
Detalle de Compra (Campos: nºalbaran-compra, id-producto, kilos-compra, precio-compra; Clave: nºalbaran-compra, id-producto)
Ventas (Campos: nºalbaran-venta, id-cliente, fecha-venta, ... ; Clave nºalbaran-venta)
Detalles de Venta ( nºalbaran-venta, id-producto, kilos-venta, precio-venta, ...; Clave: nºalbaran-venta, id-producto)
Productos (id-producto, nombre-producto, ... ; Clave : id-producto)
Proveedores (Campos: id-proveedor, nombre-proveedor, ...; Clave: id-proveedor)
Existencia(Campos: id-producto, nºalbaran-compra, id-proveedor, kilos-existencia; Clave: idproducto, nºalbaran-compra, id-proveedor)
Las relaciones entre las tablas se deducen claramente, porque he usado nombres de campos con el mismo nombre en cada una de las relacionadas.
Para la tabla "Detalles de Venta", para el campo "id-producto", he definido una consulta de búsqueda para que me salga una lista con los nombres de
Productos actualmente en existencia, más otros datos de interés que necesito ver en el momento de registrar un detalle de venta:
SELECT Existencia.[id-producto], producto.[nombre-producto], Existencia.[id-proveedor] AS Prov, Existencia.[nºalbaran-compra], Compra.fecha
FROM Compra INNER JOIN (producto INNER JOIN Existencia ON producto.[id-producto] = Existencia.[id-producto]) ON
Compra.[nºalbaran-compra] = Existencia.[nºalbaran-compra]; (no es la típica "SELECT Productos.[id-producto], Productos.[nombre-producto]
FROM Producto ORDER BY nombre-producto;"
Realmente no meto datos directamente por la tabla "Detalles de Venta", sino por un subformulario, en el cual me aparece también un combo que tiene definido como origen de fila la misma consulta de arriba, para rellenar el campo id-producto de la tabla "Detalles Venta". Este combo muestra una lista con los nombres de los productos en existencia, y otros datos, como ya he comentado. Selecciono un producto en Existencia y lo graba sin problemas en la tabla "Detalles de Ventas".
El problema viene cuando borro un registro de existencia en la tabla Existencia (al llegar a ceros kilos de existencia). En este caso en todos los registros del formulario de Ventas, para aquellos detalles de ventas cuyo valor de id-producto coincide con el id-producto del registro eliminado en la tabla Existencia, deja de mostrarse en el cuadro superior del combo, aunque en la tabla "Detalles Venta", aparece grabado el valor de id-producto. Pero en el combo del suformulario Detalles de Ventas, no se ve nada, ni siquiera el código del producto.
Sabes por qué pasa esto. He pensado que como la consulta se basa en uniones JOIN, al parecer la tabla existencia actúa como un filtro para que el
Combo sólo pueda mostrar los nombres de aquellos productos que aparecen en la tabla Existencia, pero no los nombres de otros productos cuyos id
No aparecen en la tabla Existencia. Podrías proponerme una solución, para conseguir que el combo siempre muestre el nombre del producto para el id-producto que se ha grabado en el registro, una vez que en la tabla Existencia se hayan borrado registros que hacen referencia al mismo id-producto.

1 respuesta

Respuesta
1

El problema que planteas se origina por lo que tú dices, al borrar el producto de existencias, la consulta no lo muestra.

Prueba a cambiar el diseño de la consulta, haciendo esto: en la linea que une las tablas existencias y productos, haces click derecho en ella, sacas sus propiedades y marcas, de las 3 opciones de abajo (las que definen la relación) la que dice algo como "mostrar todos los registros de Productos y aquellos de Existencia relacionados.

Si te da error de que la relación es muy compleja, lo único que se me ocurre es que no borres los registros de la tabla Existencia, y uses filtros en las consultas para que te coja los que tengan una cantidad >0

Muchas Gracias Sveinbjorn, como siempre, por tu rápida respuesta. Lo que me dices ya lo he probado, o sea en la relación entre tablas Existencia y Productos he modificado la relación para que incluya todos los registros de Productos y sólo aquellos registros de la tabla Existencia en que los campos combinados sean iguales, pero como supones tú, me da el error "No se pudo ejecutar la instrucción SQL, porque contiene combinaciones externas ambiguas. Para forzar que se ejecute primero una de las combinaciones, cree una consulta independiente que efectúe la primera combinación y después incluya esta consulta en la instrucción SQL." No sé si esto dará resultado no le he probado nunca.

Realmente la consulta para mostrar la lista de nombres de productos siempre me muestra los nombres de productos que aparecen en la tabla Existencia, en la lista del combo. Eso funciona Ok. Lo que no hace Access es mostrar en el cuadro superior del combo el nombre de producto correspondiente al id-producto que queda guardado en el campo id-producto de la tabla "Detalle de Ventas" al cual está enlazado e combo.

Bueno, si se ocurre algo, te lo agradecería mucho. De momento voy a intentar lo que me propone el mensaje que me da Access.

Un saludo y responde, aunque no tengas otra solución, para poder evaluar tu respuesta.

Claro, el valor guardado no te lo muestra porque no pertenece a las opciones del cuadro combinado (según lo entiendo).

Quizás si le cambias la opción del cuadro combinado "limitar a la lista" te lo muestre (aunque lo dudo, y además, te dejará escribir valores que no estén en tu combo, lo cual no es buena cosa...)

Prueba, para evitar el mensaje de access, a hacer dos consultas "auxiliares", una entre las tablas Existencia y Producto, y otra entre Producto y Compra, y luego la definitiva sobre las dos auxiliares, para obtener la SQL que da origen al combo.

No sé cómo funciona tu BD, pero personalmente, el tema de borrar de Existencia los productos que quedan en 0, no me convence... Yo personalmente usaría el sistema de una consulta que muestre los que tengan kilos>0, si tu tabla la vas actualizando con los datos de compras y ventas, o mejor aún, crearía una consulta que calcule en cada momento las existencias de cada producto, y no tendría la tabla. Por si te interesa ver cómo se haría el cálculo de existencias mediante consultas, te remito a la web de Neckkito (http://neckkito.siliconproject.com.ar/), donde encontrarás en el apartado ejemplos explicados->aplicaciones 5 de gestión de almacén, y en ejemplos explicados->consultas otro más.

Muchas gracias Sveinbjorn, tendré en cuenta tus sugerencias y me leeré la web que me sugieres del experto neckkito, para ver si veo un ejemplo parecido al mio, que me de alguna idea de como hacerlo. Mi BD usa las existencias tan solo como un modo de realizar más fácil el registro de las ventas, y se refiere a las existencias tras la compra del día, que se agotarán con la venta efectuada ese mismo día. Se compra por la mañana, y se vende el mismo día. Se deja la posibilidad de registrar existencia negativa, pero sólo para tener en cuenta que el cliente ha pagado por adelantado una cantidad extra de un producto que no se le ha servido, y que se hará otro día.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas