Hace poco hablamos de cómo conectar MySQL con Excel (Enlace) aunque básicamente se hizo referencia a conectarse a un servidor y extraer sus datos. En esta ocasión lo que vamos a hacer es enviar datos de Excel hacia una base de datos MySQL.
Vamos a hacer algo corto y práctico porque la idea es que se entienda más que hacer algo complicado. Entonces, comenzaremos creando una tabla con cuatro campos en alguna base de datos MySQl que tengamos. Mi base de datos se llama “Pruebas” y llamaré a mi tabla “TablaPruebas”. Los campos serán los siguientes:
Nombre del campo |
Tipo |
Extras |
Id |
Int |
Primary – Auto_Increment |
Nombre |
Text |
|
País |
Text |
|
Fecha |
Date |
|
En nuestra hoja de Excel usaremos tres columnas A, B y C (La de “Id” no, ya que es de numeración automática) y pondremos encabezados en la fila 1. Llenaremos datos que queramos enviar a MySQL:
Como son varios datos usaremos un bucle para enviar los datos, aunque la clave de todo será usar SQL y en específico “Insert Into”. Dado que usaremos el bucle mencionado, debemos asegurar que al construir nuestra cadena SQL, se tomen los datos adecuados por lo que dicha cadena debe quedar de la siguiente manera:
sql = "Insert Into tablapruebas (Nombre, País, Fecha) Values ('" & Range("A" & x).Value & "','" _
& Range("B" & x).Value & "','" & Format(Range("C" & x).Value, "yyyy-mm-dd") & "')"
Al ser los campos del tipo Text y Date, deben necesariamente ir entre comillas simples en la cadena. Para terminar, y basándonos en todo lo mencionado en el artículo anterior, nuestra macro debería quedar así, tomando en cuenta que usaré MySQL en el “LocalHost”:.
Sub DatosaMySQL()
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sql$, BD$, Servidor$, User$, Clave$
Dim UltimaFila As Long, x As Long
Set cnn = New ADODB.Connection
Let Servidor = "localhost": Let BD = "pruebas"
Let User = "root": Let Clave = ""
Let UltimaFila = Cells(Rows.Count, 1).End(xlUp).Row
cnn.ConnectionString = "DRIVER={MySQL ODBC 8.0 Unicode Driver};" _
& "SERVER=" & Servidor & ";DATABASE=" & BD & ";" _
& "UID=" & User & ";PWD=" & Clave & ";PORT=3306;OPTION=131072"
cnn.Open
For x = 2 To UltimaFila
Set rst = New ADODB.Recordset
Let sql = "Insert Into tablapruebas (Nombre, País, Fecha) Values ('" & Range("A" & x).Value & "','" _
& Range("B" & x).Value & "','" & Format(Range("C" & x).Value, "yyyy-mm-dd") & "')"
With rst
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open sql, cnn, , , adCmdText
End With
Set rst = Nothing
Next x
cnn.Close
Set cnn = Nothing
MsgBox "Todo listo"
End Sub
Si todo salió bien, tendremos algo así en nuestra tabla:
Espero les sea útil. Hasta la próxima.
Abraham Valencia