Conexión con base de datos actual con VBA Access 2007

En el trabajo tengo que usar gran parte del tiempo Access. Hasta ahora con el conocimiento que tenía de la aplicación y de SQL (nivel intermedio) me apañaba bastante bien, pero recientemente en mi nuevo puesto me he dado cuenta que aprender VBA me puede permitir automatizar ciertas tareas y ahorrar bastante tiempo. Me he puesto con un curso de VBA y he aprendido algunos temas básicos de sintaxis, pero cuando quiero conectarme a una base de datos tal como se indica no es posible ¿alguien me podría indicar que es lo que falla en el código? El código usado es el siguiente:

Option Compare Database
Option Explicit
Sub conecta_base_actual()
Dim miconexion As New Connection
Set miconexion = CurrentProject.Connection
Dim instruccion_sql As String
instruccion_sql = "SELECT * FROM procedimientos"
Dim mirecordset As New Recordset
mirecordset.Open instruccion_sql, miconexion
Do Until mirecordset.EOF
Debug.Print mirecordset!serie
mirecordset.MoveNext
Loop
mirecordset.Close
Set mirecordset = Nothing
miconexion.Close
Set miconexion = Nothing
End Sub

Al tratar de ejecutarlo sale un ventana emergente con el error:

Error de compilación

El uso de la palabra New no es válido

Tras investigar en Internet he encontrado que este código no es válido para Access 2007, y a pesar de que en el video del curso si que le funciona con esa versión de Access, debe ser cierto porque al guardarlo como Access 2000 si que se ejecuta. El problema es que yo necesito usar Access 2007.

También hojeando un libro he visto otro código distinto para conectarse a una base de datos:

Option Compare Database
Option Explicit
Sub conecta_base_actual()
Dim miconexion As ADODB.Connection
Dim mirecordset As ADODB.Recordset
Set miconexion = New ADODB.Connection
miconexion.Provider = "Microsoft.Jet.OLEDB.4.0"
miconexion.ConnectionString = "Data Source=" & CurrentProject.Path & "\VBA_2000.mdb"
miconexion.Open
Set mirecordset = New ADODB.Recordset
mirecordset.Open "procedimientos"
Do Until mirecordset.EOF
    Debug.Print mirecordset!serie
    mirecordset.MoveNext
Loop
mirecordset.Close
Set mirecordset = Nothing
miconexion.Close
Set miconexion = Nothing
End Sub

Pero tampoco este código, con diferente forma de declarar y configurar conexión y recordset funciona.

¿Alguien podría aclararme porque falla alguno de los códigos y como hacerlo con Access 2007? Por anticipado me disculpo si puede haber algun error tonto, porque soy usuario y aprendiz únicamente.

Respuesta
2

Ve que tratas de conectarte a la propia BD usando ADO. En mi opinión, para conectarte a la propia BD es más sencillo usar DAO, pues con 2 líneas lo resuelves:

Dim rst As DAO.Recordset
Set rst=CurrentDb.OpenRecordset("SELECT * FROM procedimientos")
Do Until rst.EOF
    Debug. Print rst("serie")
    Rst. MoveNext
Loop
rst.Close
Set rst=Nothing

En principio a tus códigos no les veo nada "raro" (aunque vaya por delante que no uso ADO) ¿Has declarado las referencias para usar ADO?

Ampliando mi respuesta, tu primer código, si lo pones así (y registras la librería para ADO), funciona en Access 2007:

Sub conecta_base_actual()
Dim miconexion As New ADODB.Connection
Set miconexion = CurrentProject.Connection
Dim instruccion_sql As String
instruccion_sql = "SELECT * FROM procedimientos"
Dim mirecordset As New ADODB.Recordset
mirecordset.Open instruccion_sql, miconexion
Do Until mirecordset.EOF
Debug.Print mirecordset!serie
mirecordset.MoveNext
Loop
mirecordset.Close
Set mirecordset = Nothing
miconexion.Close
Set miconexion = Nothing
End Sub

Funciona perfectamente. Parece que solo era cuestión de declarar como me indicas, entiendo que ADODB como objeto y Connection como método/propiedad de este.

Muchas gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas