Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
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
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”.
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
Así pues, añadiremos una tabla con la siguiente estructura, tabla que llamaremos TDatos.
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:
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:
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.
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.
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.
Si queréis podéis abrir TClientes y crear un nuevo registro o modificar uno existente para ver
los resultados.
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.
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.
– 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”
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.
Un saludo, y...
¡suerte!
9
Visítame en http://neckkito.siliconproject.com.ar