De Acces a un Control en Excel

10/11/2006 - 22:16 por Arubiangt | Informe spam
Hola, el siguiente Codigo que me devuelve un resultado de varias filas y
colomunas:


Private Sub CommandButton2_Click()
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & "Data Source=" & "C:\Documentos\CF_Datos.mdb;Jet OLEDB:Database Password=******"
Set rs = New ADODB.Recordset
rs.Open "select via_placa,via_viaje from VIAJES where via_placa = '000upb'", cn
'Sheets(1).Cells(2, 1).CopyFromRecordset rs
/* aqui lo puedo colocar en una hoja de Excel */
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub



Se puede colocar el resultado directamente en un cuadro de lista o un
textbox en el VBa de Excel?

Hector me ha enviado lo siguiente:

"si quieres evitar el 'pase' de tu recordset a un rango con el metodo
copyfromrecordset para llenar 'en directo' (un control) ...
podrias utilizar dos 'bucles' para el rescate de las 'varias' filas y
columnas y pasarlas [una por una] al control...
usando un bucle 'externo' para el avance por filas segun el numero de
registros en: -> rs.RecordCount
y otro bucle 'interno' para el avance por columnas segun el numero de campos
en: -> rs.Fields.Count"

Entiendo que debo hacer lo siguiente:

for Fil=0 to rs.fields.count
for Col=0 to rs.recordcount

List1.additem rs.*

next Col
next Fil

* Pero, que instruccion debo colocar para "direccionarme" al elemento en la
posicion Fil, Col?
Gracias
 

Leer las respuestas

#1 Héctor Miguel
10/11/2006 - 23:54 | Informe spam
hola, ?

... Se puede colocar el resultado directamente en un cuadro de lista o un textbox en el VBa de Excel?
... que instruccion debo colocar para "direccionarme" al elemento en la posicion Fil, Col?



[hasta donde se] existen -al menos- dos formas de llenar controles de lista/combos con el resultado de consultas a BBDD

segun el numero de registros, pudiera resultar mas rapido 'bajar el recordset a un rango en hoja de calculo y luego 'subirlo' al control -?-
[p.e.] una vez que has 'leido/abierto/rescatado/... el recordset...

With Worksheets("una hoja oculta")
.Range("a1").CopyFromRecordset <objeto_recordset> ' vaciamos el recordset al rango '
With Range(.Range("a1"), .Range("a1").End(xlToRight).End(xlDown))
<lista_o_combo>.ColumnCount = <objeto_recordset>.Fields.Count ' preparamos las columnas '
<lista_o_combo>.List = .Value ' cargamos los valores al control '
.ClearContents ' volvemos a dejar 'limpio' el rango donde se vacio el recordset :) '
End With
End With

si prefieres los 'bucles' y 'avanzar' dato-por-dato, fila-a-fila, columna-por-columna...
prueba con algo +/- como lo siguiente:

<objeto_recordset>.MoveFirst
Fil = 0
<lista_o_combo>.ColumnCount = <objeto_recordset>.Fields.Count
Do While Not <objeto_recordset>.EOF And Col <= <objeto_recordset>.Fields.Count - 1
<lista_o_combo>.AddItem
For Col = 0 To <objeto_recordset>.Fields.Count - 1
<lista_o_combo>.List(Fil, Col) = <objeto_recordset>.Fields(Col).Value
Next
<objeto_recordset>.MoveNext
Fil = Fil + 1
Loop

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta y el codigo expuesto __
Hola, el siguiente Codigo que me devuelve un resultado de varias filas y colomunas:
Private Sub CommandButton2_Click()
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & "Data Source=" & "C:\Documentos\CF_Datos.mdb;Jet OLEDB:Database Password=******"
Set rs = New ADODB.Recordset
rs.Open "select via_placa,via_viaje from VIAJES where via_placa = '000upb'", cn
'Sheets(1).Cells(2, 1).CopyFromRecordset rs
/* aqui lo puedo colocar en una hoja de Excel */
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub



Hector me ha enviado lo siguiente:
"si quieres evitar el 'pase' de tu recordset a un rango con el metodo copyfromrecordset para llenar 'en directo' (un control) ...
podrias utilizar dos 'bucles' para el rescate de las 'varias' filas y columnas y pasarlas [una por una] al control...
usando un bucle 'externo' para el avance por filas segun el numero de registros en: -> rs.RecordCount
y otro bucle 'interno' para el avance por columnas segun el numero de campos en: -> rs.Fields.Count"

Entiendo que debo hacer lo siguiente:

for Fil=0 to rs.fields.count
for Col=0 to rs.recordcount
List1.additem rs.*
next Col
next Fil

* Pero, que instruccion debo colocar para "direccionarme" al elemento en la posicion Fil, Col?

Preguntas similares