Está en la página 1de 9

MACROS COMO TRIGGER1

Antes de empezar debo aclarar que este artículo sólo es


aplicable para Access 2010. El sistema que intentaré
explicar a través de este ejemplo se basa en una innovación
(tímida, desde mi punto de vista) que aparece sólo en dicha
versión y que, lamentablemente, no se encuentra disponible
en versiones anteriores de Access (por extensión imagino
que la versión 2013, como mínimo, tendrá lo mismo, pero
eso ya no lo sé).

Digo “tímida” porque sólo se puede aplicar con determinadas acciones de macro y, también
lamentablemente, no se puede utilizar (aún) código VBA.

Y supongo que la pregunta, tras lo de “ah, ¿sólo sirve para 2010?”, es: “¿Y qué d...blos es un
“trigger”?

De manera coloquial (pero creo que entendible) podemos decir que un trigger es un
capturador. Cuando realizamos determinadas operaciones/cambios sobre los registros de una
tabla podemos establecer, para esas operaciones/cambios, una serie de “controles”, en función
del tipo de evento que queramos manipular, lo que nos permiten realizar una “supervisión” de
lo que está ocurriendo en la tabla.

Vayamos a una “situación conocida” (o debería serlo si más o menos “controlamos” Access):
tenemos un formulario basado en los datos de una tabla/consulta. Sabemos que el formulario
o los campos del formulario tienen asociado todo un elenco de eventos, que podemos
manipular a través de macros o de código VBA. Sabemos, por ejemplo, que si utilizamos el
evento “Después de actualizar” de un campo podemos realizar una serie de comprobaciones
sobre el valor introducido.

OK. Hasta aquí bien, espero.

Sabemos también que ese “control” no es posible si operamos directamente sobre la tabla. No
disponemos de eventos asociados a la tabla ni a los campos de la tabla.

Pues en la versión 2010, para determinados “eventos” (limitados, eso sí), nos percatamos de
que sí tenemos unas opciones disponibles que pueden ser programadas a través de macros-
objeto, y que operarán siempre que se produzca alguna modificación, adición o eliminación de
los datos de la tabla.

¿Qué significa realmente lo anterior? Que esas macros-objeto actúan si, por las características
de nuestra aplicación, operamos directamente con los datos desde la propia tabla o desde un
formulario basado en la misma.

Creo que, más o menos, ya nos hemos “situado un poco”, al menos a nivel teórico.

En este texto sólo veremos algunos ejemplos para que entendáis la operativa del sistema, por
lo que corresponderá a vuestros “cerebros” buscar y analizar nuevas “utilidades” según sean
vuestras necesidades.

Mi recomendación, si os interesa aplicar el sistema, es que probéis y probéis hasta dar con la
solución que os interese, dado que hay acciones que unas macros admiten y otras no, y es
prácticamente imposible indicarlas sin analizar cada acción de macro en profundidad.

1 La BD de ejemplo os la podéis bajar aquí

1
Visítame en http://neckkito.siliconproject.com.ar
Como siempre, no toméis la estructura de las tablas que
vamos a crear como una estructura óptima, sino que en lo
que tenéis que fijaros es en la operativa de cómo “se hacen
las cosas”.

UN POCO MÁS DE TEORÍA: EVENTOS


MANIPULABLES
Vamos a hacer un repaso rápido de los “eventos” que este
sistema nos permite manipular:

• Después de insertar: cuando insertamos un nuevo registro


• Después de actualizar: cuando modificamos los datos de un registro
• Después de eliminar: cuando eliminamos un registro
• Validar eliminación: cuando vamos a eliminar un registro
• Antes del cambio: antes de producirse un cambio en el registro.

Finalmente, tenemos una última opción, que Access denomina “Crear macros con nombre”,
que tienen una operativa un tanto dificultosa hasta que no se le “coge el tranquillo”. Por temas
de extensión no veremos este tipo de macros en este ejemplo. Para ser sincero, por temas de
extensión y porque, en el momento de escribir este artículo, todavía no me lo he podido mirar
en profundidad, por lo que no sería capaz de explicarlas (aún) correctamente 

Vamos pues a “echar una ojeada al tema...”

CREANDO NUESTRA BASE DE DATOS


Vamos a crearnos una base de datos y vamos a incluir los elementos que necesitaremos para
seguir la explicación de este ejemplo.

Así pues, añadiremos una tabla con la siguiente estructura, tabla que llamaremos TDatos.

Añadiremos otra tabla, que llamaremos TClientes:

Además, en esta tabla añadiremos algunos registros. Por ejemplo, yo he introducido los
siguientes:

2
Visítame en http://neckkito.siliconproject.com.ar
ACCIÓN: DESPUÉS DE INSERTAR
¿Qué queremos hacer? Pues el objetivo de este epígrafe es crear una tabla a modo de histórico
de los datos originales esenciales que se creen en la tabla TDatos. Esa tabla nos recogerá la
información que se introdujo la primera vez, independientemente de si después se modifican o
borran los datos.

Para ellos vamos a crearnos una tabla nueva, que llamaremos TControlOriginalesTDatos, con la
siguiente estructura:

Fijaos que no tenemos ninguna clave principal.

Volvamos a situar nuestra tabla TDatos en vista diseño. Si nos fijamos, en la cinta de opciones,
tenemos un grupo denominado “Eventos de campo, registro y tabla” (queda oculto en la
ilustración). Si hacemos clic en el primer botón, “Crear macros de datos” nos aparece un
desplegable con los tipos de acciones que podemos controlar. De esa lista elegimos “Después
de insertar”

Una vez seleccionada dicha opción nos aparecerá el editor de macros. Si nos fijamos, en el
desplegable de acciones de macro, nos aparece una lista limitada de opciones:

3
Visítame en http://neckkito.siliconproject.com.ar
Creamos la macro con la siguiente estructura2:

Guardamos la macro y cerramos.

Si ahora situamos TDatos en vista Hoja de Datos y damos de alta un nuevo registro, si a
continuación abrimos TControlOriginalesTDatos veremos cómo se ha recogido esa información
“histórica” que nos interesaba.

ACCIÓN: DESPUÉS DE ACTUALIZAR


Supongamos que queremos controlar el cambio de nombre de los clientes, de manera que
podamos tener guardada la información de aquellos clientes que han cambiado de nombre en
una tabla diferente, para diversos propósitos.

Vamos a crearnos pues una tabla, que guardaremos como TControlCambiosClientes, que
tendrá la siguiente estructura:
2 Si lo vamos escribiendo veremos como aparece un “chivatillo” (el IntelliSense) que nos va mostrando diferentes opciones. Si
seleccionamos con las flechas la opción que queremos y pulsamos el tabulador se nos escribirá automáticamente el elemento
seleccionado.

4
Visítame en http://neckkito.siliconproject.com.ar
De nuevo fijaos que no existe ninguna clave principal.

Vamos a situar nuestra tabla TClientes en vista diseño y,


como en el epígrafe anterior, vamos a seleccionar el evento
“Después de actualizar”.

Nos creamos la siguiente macro:

Si ahora abrimos en vista Hoja de datos TClientes, cambiamos el nombre del cliente y
cerramos, si a continuación abrimos TControlCambiosClientes veremos cómo nos aparece la
información que nos interesaba.

5
Visítame en http://neckkito.siliconproject.com.ar
ACCIÓN: ANTES DEL CAMBIO
Imaginemos que queremos que en la tabla TDatos, ante
cualquier cambio que se produzca en el importe, se nos
recalcule el importe más el impuesto correspondiente.

Vamos a suponer que el impuesto a aplicar es de un 10%

Situamos TDatos en vista diseño y manipularemos la macro


de datos “Antes del cambio”

Nos vamos a programar una macro según la estructura siguiente:

Si queréis podéis abrir TClientes y crear un nuevo registro o modificar uno existente para ver
los resultados.

ACCIÓN: VALIDAR ELIMINACIÓN


Supongamos que no queremos que se pueda eliminar ningún registro de cliente. En este caso
situamos TClientes en vista diseño y seleccionamos la macro de datos <Validar Eliminación>.
Nos creamos esta macro:

Fijaos que provocamos el error 888. El número me lo he inventado yo. Podríamos haber
utilizado cualquier otro número (os recomiendo que para errores personalizados utilicemos una
numeración a partir del 700). El error muestra un mensaje al usuario y no deja borrar el

6
Visítame en http://neckkito.siliconproject.com.ar
registro.

Así de simple.

Evidentemente podríamos establecer diferentes operaciones


para ver si ese registro se puede borrar o no, y actuar en
consecuencia.

ACCIÓN: DESPUÉS DE ELIMINAR


Vamos a suponer que nos interesa recibir un correo electrónico
cuando se elimine un registro de TDatos.

Situamos TDatos en vista diseño y seleccionamos la macro de datos <Después de eliminar>, y,


simplemente, le creamos esta macro:

MI MACRO NO FUNCIONA. ¿QUÉ PASA?


Como os comentaba el sistema anterior parece maravilloso y, sin embargo, si hacemos
pruebas veremos que nos encontramos ante un sistema bastante cerrado, donde hay cosas
que no se pueden hacer.

Así como en VBA el mismo código, al ejecutarse, nos lanza un mensaje de error si,
efectivamente, se produce algún error, donde se nos da una pista de qué es lo que “no
funciona bien”, en este sistema de macros de datos no salta ningún error. Simplemente
comprobamos que nuestra macro no funciona porque no hace lo que esperábamos que hiciera.

Sin embargo, no hay que desesperarse. En las tablas de sistema se crea una tabla denominada
<USysApplicationLog> que, de alguna manera, nos indica cuál es el error que se ha producido.

Para acceder a esta tabla tenemos dos maneras:

– O bien configuramos el panel de exploración para poder ver las tablas de sistema

7
Visítame en http://neckkito.siliconproject.com.ar
– O bien nos vamos a Menú Archivo → Información → Registro de aplicaciones

Si abrimos esa tabla veremos toda una serie de campos. No es difícil de interpretar, por lo que
no la comentaré. Lo que nos “pica” es la información que se proporciona en el campo
“Description”

PARA FINALIZAR ESTE EJEMPLO


El mundo de las macros es un “nuevo y maravilloso mundo” (nótese la ironía). En este caso,
las macros de datos están aún más limitadas que las macros-objeto “normales”.

Sin embargo, como por ahora no se puede programar con VBA este tipo de “triggers”, pues nos

8
Visítame en http://neckkito.siliconproject.com.ar
debemos contentar con lo que hay.

Tampoco hay que perder de vista que este sistema nos


permite un mayor control, puesto que, como os comentaba
al principio, estas macros actúan siempre que se activen los
eventos que hemos comentado y se esté operando
directamente desde la tabla.

Finalmente este ejemplo lo considero uno de esos ejemplos


hechos para “abrir boca”. La intención, en realidad, es que
sepáis que existe esta utilidad en Access 2010 y que, a
partir de ahí y de los ejemplos “simples” que habéis podido
leer a lo largo de este texto, busquéis información y hagáis
pruebas para intentar conseguir lo necesario para vuestras
aplicaciones.

Espero que todo lo anterior os sea de utilidad.

Un saludo, y...

¡suerte!

9
Visítame en http://neckkito.siliconproject.com.ar

También podría gustarte