Anidar o vincular varios Combobox en Formulario

Tengo la siguiente inquietud en el funcionamiento de un formulario:

A) Tengo la tabla "referencias" con los campos: id, Nombre de Referencia, Proveedor y Unidad de medida.

B) Tengo un formulario en el que he insertado tres combobox y un label.

Los tres combobox se refieren a Nombre proveedor, Id Producto, Nombre Refencia; y el Label corresponde a la unidad de medida de la referencia escogida.

Pretendo que se cumplan las siguientes condiciones al arrancar el formulario:

  • Todos los combobox inicien con toda la información de la tabla (obviamente cada uno con el campo correspondiente a la tabla)
  • Si se escoge un Proveedor en su respectivo combobox, que de manera automática los datos de los combobox "Id de Producto" y "Nombre Referencia" correspondan al proveedor escogido por ejemplo para el P1 solo se tendrían las opciones de ID 1 y 4 y de Nombre de Referencia A y D.
  • Si se escoge un ID en su Combobox, que de manera automática se llenen los campos de los otros dos combobox (Proveedor y Nombre de Referencia) y del label (U.M).
  • Si se escoge un Nombre de Referencia en su combobox, que de manera automática se llenen los campos de los otros dos combobox (Proveedor e ID) y del label (U.M).
  • El Label (Aunque también podría ser un texbox) cambiara a Kg, Und o Ton, dependiendo del valor que tome el combobox "Id Producto"

Espero no sea mucho pedir, he investigado y lo que encuentro hasta ahora es vincular combobox dependiendo de otro combobox (cascada creo), pero en un solo sentido y no he logrado plasmar mi idea.

1 respuesta

Respuesta
1

La idea es la misma que la de los combos en cascada.

En tu caso, después de elegir un valor en un combo, has de actualizar los otros dos combos, pero las instrucciones son las mismas: creas la SQL filtrada para cada combo y los actualizas.

Te pongo un ejemplo con el combo Proveedor:

Private Sub cboProveedor_AfterUpdate()

Dim miSQL As String

'Creas la SQL para el combo ID

miSQL="SELECT ID FROM referencias WHERE Proveedor='" & Me.cboProveedor & "'"

'Actualizas el cboID

Me.cboID.Rowsource=miSQL

Me.cboID.Requery

'Creas la SQL para el combo Referencia

miSQL="SELECT Referencia FROM referencias WHERE Proveedor='" & Me.cboProveedor & "'"

'Actualizas el cboReferencia

Me.cboReferencia.Rowsource=miSQL

Me.cboReferencia.Requery

End Sub

Para los otros harías lo mismo, cambiando las SQL.

Gracias por tu respuesta Sveinbjorn,

Pero le he volteado un poco a este código y no condigo que me funcione, Adjunto base de datos a ver si me puede ayudar en que estoy fallando, el formulario se llama "FEntradasInsumos"

https://onedrive.live.com/redir?resid=23A7180BAFBC810!6813&authkey=!APD9im0jJfYuxek&ithint=file%2caccdb 

Agradezco su ayuda y colaboración,

Brazos desde Colombia,

John Jairo Martinez

La respuesta era más sencilla de lo que pensaba en un principio, y los combos en cascada sólo son ID y Referencia.

ID y Referencia tienen el mismo valor (por cómo los tienes construidos almacenan los dos el CodigoInsumo) por lo que igualándolos ya te muestran la misma info.

Para que te muestre el proveedor, uso la función DLOOKUP para buscar el código del proveedor en la tabla y se lo asigno al combo.

Queda así.

Gracias por tu ágil respuesta Sveinbjorn,

Funciona muy bien para los eventos AfterUpdate de cboID y cboReferencia ya que siempre me actualiza el campo de proveedor, pero no sucede lo mismo cuando inicialmente hago el cambio en al cboProveedor.

Agradezco tu ayuda y colaboración,

Saludos y abrazos desde Colombia,

John Jairo Martinez Torres

Normal, porque un proveedor puede tener (y normalmente tendrá) más de un producto. Por ejemplo, en tu tabla PRODINK & CIA LTDA tiene dos productos, SIEGWERK COLOMBIA LTDA tiene 4...

En ese caso ¿cuál muestras?

Si quieres mostrar el primero de la lista, harías así:

Private Sub cboProveedor_AfterUpdate()Dim miSQL As String'Creas la SQL para el combo IDmiSQL = "SELECT CodigoInsumo FROM TblMateriaPrimaTintaseInsumos WHERE Proveedor=" & Me.cboProveedor'Actualizas el cboIDMe.cboID.RowSource = miSQLMe.cboID.RequeryMe.cboID = Null'Creas la SQL para el combo ReferenciamiSQL = "SELECT CodigoInsumo, NombreMaterial FROM TblMateriaPrimaTintaseInsumos WHERE Proveedor=" & Me.cboProveedor'Actualizas el cboReferenciaMe.cboReferencia.RowSource = miSQLMe.cboReferencia.Requery'Muestras el primero de la lista en lso cbosIf Me.cboID.ListCount > 0 Then    Me.cboID = Me.cboID.ItemData(0)    Me.cboReferencia = Me.cboIDEnd IfEnd Sub

Fíjate que la SQL del combo Referencia tiene que llevar los dos campos (Codigo y Nombre), para que funcione, porque así es como la defines en un principio en el propio origen del mismo en el diseño del formulario.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas