Macro para cargar SQL con información de Excel

He escuchado que se puede utilizar macros de excel para cargar información desde excel a SQL.. He buscado información pero entiendo poco, ya que hasta este momento siempre utilice macros para

Trabajar solo excel y no con otras aplicaciones.

Necesito cargar unas 15 filas aproximadamente en una SQL dos veces al día.

¿Tienen algún ejemplo de como sería un código que ejecutaría esta función?

1 respuesta

Respuesta
1

Solo para estar seguros ¿estás hablando de SQL Server? Eso número uno. Segundo, ¿cómo estás en conocimiento de ADO y VBA? Tercero ¿no te sirve la opción de conexión a bases de datos del Excel (Datos - Obtener datos externos - Desde otras fuentes ...)?

Abraham Valencia

Hola Abraham, 

Muchas gracias por disposición, respondiendo tus dudas..

- Si es SQL Server. 
- En ADO no tengo conocimiento, si en VBA usando excel para realizar variadas funciones, pero nunca lo usé para conectarme a una base de datos. 

- Para lo que necesito la conexión a bases de datos de excel no me ayuda, lo que necesito es exportar datos. Osea llevar desde excel a SQL

Atento a tus comentarios. 

[Hola

Sobre lo último, claro, tienes razón, es exportar de Excel a SQL Server, no al revés, por lo tanto no te será útil la herramienta mencionada.

Sobre ADO, bueno, es básicamente una de las formas de conectarse (que es la que recomiendo) y si algo de VBA sabes, no te será tan complicado.

Ahora lo más importante es saber que "Driver" tienes para conectarte a SQL Server para en base a eso construir tu cadena de conexión. ¿Sabes cómo ver eso?:

https://docs.microsoft.com/es-es/sql/database-engine/configure-windows/open-the-odbc-data-source-administrator?view=sql-server-2017 

Un ejemplo en mi portatil:

 Entonces, en mi caso yo uso lo siguiente:

Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
cnn.Open "Driver={SQL Server};" & _
           "Server=ABRAHAM-PC\SQLEXPRESS;" & _
           "Database=MiBaseDeDatos;" & _
           "Uid=;" & _
           "Pwd="
MsgBox "Conectado"

Hay que activar las referencias a "Microsoft ActiveX Data Objects 2.8 Library" (en donde 2.8 puede variar dependiendo de tu versión). Reemplaza por el nombre o IP de tu servidor, el nombre de tu base de datos, y en ese caso yo he entrado sin usuario ni clave porque así lo tengo habilitado.

Comentas

Abraham Valencia

Hola Abraham, muchas gracias por tu respuesta. 

Tuve que cambiar mi equipo por un volcado de memoria y no pude revisar esto antes. 

Incorporé la macro que me comentas, la macro corre, pero no me aparece nada que me aseguré que me conecté a la base de datos. 

Adicionalmente encontré una macro en internet, (te la adjunto) el módulo que conecta a la base de datos no me funciono, ya al parecer esta macro es para versiones de excel 2013. (yo tengo 2010) 

Así que ocupé la macro que tu me diste para conectarme a la base de datos, y la macro obtenida en internet para cargar los datos.. pero no me funcionó =( 

Se podría ajustar la macro para que trabaje bien? 

Public Sub run()

Dim cnn As ADODB.Connection

Set cnn = New ADODB.Connection

cnn.Open "Driver={SQL Server};" & _
"Server=180.173.42.172;" & _
"Database=reportecadadoshoras;" & _
"Uid=;" & _
"Pwd="

'MsgBox "Conectado"

End Sub

Function Query()
Dim SQL As String
Dim RS As ADODB.Recordset
Dim Field As ADODB.Field
Dim Col As Long
Set RS = New ADODB.Recordset
Final = GetUltimoR(CMS)

For Fila = 2 To Final
Fecha = CMS.Cells(Fila, 1)
Inicio = CMS.Cells(Fila, 2)
Skill = CMS.Cells(Fila, 3)

SQL = "insert into intervalosxdiasdisponibles values('" & Fecha & "','" & Inicio & "'," & Skill & ");"
RS.Open SQL, CN
Next
End If
End Function

Este es el driver que tengo para conectarme a SQL. 

Espero que sirva. 

[Hola

Antes de intentar modificar datos, lo primer es verificar la conexión. Tu "Driver" es el correcto y por lo tanto la mejor prueba así:

Public Sub run()
Dim cnn As ADODB.Connection
On Error GoTo etiqueta
Set cnn = New ADODB.Connection
cnn.Open "Driver={SQL Server};" & _
"Server=180.173.42.172;" & _
"Database=reportecadadoshoras;" & _
"Uid=;" & _
"Pwd="
MsgBox "Conectado"
Exit Sub
etiqueta:
MsgBox "Error en al conexión: " & Err.Description
End Sub

Si sale un error así:

"[Microsoft][ODBC SQL Server Driver][DBNETLIB]No existe el servidor SQL Server o se ha denegado el acceso al mismo."

Quizá el problema sea:

- El IP es incorrecto

- El IP es correcto pero el servidor no tiene permiso de conexiones remotas

- La BD tiene usuario y/o clave de carácter obligatorio.

Prueba y revisa los puntos que menciono.

Saludos]

Abraham Valencia

Hola Abraham, si me funcionó! 

Me aparece el msje de conectado. 

Muchas gracias por la ayuda y el tiempo. 

Ahora como hago la inserción de los datos? 

Este es el código que estoy tratando de utilizar (el que encontré en internet), el código se ejecuta completo, (no da ningún error) pero no ingresa nada a la base de datos. 

Este es el código completo, espero que me puedas ayudar. 

Option Explicit
Public CN As ADODB.Connection
Public cnn As ADODB.Connection
Dim Fecha, Inicio, Skill
Dim Fila, Final As Integer


Function Query()
Dim SQL As String
Dim RS As ADODB.Recordset
Dim Field As ADODB.Field
Dim Col As Long


Set RS = New ADODB.Recordset
Worksheets("CMS").Activate
Final = Range("A" & Rows.Count).End(xlUp).Row


For Fila = 2 To Final
Fecha = Worksheets("CMS").Cells(Fila, 1)
Inicio = Worksheets("CMS").Cells(Fila, 2)
Skill = Worksheets("CMS").Cells(Fila, 3)

SQL = "insert into CMS values('" & Fecha & "','" & Inicio & "'," & Skill & ");"
RS.Open SQL, cnn
Next

End Function


Public Sub run2()

Dim cnn As ADODB.Connection

On Error GoTo etiqueta

Set cnn = New ADODB.Connection

cnn.Open "Driver={SQL Server};" & _
"Server=180.173.42.172;" & _
"Database=reportecadadoshoras;" & _
"Uid=;" & _
"Pwd="

MsgBox "Conectado"

Exit Sub

etiqueta:

MsgBox "Error en al conexión: " & Err.Description


End Sub

Hecha la conexión, lo demás es sobre todo seguir ejemplos, yo recomiendo que sigas usando ADO y toda modificación de datos sea con sentencias SQL ya que sirven para SQL Server, Access, MySQL, etc. sugiero mires mi blog:

https://abrahamexcel.blogspot.pe/ 

En la sección de ejemplos descarga y mira en N° 8, es con Excel y Access, pero es casi lo mismo.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas