miércoles, 19 de febrero de 2014

CONEXION MYSQL DESDE VBA EXCEL 2010


Para conectarse a una base de datos Mysql Desde VBA Excel por lo general, casi siempre efectuámos los mismos pasos:
  1. Debemos crear el espacio de trabajo, donde debemos especificar a Excel el motor que se precisa para hacer la conexión al gestor de bases de datos.
  2. Tenemos que marcar las referencias específicas para que Excel la carge y la tenga disponible en su biblioteca.
  3. Preparamos las variables para:
  • la conexión
  • servidor
  • usuario
  • contraseña
  • nombre de la base con la que trabajar
  • las tablas y campos en su caso.
Una vez tratado los datos, es decir ejecutada la petición, cerrarmos la conexión y vaciamos las variables objeto.
Bien en el caso que nos ocupa y, atendiendo al primer punto, debemos cargar la referencia a la librería Microsoft Active X Data Objects 2.8.

Lo más probable es que no tenga descargado los drivers para la conexión con MySQL. Para ello vaya a esta dirección “MySQL ODBC 3.51 Driver”. Le aconsejo que escoga Windows (x86, 32-bit), MSI Installer Connector-ODBC  para 32-bit y en caso de 64 Windows (x86, 64-bit), MSI Installer Connector-ODBC. Una vez descargadodoble clic en el MSI y escoga instalación típica.Una vez terminada la instalación, puede verificar la misma en Panel de Control>Herramientas Administrativas>Orígenes de datos ODBC. Clic en la pestaña Drivers y búsquelo en la lista:

A continuación le expongo comentado el código para volcar los datos de una base de datos de MySQL a Excel.  En el ejemplo la base que se ha empleado se llama “Colegio” y la tabla “Estudiantes”. Se ha utilizado un servidor local, con lo que la dirección del host es

‘Para empezar y como paso previo cargamos la referencia a la librería Microsoft Active X Data Objects 2.x
‘Se presupone instalado el driver MySQL ODBC 3.51
‘Comenzando


Sub MySQLVBAExcel()

'variable para la conexión

Dim conexion As New ADODB.Connection

'idem para el nombre del servidor en este caso estoy empleando una versión en local

Dim miservidor,bd, user,sql As String

'el Recordset

Dim rs As ADODB.Recordset

'Estableciendo la conexión

miservidor = "127.0.0.1"

bd = "Colegio"

user = "root"

Set conexion = New ADODB.Connection 'con esto utilizamos la conexión indicada más arriba

conexion.Open "DRIVER={MySQL ODBC 3.51 Driver}" _
& ";SERVER=" & miservidor _
& ";DATABASE=" & bd _
& ";UID=" & user _
& ";OPTION=16427?"


Set rs = New ADODB.Recordset

sql = "SELECT * FROM Estudiantes"

rs.Open sql, conexion, adOpenStatic

With Worksheets(1).Cells

.ClearContents

.CopyFromRecordset rs

End With

'Cerramos la conexión

On Error Resume Next

rs.Close

Set rs = Nothing

conexion.Close

Set conexion = Nothing

On Error GoTo 0

End Sub


Explicación  rs.Open sql, conexion, adOpenStatic. Quisiera comentarla un poco. El objeto Recordset es el interface entre los datos obtenidos de nuestras consultas sobre las tablas y nuestras páginas excel. Representa una tabla organizada en filas (registros) y columnas (campos). La propiedades y métodos de Recordsets pasan por entender el funcionamiento de otros dos objetos claves:

1 comentario: