Excel y bases de datos (MySQL)
29 septiembre, 2011 1 comentario
Como continuación del post anterior, en este vamos a tratar la conexión de Excel con el gestor de bases de datos MySQL. Las operaciones que se pueden realizar entre una hoja Excel y una base de datos pueden ser variadas,tanto como para trabajar un tutorial aparte. No obstante se pueden abordar las principales:
- Crear/eliminar una base de datos.
- Crear/eliminar tablas y campos.
- Hacer consultas generales o específicas.
- Insertar datos o borrarlos.
En el post anterior traté de como crear una base de datos en Access, con sus tablas y campos; y el volcado posterior de datos de Excel hacia Access. Más adelante iré tratando el resto de operaciones que podemos efectuar entre los dos programas de Microsoft, mediante VBA.
Por ahora vamos a analizar como hacer operaciones con MySQL.
Si lo analizan bien, casi siempre efectuámos los mismos pasos:
- 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.
- Tenemos que marcar las referencias específicas para que Excel la carge y la tenga disponible en su biblioteca.
- 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.x .
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 «directorio» y la tabla «example». Se ha utilizado un servidor local, con lo que la dirección del host es la 127.0.0.1. Para poder practicar le aconsejo que inserte una nueva base de datos, sino tiene una ya creada, con una tabla y unos pocos datos.
‘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 excelMySQL()
‘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 As String
‘ahora la base de datos en este caso se llama directorio y la tabla example
Dim bd As String
‘variables para usuario y contraseña (no la creo porque no la tengo en el servidor, en otro caso hay que crearla
Dim user As String
‘variables para la tabla que tiene sólo tres campos
Dim i As Long, tabla, nombre, edad, consulta As String
‘el recordset
Dim rs As ADODB.Recordset
‘———————————————————————-
‘Estableciendo la conexión
‘———————————————————————-
miservidor = «127.0.0.1»
bd = «directorio»
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»
‘————————————————————————
‘A partir de aquí si todo ha ido bien podemos realizar varias acciones
‘Crear o eliminar tablas
‘Añadir campos
‘En este caso vamos a extraer datos a Excel
‘————————————————————————
Set rs = New ADODB.Recordset
consulta = «SELECT * FROM example»
rs.Open consulta, 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
Habrá podido observar una línea : rs.Open consulta, 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:
El cursor o puntero que nos permite desplazarnos por los registros del recordset. Dependiendo del tipo elegido determinaremos los desplazamientos y cambios realizables en los datos.
El tipo de cursor lo definiremos mediante la propiedad CursorType, los posibles valores son:
El otro objeto es el cierre o tipo de bloqueo que efectuaremos en la base de datos cuando modifiquemos un recordset, a fin de evitar que dos o mas usuarios accedan a modificar un mismo registro a la vez.
El tipo de cierre lo definiremos mediante la propiedad LockType, los posibles valores son:
Por último habrá podido observar el parámetro : & «;OPTION=16427». Esto nos asegura que los valores numéricos de tipo large son interpretados correctamente por Excel.