Vamos a iniciar una serie de posts en los que vamos a utilizar las instrucciones básicas de SQL para borrar, actualizar e insertar datos desde excel en una tabla de una base de datos. Para nuestros ejemplos, vamos a utilizar una base de datos construida en Ms Access, pero podemos reutilizar el código para hacer las operaciones con una base de datos de Oracle, SQL Server, My SQL y otras más.
Este primer post, es sobre el uso de la instrucción DELETE. Sencilla pero poderosa y de mucho cuidado, pues después de ejecutada no la podremos deshacer. En este ejemplo, vamos a construir una macro que va a combinar vba y sql. En mi opinión una combinación poderosa que nos va a servir para solucionar muchas de las necesidades que tengamos en nuestro trabajo.
Vamos a iniciar abriendo un archivo de excel, y vamos a dar la combinación de teclas Alt + F11 para abrir el editor de visual basic. Nos deberá aparecer la siguiente ventana:
Seleccionamos la opción para insertar un módulo:
Y estamos listos para iniciar a escribir nuestro código:
Para realizar las operaciones con la base de datos y poder acceder a los objetos de la misma, vamos a trabajar con la librería ADO. Dicha librería no esta disponible por defecto, así que vamos a entrar al menú del editor, seleccionamos la opción Herramientas y después Referencias:
En el cuadro de dialogo que se despliega, vamos a buscar la opción: Microsoft ActiveX Data Objects 2.8 Library, la seleccionamos y le damos aceptar:
Escribimos el nombre de nuestra macro y estamos listos para iniciar a codificar:
Para poder interactuar mediante ADO con cualquier base de datos vamos a necesitar una conexión, que es el canal y un objeto para pasar las instrucciones que queremos se ejecuten en la base de datos. Dicho esto, vamos a crear los dos objetos en nuestro programa:
Vamos a pasar los parámetros para nuestra conexión:
En verde, están los comentarios que documentan nuestro código. Ahora vamos a construir nuestro comando de la siguiente forma:
La forma general de la instrucción DELETE es la siguiente: DELETE * FROM nombre de la tabla. tblReales es la tabla de la que queremos borrar los datos. Esa tabla contiene la siguiente información:
Vamos entonces a ejecutar nuestro código para confirmar que funciona, como saben lo podemos hacer paso a paso con F8 o ejecutarla en un solo paso. Yo lo voy a hacer en un solo paso y vamos a verificar de nuevo que la tabla este limpia en Ms Access:
Como pueden ver, nuestra tabla esta limpia, sin datos. Este ejercicio es de sumo cuidado, pues si lo que quieren es borrar un subconjunto de los datos contenidos en la tabla, deben incluir la clausula WHERE. En otro post veremos como usarla y por supuesto construiremos una macro para cargar los datos en la misma tabla.
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 borrar_datos() | |
Dim cnn As New ADODB.Connection | |
Dim cmd As New ADODB.Command | |
cnn.Provider = "Microsoft.ACE.OLEDB.12.0" 'Este es el proveedor para conectarnos a Access | |
'En caso de que nos quisieramos conectar a SQL Server, debemos utilizar el proveedor adecuado | |
'En la siguiente instrucción le indicamos al programa la ruta donde esta | |
'la base de datos y el nombre de la misma | |
cnn.Properties("Data Source") = "C:\Users\edualzja\Documents\Gastos Gestionables MEX.accdb" | |
'Dejamos el password en blanco, asi funciona por defecto en access | |
'en otras bases deberemos especificar el usuario y la contraseña | |
cnn.Properties("Jet OLEDB:Database Password") = "" | |
'Por último abrimos la conexión | |
cnn.Open | |
With cmd | |
.ActiveConnection = cnn 'esta es la conexión que creamos en el paso anterior | |
.CommandText = "DELETE * FROM tblReales" 'esta es la instruccion SQL para borrar | |
.CommandType = adCmdText | |
.Execute 'Esta es la instrucción para ejecutar el comando | |
End With | |
End Sub |
Espero que les sea de gran ayuda.
El provider para SQL Server es Provider=SQLOLEDB
ResponderBorrar