Access - Rellenar combobox desde base de datos externa

 
Vista:
sin imagen de perfil

Rellenar combobox desde base de datos externa

Publicado por Gonzalo (3 intervenciones) el 09/08/2017 03:21:51
Buenas, soy nuevo tanto en el sitio como en vba access. Paso a comentar, estoy con un proyecto de base de datos access 2013, decidí dividir una base (back-end y front-end) al back-end lo protegí con contraseña y desde el front-end realice una conexion por vba...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Sub AbriendoConexion()
 
    On Error Resume Next                                                                                                        'CONTINUA CON LA SIG LINEA SI ENCUENTRA UN ERROR
 
    RutaActual = DLookup("CampoRUTA", "tablaRuta", "CampoRUTA <> ''")                                                           'CAPTURA EN UNA VARIABLE LA RUTA ALMACENADA EN UNA TABLA
 
    instruccion = "SELECT * FROM USUARIOS"                                                                                      '
    miconexion.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & RutaActual & "; Jet OLEDB:Database Password=Kromium3541" 'CONECTA CON LA BASE Y PASA CONTRASEÑA
 
    If Err.Number = -2147467259 Then                                                                                            'SI NO ENCUENTRA LA BASE REDEFINE LA RUTA DEL ARCHIVO
 
        Dim ventana As FileDialog                                                                                               'DIMENSIONA VENTANA
        Dim obj As Variant                                                                                                      'DIMENSIONA OBJETO
        Dim ruta As String                                                                                                      'DIMENSIONA RUTA
        Set ventana = Application.FileDialog(msoFileDialogFilePicker)                                                           'INICIA VENTANA
 
        With ventana                                                                                                            'CON VENTANA
 
            .Title = "Elige la BD"                                                                                              'TITULO DE VENTANA
            .Filters.Add "Base de Datos", "*.accdb", 1                                                                          'FILTRA SOLO ARCHIVOS ACCDB
            .Show                                                                                                               'MUESTRA LA VENTANA
 
            For Each obj In .SelectedItems                                                                                      'PARA CADA OBJETO EN LA SELECCION
            ruta = CStr(obj)                                                                                                    'INICIA RUTA CON EL ARCHIVO SELECCIONADO
 
            DoCmd.SetWarnings False                                                                                             'DESACTIVA LOS AVISOS
            instruccion1 = "UPDATE tablaRUTA SET CampoRUTA = '" & ruta & "'"                                                    'ACTUALIZA EL VALOR DE LA TABLA CON LA NUEVA RUTA SELECCIONADA
            DoCmd.RunSQL instruccion1                                                                                           'CORRE LA INSTRUCCION
            DoCmd.SetWarnings True                                                                                              'ACTIVA LOS AVISOS
 
            Next obj
 
        End With
 
        miconexion.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " & ruta & "; Jet OLEDB:Database Password=Kromium3541"  'CONECTA LA BASE CON LA NUEVA RUTA
 
    End If                                                                                                                      'FIN DE LA CONEXION
 
    mirecordset.Open instruccion, miconexion, adOpenDynamic, adLockOptimistic                                                   'ABRE LA BASE PARA TRABAJAR
 
End Sub
Sub CerrandoConexion()
 
    mirecordset.Close
    Set mirecordset = Nothing
    miconexion.Close
    Set miconexion = Nothing
 
End Sub

El tema es que ahora tengo un combobox que quiero rellenar con los datos de una de las tablas del back-end al cargar un formulario
1
2
3
4
5
6
7
8
Private Sub form_load()
 
    Do Until mirecordset.EOF
         combo_box.AddItem mirecordset!Nombre
         mirecordset.MoveNext
    Loop
 
End Sub

pero me da el siguiente error...
Se ha producido el error '6014' en tiempo de ejecución
para poder utilizar este método, la propiedad TipoDeOrigenDeLaFila
debe establecerse en Lista de Valores

el recordset funciona ya que si pongo
1
cuadro_de_texto = mirecordset!Nombre

carga el primer registro en el cuadro de texto, pero no puedo rellenar el combobox ni un listbox...

Agradecería mucho la ayuda que me puedan proporcionar.
Saludos
Gonzalo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Rellenar combobox desde base de datos externa

Publicado por Anonimo (3392 intervenciones) el 09/08/2017 10:42:07
Pregunta:

Has seguido la guía/consejo de Access y MODIFICADO el tipo de datos de origen en el objeto (sea cuadro de lista o combo)??

Si el origen de datos del objeto tiene:
tabla/consulta

No aceptara jamás el método AddItem, los Ítems a añadir se tendrían que hacer en la tabla (y no en el cuadro de lista) así que hazle caso a quien mas sabe de eso (el motor de Access) y sigue sus consejos que son meridianamente claros

La alternativa es que asignes DIRECTAMENTE el recordset (o una consulta basada en el) como origen de datos y asi los datos y el origen se corresponderán (y ya no se utilizaría para nada el método de añadir Ítems).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Rellenar combobox desde base de datos externa

Publicado por Gonzalo (3 intervenciones) el 10/08/2017 02:10:41
Primero que nada gradezco tu rapida respuesta, estuve tratando de realizar la conexion pero sin exito, quisiera hacerlo por vba y no por la ventana de propiedades, porque la idea es que a traves del codigo si no encuentra la base le solicita al usuario que seleccione la ubicacion, hasta ahora probe diferentes codigos que encontre en la web pero no me funciona ninguno o algo debo de estar haciendo mal, uno de ellos es...

1
2
3
Private Sub form_load()
 
      Me.RecordSource = instruccion1

Nuevamente muchas gracias por la ayuda.

Saludos
Gonzalo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rellenar combobox desde base de datos externa

Publicado por Anonimo (3392 intervenciones) el 10/08/2017 03:20:01
Creo que no has captado la esencia de la respuesta ....

Recurriré a sinónimos para evitar que diferentes versiones de Access interfieran.

Si asociamos el objeto cuadro de lista a un tipo de asiento, Access te indica que para los niños (por peso y talla) hay unos asientos adecuados, que para adultos hay otros mas idóneos, que según sea el futuro usuario se ha de utilizar el asiento especifico.

Pero eso nada tiene que ver con que el usuario se llame Juan o Lola, depende de la edad y peso (en definitiva de la talla) del usuario.

Esa propiedad se modifica en el objeto (sea el cuadro de lista o combo) cuando esta en modo diseño.

A respecto de como obtienes los datos .... es tu método y si te funciona como deseas disfrútalo (pero creo que complicas lo que en esencia es sencillo, he creado aplicaciones que utilizan recursos en red y sin ninguna tabla física o vinculada visible o invisible en la aplicación).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Rellenar combobox desde base de datos externa

Publicado por Gonzalo (3 intervenciones) el 10/08/2017 04:47:28
Nuevamente gracias por la pronta respuesta, como dije al principio no estoy muy afinado con el tema access vba, por tanto no se me ocurre como lograr crear una base que este dividida y que el usuario pueda conectarse a la base desde el front-end y a su vez si se diera el caso de que el back-end no lo encuentre pueda conectarse, evidentemente no tengo una vision tan amplia en programacion, tendre que seguir con los libros ya que por aca senti que me tomabas por tonto.

Saludos
Gonzalo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Rellenar combobox desde base de datos externa

Publicado por Anonimo (3392 intervenciones) el 10/08/2017 06:08:47
Lamento esa impresión en mis respuestas, me siento incapaz de poder indicarte que (en diseño) a un cuadro de lista o Combo Box se le ha de especificar el modo de datos que conformaran cada ítem (tan simple como seleccionarlo de un desplegable), así que para evitar interpretaciones anómalas y mal intencionadas: por mi parte doy por finalizada mi intervención en el hilo.

Y créeme que esa imagen que interpretas no parte de mí, será la que tú quieras interpretar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar