Pregunta: | 42565 - CÓMO CREAR UN COMBO QUE MUESTRE LA SELECCIÓN DE UNA CONSULTA |
Autor: | Silvia de Oliveira |
Tenemos un primer combo que nos muestra los datos de una tabla y queremos crear un segundo combo que una vez seleccionado una opción del primer combo nos muestre los datos relacionados de la segunda tabla con el dato elegido. |
Respuesta: | Silvia de Oliveira |
Gracias Oscar y gracias Alejandro.
Al final lo he solucionado de la siguiente forma: Private Sub Cuadro_combinado1_Change() Cuadro_combinado2.RowSource = "select [Nombre Submateria] from Submateria where [Nombre Materia]='" & Cuadro_combinado1.Value & "'" Cuadro_combinado2.Requery End Sub |
Respuesta: | Oscar Hernando Cabrera |
HOLA SILVIA OJALA QUE TE PUEDA AYUDAR CON TU PREGUNTA, SINO CUALQUIER DUDA ME ESCRIBES A [email protected] .
HAZ UNA CONSULTA DE SELECCION LLENAS UNA VARIABLE DE TIPO RECORDSET Y LUEGO CON ESTA VARIABLE HACES UN FOR HASTA EL TOTAL DE REGISTROS DEVUELTOS Y VAS LLENANDO EL COMBO CON EL DATO REQUERIDO.......ES DECIR Imaginemos dos tablas una de ellas es de proveedores(codprov,nomprov) y la otra productos(codprod,codprov,nomprod) como ves es una relacion de uno a muchos....el primer combo (lo llamaremos combo1) contiene los proveedores, y al selecionar uno quieres que en el otro combo (combo2) o lista, te muestre todos los productos de ese proveedor, entonces en el evento afterupdate (despues de actualizar) del combo1... Private sub combo1_afterupdate Dim reg As DAO.Recordset Dim BaseDatoa as database Dim Criterio as string set BaseDatos = CurrentDb if not isnull(combo1) then Criterio = "Select nomprod from productos where codprov=" & combo1 & " " set reg = BaseDatos.OpenRecordset(Criterio) if reg.recordcount > 0 then reg.movelast reg.movefirst for i=1 to reg.recordcount combo2.AddItem reg(0) reg.movenext next i end if reg.close end if set BaseDatos = Nothing end sub NOTA : SE SUPONE QUE EL PRIMER COMBO TIENE DOS COLUMNAS, UNA DE ELLAS DONDE GUARDA codprov, Y LA OTRA nomprov, LA COLUMNA DEPENDIENTE SERIA 1(DONDE ESTA codprov) LA PRIMER COLUMNA SERIA BUENO QUE LA OCULTARA, EN LAS PROPIEDADES DEL COMBO1(NUMERO DE COLUMNAS COLOCAS 2 Y ANCHO DE COLUMNAS 0;(ANCHO DE COMBO1) PARA OCULTAR LA COLUMNA1). OJALA TE SIRVA, ME ESCRIBES CUALQUIER DUDA |
Respuesta: | Alejandro Landini |
Hola:
Una de las cosas que se me ocurre que podes hacer el lo siguiente. en el evento "al cambiar.." Tenes que actualizar el recordset del segundo combo. ejemplo Private Sub Cuadro_combinado0_Change() 'Debug.Print Me.Cuadro_combinado2.RowSource Me.Cuadro_combinado2.RowSource = "SELECT [Tabla2].[Id], [Tabla2].[campo3], [Tabla2].[campo4] FROM Tabla2 where [Tabla2].[campo3] = '" & Me.Cuadro_combinado0.Column(1) & "';" Me.Cuadro_combinado2.Requery End Sub despues vos te fijas que otro evento te sirve para poder optimizar el combo. en este caso tengo dos combo y cambio en recorsourse del segundo en funcion de los datos del primero. podes complijar la consulta hasta donde quieras. salu2 |
Respuesta: | Oscar Hernando Cabrera |
Hola Silvia, espero que te sirva mi respuesta sino me escribes a [email protected].
Para mostrar datos de una tabla en un combo utiliza una consulta en sql, y la guardas en una variable tipo recordset, la consulta llevará la condición que necesitas. Es decir: Imaginemos dos tablas: Proveedores(codprov,nomprov) , productos(codprod,nomprod,codprov) como ves es una relacion de uno a muchos. El primer combo(llameremos combo1), posee los proveedores, y al escojer uno me debe mostar los productos que vende ese proveedor en el otro combo(llamaremos combo2). Ojo el combo1, debe tener dos columnas, la columna clave (codprov) es la primera y debe estar oculta, y la segunda (nomprov), la columna dependiente debe ser la uno (codprov , por que con este campo hare la condicion de la consulta). Entonces:..... Private sub Combo1_afterupdate() Dim Criterio as string Dim BaseDatos as database Dim reg As DAO.Recordset If not isnull(Combo1) then set BaseDatos = CurrentDB Criterio = "Select nomprod from Productos Where codprov= " & combo1 & " " 'va con comilla doble y ampersan, por que es tipo numerico, sino iria '" & combo1 & "', comilla sencilla,pegado comilla doble,ampersan. set reg = BaseDatos.openrecordset(Criterio) if reg.recordcount > 0 then reg.movelast reg.movefirst for i=1 to reg.recordcount combo2.additem reg(0) reg.MoveNext next i end if reg.close set BaseDatos = Nothing end if End sub |