combobox desde acces

15/04/2005 - 22:31 por fredy | Informe spam
hola grupo!
primero agradecer el tiempo que dedican a resolver las dudas de este foro,
en especial a esas personas que encontramos continuamente dando respuestas,
no quiero decir ningun nombre para no comprometerme... son magnificos!!...

bueno.. era algo que queria decir despues de recibir tanta colaboracion

ahora quiero hacer una pregunta
tengo un formlario con un combobox, es posible que el listado de este
combobox este ligado a un campo de una tabla de un archivo mdb..

muchas gracias!!

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
15/04/2005 - 23:54 | Informe spam
hola, fredy !

... un formulario con un combobox
... que el listado... este ligado a un campo de una tabla de un archivo mdb...



igual y me equivoco porque no soy 'tan adicto' de acces como de excel :D pero...
[hasta donde se] no creo que sea posible 'ligar' un combo a campos en access... :(
-> a menos que... -> primero 'lo bajes' a algun rango en alguna hoja ;)
op1: [menu] datos / obtener datos externos > y creas/ejecutas una consulta a una base de datos
[probablemente] necesitaras asignar un nombre con referencia a rangos dinamicos al listado
asignar dicho nombre a la propiedad 'RowSource' del combo y...
hacer 'refrescos' de la consulta [cuando sea necesario Y] antes de mostrar el formulario
op2: usando codigo que haga la consulta a la BD y 'traiga' a una hoja de excel un 'RecordSet' de ADO

si comentas datos adicionales... ;)
saludos,
hector.
un ejemplo de la opcion 2 ==existe una manera 'express' de cargar datos a listboxes/comboboxes usando variables de matriz
aunque el procedimiento ['engañosamente'] pareciera NO 'tener' NADA de 'express' :))
1.- 'asignar' a una variable de matriz ['tipo' Variant] los valores de un rango de celdas
2.- 'cargar' la listbox usando la propiedad 'List' y 'llenandola' CON la variable de matriz
- esto REQUIRE 'bajar' -primero- a un rango la consulta antes de llenar la listbox
- usando la propiedad CopyFromRecordSet de un objeto 'Range' => XL2000 o 'superior' < - una vez EN la listbox, el rango se puede borrar [inclusive puede 'estar' en una hoja 'oculta']
- lo que 'da la apariencia' de TRIPLE labor: 'escribir' en el rango + 'escribir' en la listbox + borrar :((
- todo el proceso [consulta, rango, lista, presentar el formulario, etc.] en las pruebas que efectue...
- le tomo ... 1 segundo con 4,000 registros y 3 campos [columnas] =>P-3 @800 10/100< - obviamente la red NO 'internivo' y la consulta fue a un archivo de texto con formato csv :))
3.- de hecho, use una hoja oculta [que se llama 'Oculta'] y le 'puse' los tiempos a la hoja 'activa'
4.- sera mejor 'recortar' la consulta a SOLO los campos 'necesarios' :))
_______ el codigo 'probado' _______
Sub ConsultaEnArchivoDeTexto()
Range("a1") = Now
Dim Conexion As ADODB.Connection, Registros As ADODB.Recordset, _
Directorio As String, Archivo As String, Consulta As String, Listado As Variant
Directorio = "C:\Mis documentos"
Archivo = "ConsultaSQL.csv"
Consulta = "SELECT * FROM " & Archivo
Set Conexion = New ADODB.Connection
Conexion.Open _
"Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
"DBQ=" & Directorio & ";Extensions=asc,csv,tab,txt;"
Set Registros = New ADODB.Recordset
Registros.Open Consulta, Conexion, adOpenForwardOnly, adLockReadOnly, adCmdText
With Worksheets("Oculta")
.Range("a1").CopyFromRecordset Registros
With Range(.Range("a1"), .Range("a1").End(xlToRight).End(xlDown))
Listado = .Value
.ClearContents
End With
End With
With UserForm1
.ListBox1.ColumnCount = Registros.Fields.Count
.ListBox1.List = Listado
.Show vbModeless
End With
Registros.Close: Set Registros = Nothing
Conexion.Close: Set Conexion = Nothing
Range("a2") = Now
End Sub
Respuesta Responder a este mensaje
#2 Héctor Miguel
16/04/2005 - 00:05 | Informe spam
hola [de nuevo] fredy ! ;)

la siguiente es otra macro de ejemplo consultando a archivos .mdb
[y un detalle que habia 'obviado/omitido' en el mensaje anterior] :((
=> no olvides modificar la ruta al archivo y el nombre de la tabla por 'las reales' <= Y...
=> establecer PRIMERO una referencia en el proyecto de macros a la biblioteca de objetos:
'Microsoft ActiveX Data Objects x.x' [donde x.x es el numero de version de la biblioteca] <= OJO
saludos,
hector.
en un modulo de codigo 'normal' ==Sub ImportarTablaDeAccess()
Dim ArchivoMDB As String, Tabla As String, Rango As String, _
Conexion As ADODB.Connection, Registros As ADODB.Recordset, Fila As Long
ArchivoMDB = "C:\Ruta y\Carpetas al\Archivo.mdb"
Tabla = "Nombre_de_la_tabla_en_access"
Rango = "b3"
Set Conexion = New ADODB.Connection
Conexion.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & ArchivoMDB & ";"
Set Registros = New ADODB.Recordset
Registros.Open Tabla, Conexion, adOpenStatic, adLockOptimistic, adCmdTable
On Error Resume Next: Registros.MoveFirst: On Error GoTo 0
With Range(Rango)
Do While Not Registros.EOF: On Error Resume Next
.Offset(Fila) = Registros.Fields(0).Value
.Offset(Fila + 1) = Registros.Fields(1).Value
.Offset(Fila + 2, 2) = Registros.Fields(2).Value
Fila = Fila + 3: On Error GoTo 0: Registros.MoveNext
Loop
End With
Registros.Close: Set Registros = Nothing: Conexion.Close: Set Conexion = Nothing
End Sub
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida