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!!
 

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

Preguntas similares