domingo, 2 de abril de 2017

Ejecutar la instrucción UPDATE de SQL desde Excel usando VBA

En este segundo post, vamos a ejecutar la instrucción UPDATE que básicamente es para actualizar registros en una base de datos. Sencilla pero poderosa y de mucho cuidado, pues después de ejecutada no la podremos deshacer. Nuevamente, vamos a construir una macro que va a combinar vba y sql.

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 UPDATE es la siguiente: UPDATE nombre tabla SET nombre campo. tblReales es la tabla de la que queremos actualizar los datos, en este caso el campo a actualizar es geografia. Esa tabla contiene la siguiente información:


El campo geografía actualmente tiene contiene el texto: Mexico para todos los registros. Lo que vamos a hacer es actualizarlo por Colombia.

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 actualizada. Este ejercicio es de sumo cuidado, pues si lo que quieren es actualizar 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.

A continuación el código fuente. Espero les sirva:

Código:
Sub actualizar_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 = "UPDATE tblReales SET geografia='Colombia'" 'esta es la instruccion SQL para actualizar
.CommandType = adCmdText
.Execute 'Esta es la instrucción para ejecutar el comando
End With
End Sub
view raw update_sql.vb hosted with ❤ by GitHub

2 comentarios: