Mostrando las entradas con la etiqueta Excel y MySQL. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Excel y MySQL. Mostrar todas las entradas

miércoles, 10 de abril de 2019

Excel y MySQL (II)

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