Access - Conexión a BD access con ADODB

 
Vista:
sin imagen de perfil
Val: 8
Ha aumentado su posición en 5 puestos en Access (en relación al último mes)
Gráfica de Access

Conexión a BD access con ADODB

Publicado por Miguel (56 intervenciones) el 10/03/2016 16:24:05
Hola a todos, denme una mano por favor.
Pretendo desde una hoja excel, leer datos de una base de datos access. Usando DAO la consulta funciona y trae datos sin problemas, pero como debo leer datos de otras fuentes de datos, me "obliga" a usar ADO y alli esta mi problema

Este código uso para DAO:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
' Paso 1:Asignación de bd, recordset y querydef
Dim MyDatabase As DAO.database
Dim MyQueryDef As DAO.Querydef
Dim MyRecordset As DAO.Recordset
 
' Paso 2: Identificar la base de datos y la consulta.
Set MyDatabase = DBEngine.OpenDatabase ("C:\Mis Documentos\Genera datos.mdb")
Set MyQueryDef = MyDatabase.QueryDefs("Filtra UltDatos")      'esta query esta en la BD
 
'Paso 3: Abrir la consulta. Los resultados de la consulta son archivadas dentro de MyRecordset.
Set MyRecordset = MyQueryDef.OpenRecordset
 
'Paso 4: Se copian los datos a Excel, para este caso a la celda "I4"
ActiveSheet.Range("I4").CopyFromRecordset MyRecordset


Esto funciona muy bien pero no se como hacerla funcionar con ADODB, primero porque no hay similitud con querydef y ademas me aparece un error: No se puede leer ningún registro; no tiene permiso para READ en xxx


Lo que he hecho en ADODB es lo siguiente:

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
Dim cs As String
Dim sPath As String
Dim sql As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
 
sPath = ThisWorkbook.Path & "\Genera datos.mdb"
cs = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sPath & ";Persist Security Info=False;"
 
Set cn = New ADODB.Connection
cn.Open cs
 
Set rs = New ADODB.Recordset
With rs
        .CursorLocation = adUseClient
        .CursorType = adOpenStatic
        .LockType = adLockOptimistic
End With
 
sql = "SELECT [xxx].campo1, [yyy].campo2, Sum([campo3]+[campo4]) AS Total " & _
        "FROM [xxx] LEFT JOIN [yyy] ON [xxx].campo1 = [yyy].campo5 GROUP BY [xxx].campo1"
 
rs.Open sql, cn
 
ActiveSheet.Range("I4").CopyFromRecordset rs
 
rs.Close
cn.Close
 
Set rs = Nothing
Set cn = Nothing


Por favor si alguien me puede decir cual es el problema de tal error. parece un tema de seguridad o acceso aún cuando dicha base de datos no se ha tocado o modificado
La consulta he tenido como ponerla como instrucción sql por que en si esta como una query dentro de la base de datos original y se llama "Filtra UltDatos."
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

Conexión a BD access con ADODB

Publicado por emi (6 intervenciones) el 12/03/2016 08:26:54
Hola!

en primer lugar yo utilizaría la SQL directamente en el código y me olvidaría de la consulta almacenada en Access.

Si no te queda mas remedio que utilizar la consulta, nada te impide abrir con DAO la correspondiente QueryDef y extraer su sentencia SQL de su propiedad SQL.

Saludos
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
Val: 8
Ha aumentado su posición en 5 puestos en Access (en relación al último mes)
Gráfica de Access

Conexión a BD access con ADODB

Publicado por Miguel (56 intervenciones) el 14/03/2016 17:58:43
Hola, gracias por responder. Te comento algo respecto a mi consulta:
No tendría inconveniente en almacenar en una variable la consulta sql como lo he hecho en el segundo casp pero au asi no funciona mi codigo y me da error.
No se que puede pasar .

Ademas la consulta final es resultado de una previa consulta, es decir, primero se ejecuta una query y con el resultado de esa query ejecuto la 2da query final.

Uso excel 2010 y deseo acceder a ls datos de access 2003
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

Conexión a BD access con ADODB

Publicado por emilio (6 intervenciones) el 14/03/2016 19:20:20
Pues no sé que decirte, yo ejecutaría el procedimiento paso a paso, y verificaría el contenido de la variable que contiene la sentencia sql, y trataría de ejecutarla en la base de datos para asegurarme de que su sintaxis es correcta.

Saludos
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

Conexión a BD access con ADODB

Publicado por Enrique Heliodoro (1664 intervenciones) el 14/03/2016 23:47:00
Se puede integrar mas de una consulta en una consulta, de forma que ejecute la 'primera' y con sus resultados opere la segunda, si expones las dos SQLs (dejando claro cual es la primera y la segunda), se podría mostrar como aplicar esta solució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
Val: 8
Ha aumentado su posición en 5 puestos en Access (en relación al último mes)
Gráfica de Access

Conexión a BD access con ADODB

Publicado por Miguel (56 intervenciones) el 15/03/2016 16:33:10
Gracias por tu comentario Enrique.
Aun no salgo de esta.... me parece que no estoy haciendo bien el enlace o conexion con la base de datos. Tengo excel 2010 y deseo acceder a la base de datos de access 2003.

Sigo buscando como conectar pero no lo logro.
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

Conexión a BD access con ADODB

Publicado por Enrique Heliodoro (1664 intervenciones) el 15/03/2016 22:05:22
En el primer mensaje del hilo, indicas que utilizas ADO 'por obligación legal' y creo que en ese punto sufres un poco de confusion.

Access trabaja de forma indistinta (y simultánea) con DAO y con ADO, solo hay que respetar la sintaxis y demás de cada entorno, pero nada impide conectarse con ADO a un AS400 y con DAO a un A'2003.
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