Access: campo oculto en un registro

Tengo un subformulario con 2 cuadros combinados sincronizados y dos cajas de textos. El formato del subform es formularios continuos u hoja de datos (me da igual, pero necesito ver varios registros a la vez, pues estoy introduciendo productos para una oferta)
El primer combobox (IdMarca). Selecciono una marca, y el segundo combobox (IdProducto) me muestra los productos de esa marca. Tras elegir producto, aparecen automáticamente en los otros dos cuadros de texto el precio y la cantidad mínima del producto seleccionado.
El problema viene cuando quiero añadir otro registro. Si elijo una marca distinta a la elegida en el 1er registro, entonces se oculta el campo producto del 1er registro (no su precio ni su cantidad mínima; es más, el producto en sí ha sido grabado en la tabla correspondiente, pero en el formulario no puedo verlo).
Creo que tengo mal especificada la función IdMarca_AfterUpdate(), que la transcribo para que alguien le eche un vistazo:
Private Sub IdMarca_AfterUpdate()
Me.IdProducto = Null
Me.IdProducto.Requery
Me.IdProducto = Me.IdProducto.ItemData(0)
End Sub
Dejo copia también del origen de la fila del combobox IdProducto:
SELECT Productos.ReferenciaProducto, Productos.NombreProducto, Productos.[Tarifa venta], Productos.[Cantidad], Productos.IdMarca FROM Productos WHERE (((Productos.IdMarca)=[Formularios]![OFERTAS]![Subformulario DETALLE-OFERTA].[Form]![IdMarca])) ORDER BY Productos.NombreProducto;

3 respuestas

Respuesta
1
Selecciona en la vista diseño del formulario el segundo cuadro combinado y, en sus propiedades pon como columna dependiente el nombre de la marca y no el id, así seguramente funcione.
Lo he intentado pero no me ha funcionado. Probablemente no te he entendido bien, porque soy un absoluto inexperto en VBA.
De todos modos, te cuento lo que he hecho. Es una chapuza pero visualmente obtengo el resultado. El vista diseño, pongo combo1(Marca) y combo2(Producto) y añado un cuadro de texto con origen en Producto. Superpongo el cuadro de texto sobre el Combo2Producto.
Cuando vas a añadir un registro, combo2 selecciona los productos de una marca. Cuando introduces un nuevo registro y seleccionas una marca distinta a la del registro anterior, el combo2 de dicho registro anterior se queda en blanco pero el usuario no lo detecta, pues el cuadro de texto superpuesto muestra el producto seleccionado.
Como verás, no es muy profesional, pero me ha dado resultado. Espero que entre tu aclaración y la mía podamos ayudar a otras personas.
Por mi parte, puede finalizar este hilo.
Miles de gracias
Bueno mi opción no era nada de Visual Basic. En el diseño de formulario, seleccionas el combo, botón derecho propiedades, pestaña datos y haya una opción de columna dependiente si pone 1 pon 2 o viceversa. De todas formas si lo has solucionado como dices, lo que interesa es el resultado. Gracias y si quieres cerrar el hilo no olvides valorar la repuesta y cerralo tú
Respuesta
1
Tal vez aquí lo ideal es que manejes un campo para producto y marca y los cuadros de lista sean independientes
Muchas gracias por tu respuesta. Finalmente lo que hice fue superponer al combo producto un cuadro de texto con origen de control producto. Cuando añado un nuevo registro y la marca es distinta a la del registro anterior, el combo producto sigue desapareciendo pero el usuario no lo detecta pues el cuadro de texto muestra el producto de ese registro.
Mil gracias de todos modos por tu respuesta.
Un saludo
Respuesta

Honestamente, no veo la necesidad de lo que escribes en el evento después de actualizar

En el cuadro combinado producto, el origen de la fila lo dejaría en blanco, y en el evento Después de actualizar del combo Marca, pondría

Forms!clientes!Ventas.Form!Producto.RowSource = "select producto from productos where idmarca=forms!clientes!ventas.form!marca"

Suponiendo que el formulario se llame clientes y el subformulario se llame Ventas

Y suponiendo que en el subformulario tuvieras que escribir una marca que no tienes, con poner en el evento Al no estar en lista del combo

Dim Marcanueva As Integer, título As String, mensaje As Integer

título = "La marca que ha escrito no está en la lista"
mensaje = vbYesNo + vbDefaultButton1
marcanueva = MsgBox("¿Desea agregar marca a la lista ?", mensaje, título)
    If marcanueva = vbYes Then
    DoCmd.RunCommand acCmdUndo

DoCmd.OpenForm "marcas", acNormal, "", "", acAdd, acDialog

Response = acDataErrAdded
End If

En fin, hay muchas posibilidades

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas