ADO y Excel

30/06/2004 - 16:39 por Anonimo | Informe spam
Tengo un libro de com cuatro hojas de excel las cuales
tienen informacion en comun(Columna: NombreCliente).
Necesito relacionar estas cuatro hojas de excel como si
fueran tablas y tomar de cada hoja una columna. Para ello
realizaria atravez de ADO una consulta SQL que tenga como
referencia dentro de la instruccion From las cuatro Tablas
y el resultado lo asigno a un Recorset.
Se como hacer para transformar una SOLA hoja de excel en
un Recorset con ADO, pero en este caso son Cuatro hojas.
Pense que si me reconoce una hoja tambien podria reconocer
las 4 dentro de la instruccion FROM pero me da el
siguiente error.
"El aplicativo solicito una operacion en un objeto con
referencia a un Objeto Connection cerrado o invalido"

La instruccion es la siguiente.
rsLotesAbatidos.Open "SELECT Lotes.DAT_ABATE,
Historico.NOM_CLIENTE, Lotes.TEX_HIST2_1" & _
"FROM [LotesAbatidos$A1:C14] AS Lotes,
[Historico$A1:F1000] AS Historia" & _
"Where Lotes.NOM_CLIENTE = Historia.NOM_CLIENTE,
cnn, , , adCmdText"
 

Leer las respuestas

#1 David Canales
04/07/2004 - 23:31 | Informe spam
Vamos a suponer lo siguiente:
1.-Tienes un libro llamado BaseDatos.xls en la carpeta C:\SqlAdo\
2.-El libro tiene tres hoja y en cada hoja hay una tabla de datos con su
respectivo nombre de rango.
3.-El rango en la primera hoja se llama Tabla1 y contiene los campos ID,
Nombres, Apellidos.
4.-El rango en la segunda hoja se llama Tabla2 y contiene los campos ID,
Ingresos.
5.-El rango en la tercera hoja se llama Tabla3 y contiene los campos ID,
Direccion.
6.-El codigo de abajo te dara como resultado la siguiente tabla a partir de
la fila 2 en la hoja activa del libro donde tienes este codigo. La fila 1
contiene los encabezados que tu ya has ingresado.

ID Nombres Apellidos Ingresos Direccion
25 Jorge Lopez 1000 Ciudad1
30 Mario Perez 2000 Ciudad2


Sub ConsultaAdo()
Dim Consulta As String
Consulta = "SELECT Tabla1.ID, Tabla1.Nombres, Tabla1.Apellidos, " & _
"Tabla2.Ingresos, Tabla3.Direccion FROM " & _
"`C:\SqlAdo\BaseDatos`.Tabla1 Tabla1, " & _
"`C:\SqlAdo\BaseDatos`.Tabla2 Tabla2, " & _
"`C:\SqlAdo\BaseDatos`.Tabla3 Tabla3 " & _
"WHERE Tabla1.ID = Tabla2.ID AND Tabla3.ID = Tabla2.ID"
GetWorksheetData "C:\SqlAdo\BaseDatos.xls", Consulta,
ActiveSheet.Range("A2")
End Sub

Sub GetWorksheetData(strSourceFile As String, strSQL As String, TargetCell
As Range)
Dim cn As ADODB.Connection, rs As ADODB.Recordset, f As Integer, r As Long
If TargetCell Is Nothing Then Exit Sub
Set cn = New ADODB.Connection
On Error Resume Next
cn.Open "DRIVER={Microsoft Excel Driver
(*.xls)};DriverIdy0;ReadOnly=True;" & _
"DBQ=" & strSourceFile & ";"
On Error GoTo 0
If cn Is Nothing Then
MsgBox "Can't find the file!", vbExclamation, ThisWorkbook.Name
Exit Sub
End If

Set rs = New ADODB.Recordset
On Error Resume Next
rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText

On Error GoTo 0
If rs Is Nothing Then
MsgBox "Can't open the file!", vbExclamation, ThisWorkbook.Name
cn.Close
Set cn = Nothing
Exit Sub
End If

TargetCell.CopyFromRecordset rs

If rs.State = adStateOpen Then
rs.Close
End If
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub


Saludos,

David Canales


wrote in message
news:237e601c45eb0$062ca260$
Tengo un libro de com cuatro hojas de excel las cuales
tienen informacion en comun(Columna: NombreCliente).
Necesito relacionar estas cuatro hojas de excel como si
fueran tablas y tomar de cada hoja una columna. Para ello
realizaria atravez de ADO una consulta SQL que tenga como
referencia dentro de la instruccion From las cuatro Tablas
y el resultado lo asigno a un Recorset.
Se como hacer para transformar una SOLA hoja de excel en
un Recorset con ADO, pero en este caso son Cuatro hojas.
Pense que si me reconoce una hoja tambien podria reconocer
las 4 dentro de la instruccion FROM pero me da el
siguiente error.
"El aplicativo solicito una operacion en un objeto con
referencia a un Objeto Connection cerrado o invalido"

La instruccion es la siguiente.
rsLotesAbatidos.Open "SELECT Lotes.DAT_ABATE,
Historico.NOM_CLIENTE, Lotes.TEX_HIST2_1" & _
"FROM [LotesAbatidos$A1:C14] AS Lotes,
[Historico$A1:F1000] AS Historia" & _
"Where Lotes.NOM_CLIENTE = Historia.NOM_CLIENTE,
cnn, , , adCmdText"

Preguntas similares