Continuando con los posts en los que estamos trabajando como ejecutar instrucciones de SQL desde nuestro excel, hoy vamos a trabajar con la instrucción INSERT INTO. Ya previamente vimos la instrucción UPDATE y la instrucción DELETE donde en ambos casos utilizamos la librería ADO.
Para ejecutar INSERT INTO, necesitamos lo mismo, es decir, una conexión y un comando. Así de simple.
Nuevamente nos vamos al editor de visual basic, y vamos a ingresar el código para la conexión. Recuerden que como lo vimos previamente, hay que activar la librería ADO:
En este caso, la ruta del archivo de access, la tenemos en una hoja llamada Configuración, en la celda B3.
Procedemos a crear un comando DELETE, para limpiar la tabla en la que vamos a cargar nuestros datos:
El aspecto del archivo de excel que queremos cargar en access es el siguiente:
Y vamos a utilizar una instrucción for, para iterar por cada una de las filas de nuestro excel, extraer los datos y poder pasarlos a la instrucción INSERT INTO:
Finalmente, el cargue lo realizamos mediante el uso de nuestro comando.
La instrucción INSERT INTO en este ejemplo, requiere que le digamos la tabla, los campos y el valor que va a ir en cada campo:
"INSERT INTO tblReales (geografia, pais, desc_ceco, desc_item, ene, feb, mar, abr, may, jun, jul, ago, sep, oct, nov, dic) VALUES('Mexico', 'Mexico','" & ceco & "', '" & item & "', " & ene & ", " & feb & ", " & mar & ", " & abr & ", " & may & ", " & jun & ", " & jul & ", " & ago & ", " & sep & ", " & oct & ", " & nov & ", " & dic & ")"
La instrucción INSERT INTO en este ejemplo, requiere que le digamos la tabla, los campos y el valor que va a ir en cada campo:
"INSERT INTO tblReales (geografia, pais, desc_ceco, desc_item, ene, feb, mar, abr, may, jun, jul, ago, sep, oct, nov, dic) VALUES('Mexico', 'Mexico','" & ceco & "', '" & item & "', " & ene & ", " & feb & ", " & mar & ", " & abr & ", " & may & ", " & jun & ", " & jul & ", " & ago & ", " & sep & ", " & oct & ", " & nov & ", " & dic & ")"
Y este es el código completo:
Código:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sub cargue_data_real() | |
Dim cnn As New ADODB.Connection | |
Dim cmd As New ADODB.Command | |
Dim filas As Long | |
Dim ceco As String | |
Dim item As String | |
Dim ene, feb, mar, abr, may, jun, jul, ago, sep, oct, nov, dic As String | |
cnn.Provider = "Microsoft.ACE.OLEDB.12.0" | |
cnn.Properties("Data Source") = "" & Sheets("Configuracion").Range("B3").Text | |
cnn.Properties("Jet OLEDB:Database Password") = "" | |
cnn.Open | |
With cmd | |
.ActiveConnection = cnn | |
.CommandText = "DELETE * FROM tblReales" | |
.CommandType = adCmdText | |
.Execute | |
End With | |
filas = Sheets("Configuracion").Range("B2").Value | |
For i = 11 To filas | |
ceco = Sheets("Real").Range("A" & i).Text | |
item = Sheets("Real").Range("B" & i).Text | |
ene = Replace(Sheets("Real").Range("C" & i).Text, ",", ".") | |
feb = Replace(Sheets("Real").Range("D" & i).Text, ",", ".") | |
mar = Replace(Sheets("Real").Range("E" & i).Text, ",", ".") | |
abr = Replace(Sheets("Real").Range("F" & i).Text, ",", ".") | |
may = Replace(Sheets("Real").Range("G" & i).Text, ",", ".") | |
jun = Replace(Sheets("Real").Range("H" & i).Text, ",", ".") | |
jul = Replace(Sheets("Real").Range("I" & i).Text, ",", ".") | |
ago = Replace(Sheets("Real").Range("J" & i).Text, ",", ".") | |
sep = Replace(Sheets("Real").Range("K" & i).Text, ",", ".") | |
oct = Replace(Sheets("Real").Range("L" & i).Text, ",", ".") | |
nov = Replace(Sheets("Real").Range("M" & i).Text, ",", ".") | |
dic = Replace(Sheets("Real").Range("N" & i).Text, ",", ".") | |
With cmd | |
.ActiveConnection = cnn | |
.CommandText = "INSERT INTO tblReales (geografia, pais, desc_ceco, desc_item, ene, feb, mar, abr, may, jun, jul, ago, sep, oct, nov, dic) VALUES('Mexico', 'Mexico','" & ceco & "', '" & item & "', " & ene & ", " & feb & ", " & mar & ", " & abr & ", " & may & ", " & jun & ", " & jul & ", " & ago & ", " & sep & ", " & oct & ", " & nov & ", " & dic & ")" | |
.CommandType = adCmdText | |
.Execute | |
End With | |
Next i | |
MsgBox "Proceso Finalizado", vbInformation, "Fin de Proceso" | |
End Sub |
tal vez tienes el ejemplo por favor para descargarlo
ResponderBorrar