** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y Otros sistemas
  Mensajes nuevos Mensajes nuevos RSS - Llenar Cuadro Combinado con Consulta VBA
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoLlenar Cuadro Combinado con Consulta VBA

 Responder Responder
Autor
Mensaje Invertir el orden de clasificación
alexsc Ver desplegable
Habitual
Habitual
Avatar

Unido: 02/Septiembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 188
Enlace directo a este mensaje Tema: Llenar Cuadro Combinado con Consulta VBA
    Enviado: 16/Septiembre/2014 a las 00:07
Excelente Mexman!!! me funciono perfectamente!!!

Muchisimas gracias.

Admin, por favor cerrar este hilo que ha sido respondido satisfactoriamente. Saludos

"El espiritu de lucha es lo que nos impulsa cada día a emprender nuevos retos..."



Alexsc

Bogotá - Colombia
Arriba
MexMan70 Ver desplegable
Colaborador
Colaborador


Unido: 17/Julio/2007
Localización: DarkSide
Estado: Sin conexión
Puntos: 9235
Enlace directo a este mensaje Enviado: 15/Septiembre/2014 a las 21:24
Hola alexsc, usa una variable para construir la cadena de tus columnas, cuando termine de construirse, agregas el elemento a tu lista, ejemplo:

While Not RS.EOF
    For Each fld In RS.Fields
        strCampos = strCampos & Trim(fld.Value) & ";"
    Next
    .AddItem Item:=strCampos: strCampos=""
    RS.MoveNext
Wend

OneDrive: http://sdrv.ms/Vk6eJd
Arriba
alexsc Ver desplegable
Habitual
Habitual
Avatar

Unido: 02/Septiembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 188
Enlace directo a este mensaje Enviado: 15/Septiembre/2014 a las 21:02
Hola Guarracuco:

Despues de tanto probar y probar, logre que me funcionara con el siguiente codigo, un poco diferente al tuyo:

Private Sub Form_Open(Cancel As Integer)

Dim conn As ADODB.Connection
Dim RS As ADODB.Recordset
Dim fld As ADODB.Field
Dim strconn As String

Dim cadenaSQL As String

strconn = "Driver={SQL Server Native Client 11.0};Server=192.168.0.80;Database=MIBASEDEDATOS;Uid=admin;Pwd=MiPassword123"
Set conn = New ADODB.Connection
conn.Open (strconn)

cadenaSQL = "SELECT DISTINCT rhh_emplea.cod_cco, gen_ccosto.nom_cco " & _
"FROM rhh_emplea INNER JOIN gen_ccosto ON rhh_emplea.cod_cco = gen_ccosto.cod_cco " & _
"WHERE rhh_emplea.cod_cco > 0 AND rhh_emplea.fec_egr Is Null"

Set RS = conn.Execute(cadenaSQL)

With Me.Codigo_Ceco
While Not RS.EOF
    For Each fld In RS.Fields
        .AddItem Item:=Trim(fld.Value)
    Next
    RS.MoveNext
Wend
End With

RS.Close
Set RS = Nothing

End Sub

Esto efectivamente me trae los datos de la consulta y los muestra en el ComboBox al desplegarlo.

Pero ahora tengo un inconveniente. Resulta que mi consulta trae 2 columnas de datos: codigo y nombre del CeCo, y al mostrar en el ComboBox, me muestra el codigo en una linea y el nombre en la siguiente, y asi sucecivamente toda la consulta

Me podiras ayudar a modificarlo para que me muestre ambas columnas en una misma fila por cada registro de la consulta??? es decir, un ComboBox multicolumna, la verdad es que he buscado mucho en internet pero no he encontrado algo que pueda entender y que me funcione

Por tu ayuda mil gracias. Saludos



Editado por alexsc - 15/Septiembre/2014 a las 21:19
"El espiritu de lucha es lo que nos impulsa cada día a emprender nuevos retos..."



Alexsc

Bogotá - Colombia
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3123
Enlace directo a este mensaje Enviado: 15/Septiembre/2014 a las 19:34
El argumento cadenaSQL es para 'filtrar' por medio de where, like, etc
Es decir, prueba:
Codigo_Ceco.RowSource = "SELECT * FROM [ODBC; " & strconn & "]." & nTabla
https://tucondominioaldia.net
Arriba
alexsc Ver desplegable
Habitual
Habitual
Avatar

Unido: 02/Septiembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 188
Enlace directo a este mensaje Enviado: 15/Septiembre/2014 a las 15:36
Hola Guarracuco:

No soy experto en programar VBA, pero tratando de entender tu ejemplo, he colocado el siguiente codigo en el formulario en cuestion:

Private Sub Form_Open(Cancel As Integer)

Dim strconn As String
Dim cadenaSQL As String
Dim nTabla As String

strconn = "Driver={SQL Server Native Client 11.0};Server=192.168.0.80;Database=MIBASEDEDATOS;Uid=admin;Pwd=MiPasword123"
Set conn = New ADODB.Connection
conn.Open (strconn)

cadenaSQL = "SELECT DISTINCT rhh_emplea.cod_cco, gen_ccosto.nom_cco " & _
"FROM rhh_emplea INNER JOIN gen_ccosto ON rhh_emplea.cod_cco = gen_ccosto.cod_cco " & _
"WHERE rhh_emplea.cod_cco > 0 AND rhh_emplea.fec_egr Is Null"

nTabla = "rhh_emplea"

Codigo_Ceco.RowSource = "SELECT * FROM [ODBC; " & strconn & "]." & nTabla & cadenaSQL

End Sub

Pero al ejecutar la apertura del formulario me aparece un mensaje que dice: Error de sintaxis en la clausula FROM y no me muestra nada en el cuadro combinado, pero la consulta la pruebo en el SQL server y funciona perfectamente.

Podrias por favor decirme que estoy haciendo mal?? Muchas gracias

"El espiritu de lucha es lo que nos impulsa cada día a emprender nuevos retos..."



Alexsc

Bogotá - Colombia
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3123
Enlace directo a este mensaje Enviado: 12/Septiembre/2014 a las 22:07
asi es...
son los parámetros que vienen.

https://tucondominioaldia.net
Arriba
alexsc Ver desplegable
Habitual
Habitual
Avatar

Unido: 02/Septiembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 188
Enlace directo a este mensaje Enviado: 12/Septiembre/2014 a las 21:59
Hola Guarracuco, muchisimas gracias por tu respuesta tan completa. Por supuesto que me pondre a la tarea de probar...

Una pregunta: La linea que inserta los datos de la consulta en el cuadro combinado es ctl.RowSource = "SELECT * FROM [ODBC; " & sqlstr & "]." & nTabla  & cadenaSQL ???

las variables nTabla y cadenaSQL a que hacen referencia???
"El espiritu de lucha es lo que nos impulsa cada día a emprender nuevos retos..."



Alexsc

Bogotá - Colombia
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3123
Enlace directo a este mensaje Enviado: 12/Septiembre/2014 a las 21:03
coenctado a origen de datos
Public Function LlenaCombos(nTabla As String, nForm As String, nCombo As String, _
                                                Optional cadenaSQL As String, _
                                                Optional indx1 As Integer, _
                                                Optional indx2 As Integer) As Boolean
Set frm = Forms(nForm)
If usuario = "" Or contraSeña = "" Then
    LlenaCombos = False
    DoCmd.Close acForm, frm.Name
    MsgBox "Debe iniciar una sesión", vbInformation, tiTulo
    DoCmd.OpenForm "FrmInicio"
Exit Function
End If
Set frm = Forms(nForm)
Set ctl = frm.Controls(nCombo)
sqlstr = "driver={SQL Server}; SERVER=tuserver;uid=" & usuario & ";pwd=" & contraSeña & ";database=tubasededatos"
If cadenaSQL = "" Then
    ctl.RowSource = "SELECT * FROM [ODBC; " & sqlstr & "]." & nTabla
Else
    ctl.RowSource = "SELECT * FROM [ODBC; " & sqlstr & "]." & nTabla & cadenaSQL
End If
LlenaCombos = True
End Function

desde formulario:
...
If LlenaCombos("TblAseguradoras", Me.Name, "CboAseguradoras") = False Then Exit Sub
...
Completamente digerido, masticado. Fájate a probar, entender y adecuar a tu entorno.
https://tucondominioaldia.net
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3123
Enlace directo a este mensaje Enviado: 12/Septiembre/2014 a las 20:58
llena combos con tipo de origen=lista de valores
Public Function LlenaCombos(nTabla As String, nForm As String, nCombo As String, _
                                                Optional camposSQL As String, _
                                                Optional cadenaSQL As String, _
                                                Optional indx1 As Integer, _
                                                Optional indx2 As Integer) As Boolean
On Error GoTo lbl_error
Set frm = Forms(nForm)
'If Usuario = "" Or contraSeña = "" Then
    'LlenaCombos = False
    'DoCmd.Close acForm, frm.Name
    'MsgBox "Debe iniciar una sesión", vbInformation, titulo
    'DoCmd.OpenForm "FrmInicio"
    'Exit Function
'End If
Set frm = Forms(nForm)
Set ctl = frm.Controls(nCombo)
sqlStr = "[ODBC; Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=siscondmy; User=root;Password=carlos;Option=1;"
If mysqlConn.State = 0 Then conexion
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient

If camposSQL <> "" Then
    strSQl = "select " & camposSQL & " from " & nTabla
End If

If cadenaSQL <> "" Then
    strSQl = strSQl & cadenaSQL
End If

If camposSQL = "" And cadenaSQL = "" Then
    strSQl = "Select * from " & nTabla
End If

rs.Open strSQl, mysqlConn, ADODB.adOpenForwardOnly, ADODB.adLockBatchOptimistic
Set rs.ActiveConnection = Nothing
cols = Split(camposSQL, ",")
Do Until rs.EOF
    For j = 0 To UBound(cols)
        campos = campos & rs(j).Value & ";"
    Next j
    ctl.AddItem campos
    campos = Empty
    rs.MoveNext
Loop
rs.Close
LlenaCombos = True
lbl_exit:
    Exit Function
lbl_error:
    LlenaCombos = False
    Trata_error Err.Number
    Resume lbl_exit
End Function

La idea es cerrar conexión

https://tucondominioaldia.net
Arriba
guarracuco Ver desplegable
Moderador
Moderador
Avatar

Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3123
Enlace directo a este mensaje Enviado: 12/Septiembre/2014 a las 20:52
se pueden llenar con una consulta de paso a través sin tener tablas vinculadas.
La cuestión está en que si cierras la conexión tendrás error.
Lo que hago es llenarlos pero con tipo de origen de datos como lista, no tabla/consulta para poder cerrar la conexión.
Te dejo ambas y tu decides cual se adapta mejor. 

https://tucondominioaldia.net
Arriba
MexMan70 Ver desplegable
Colaborador
Colaborador


Unido: 17/Julio/2007
Localización: DarkSide
Estado: Sin conexión
Puntos: 9235
Enlace directo a este mensaje Enviado: 12/Septiembre/2014 a las 19:10
Los cuadros combinados los puedes llenar con tablas, consultas o una lista de datos, si optas por una tabla o consulta, estas pueden ser locales o vinculadas.

De manera que si tienes una consulta, úsala como origen de las filas de tu cuadro combinado
OneDrive: http://sdrv.ms/Vk6eJd
Arriba
alexsc Ver desplegable
Habitual
Habitual
Avatar

Unido: 02/Septiembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 188
Enlace directo a este mensaje Enviado: 12/Septiembre/2014 a las 18:28
Buen dia:

Quisiera saber si existe la posibilidad de llenar un Cuadro Combinado en un formulario de Access, con los registros obtenidos de una consulta ejecutada por instruccion a traves de codigo VBA en el mismo formulario, con el fin de no tener que recurrir a la vinculacion de tablas de SQL Server al Access, ya que eso me obliga a tener que crear la conexion ODBC en cada computador donde se vaya a ejecutar dicho formulario

Si es posible esto les pido por favor me den una idea de como seria, o si existe otra alternativa diferente

Les agradezco mucho su valiosa y pronta colaboracion. Saludos

"El espiritu de lucha es lo que nos impulsa cada día a emprender nuevos retos..."



Alexsc

Bogotá - Colombia
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable