Capítulo
8 MACROS. Una macro es
una especie de rutina que puede ser
ejecutada en respuesta a algún evento
que ocurre en el sistema. Por ejemplo,
podemos accionar una rutina cuando una
exclusión de registro estuviera para ser
efectiva y esta rutina puede exigir
confirmación por el usuario. El Access
provee una serie de aciones que serán
ejemplificadas en este texto.
8.1. Creación de una
macro.
Para crear
una macro se selecciona Macros en la
ventana Base de Datos y se acciona el
botón Nueva. Para alterar una
macro se utiliza el botón Diseño
y para ejecutar una macro (en general
para testear) se utiliza el botón Ejecutar.
La ventana para el montaje de una macro
está detallada en la figura 8.1.
FIGURA 8.1. Ventana de
proyecto de Macro.
Esta
ventana muestra una macro constituida de
4 acciones. Esa macro será activada en
un formulario (detallado mas adelante) a
través del accionar de un botón y va a
presentar en la pantalla una ventana tipo
hoja de datos correspondiente a la tabla PADRÓN
DE DEPARTAMENTOS. Como se observa,
para la acción Abrir Tabla tenemos que
especificar 3 parámetros: cual es la
tabla a ser abierta, de que forma ella es
exhibida (hoja de datos), y cual es la
acción del usuario que será admitida
sobre la ventana exhibida (solamente
lectura).
La acción
Abrir Tabla es inmediatamente seguida de
la acción de posicionamiento de la
ventana recién abierta porque deseamos
elegir su dimensión y posición. La
opción Desplazar tamaño especifica la
dimensión (largo y alto) y posición
(derecha, abajo) en relación a la
pantalla; las dos acciones iniciales de
esta macro: Eco y reloj de arena proveen
un control adicional sobre el proceso de
presentación de la tabla. La acción Eco
debe tener el parámetro Eco activo
especificado como siendo no. Esto
indica que eventuales procesos
intermediarios que ocurren durante el
montaje de la tabla en la pantalla no
serán exhibidos. En general no hay
realmente interés en exhibir esos
procesos. Mientras tanto, como esto puede
significar que durante un breve espacio
de tiempo el usuario quedará sin ningún
tipo de respuesta en la pantalla, se
acciona la acción Reloj de arena para
mostrar el icono correspondiente hasta
que la tabla a sea definitivamente
presentada en la pantalla.
Vale
recordar que la ventana de montaje de
macros funciona análogamente a las
ventanas de construcción de tablas.
Podemos redimensionar las columnas,
seleccionar y mover líneas, eliminarlas
y redimensionar sus alturas.
Eventualmente puede ser hasta necesario
incrementar dos columnas adicionales de
nombres de macros y de condiciones. Esto
es hecho vía condiciones y grupos de
macros y es visto en los ejemplos que
siguen.
FIGURA 8.2 Barra de
herramientas de la ventana de diseño de
diseño de Macro.
8.2. Macros para
mostrar tablas, formularios e informes.
A partir
de la tabla PADRÓN DE EMPLEADOS
fue desarrollado anteriormente un
formulario de columna simple. Esa misma
tabla dio origen a un formulario en
formato tabular presentado adelante y que
será utilizado para mostrar algunos
recursos implementables a través de
macros. La construcción de ese
formulario puede ser hecha a través de
un asistente y no será detallado aquí.
La figura 8.3. muestra el formulario en
uso presentando los datos de la tabla en
la forma de columnas. Al frente del
formulario aparece la ventana con la
tabla PADRÓN DE DEPARTAMENTOS
accionada a través del botón deptos
del formulario.
FIGURA 8.3 Formulario
que presenta los datos en forma tabular.
El botón deptos
no es incluido por el asistente generador
de formulario. Él es incorporado por el
proyectista en la ventana de proyecto
vía cuadro de herramientas. Al botón
debe ser atribuido un texto para la
leyenda. Conviene también atribuir un
nombre (interno) al control/botón.
Finalmente
es necesario especificar cual acción el
debe ejecutar cuando fuese picado con el
Mouse. Para eso se especifica el nombre
de la macro con las acciones deseadas en
la propiedad Al hacer clic del
botón. La macro mostrada en el ítem
anterior fue la macro asociada al evento al
hacer clic conforme se puede observar
en la ventana del proyecto
correspondiente en al figura 8.4.
Si el
botón Asistente de controles de
la barra de herramientas estuviera
activado, el proceso será un poco
diferente. En la primera ventana de
diálogo que aparece luego del diseño
del botón de comando, la categoría a
ser seleccionada es Miscelánea y
acción es Ejecutar macro. La
próxima pantalla pide la definición de
la macro que va a ser utilizada para el
control, que en nuestro caso es mostrar PADRÓN
DE DEPARTAMENTOS. En la pantalla
siguiente se debe elegir Texto y digitar
el nombre del botón (correspondiente a
la leyenda) y picar Avanzar. Después se
elige un nombre que va a ser atribuido al
control, para uso interno del Access y
picar Concluir.
FIGURA 8.4 Pantalla de
proyecto del formulario y ventana de
propiedades del botón.
La macro
funciona presentando en la pantalla la
ventana de la tabla PADRÓN DE
DEPARTAMENTOS. La activación
de una ventana se sobrepone a las otras
que por ventura estuvieran activas.
Cualquier ventana puede ser movida,
minimizada, cerrada y redimencionada.
Mientras tanto esto interpone un problema
si cerramos la ventana del formulario sin
cerrar la ventana de la tabla
Efectivamente esta continúa abierta. A
pesar de ella poder ser cerrada
manualmente, se puede forzar su cierre si
la ventana del formulario fuera cerrada.
Para esto
construimos la macro "cerrar
padrón" construida de una acción
de cerrar. La acción tiene dos
parámetros: el tipo de objeto a cerrar
(en nuestro caso la tabla) y el nombre
del objeto.
Esa macro
es especificada en la propiedad /
Evento del formulario que ocurre
cuando él es cerrado (Al Cerrar): Al
cerrar, antes del formulario ser
cerrado ahora es ejecutado a la acción
de cerrar la tabla, es la tabla activa o
no en la pantalla. La figura 8.5 muestra
la macro que fue descripta.
FIGURA 8.5 Estructura
de macro cerrar padrón.
8.3. Macros para
confirmar la exclusión de registros.
En el
formulario anterior también se incluye
una macro para enviar un mensaje de aviso
cuando un registro fuera excluido y
exigir confirmación. Al intentarse
borrar (vía tecla DEL) un registro
seleccionado será mostrado un cuadro de
mensaje con dos botones: si y no conforme
figura 8.6.
FIGURA 8.6 Cuadro de
mensaje del Macro confirmar exclusión.
Esa
ventana de aviso es mostrada a través de
la llamada de función interna Cuadro de
Mensaje ("confirma exclusión";
52,"") donde el primer
parámetro es el mensaje a ser exhibido,
el segundo indica los botones a ser
exhibidos y el tercero es el título del
cuadro de mensaje. La forma exacta de
determinar el segundo parámetro puede
ser vista en el Help correspondiente de
la función. El se constituye en una suma
de valores: 4 para exhibir botones si y
no, 48 para el icono de exclamación es
cero para que el primer botón sea
asumido como patrón. El botón que fuera
accionado determina el resultado que la
función devuelve: 6 para el botón si y
7 para el botón no.
Como la
función retorna un valor optamos en este
formulario por emplear un control tipo
cuadro de texto con función auxiliar de
apenas almacenar el valor resultante de
la función. En la ventana de proyecto
ese control debe ser creado en el
encabezado a la derecha. Él es un
control invisible en la ventana del
formulario por tener la propiedad Visible
posicionada en No. Además de eso, es
obligatorio atribuir un nombre a él pues
el nombre será referenciado en la macro,
en nuestro caso el nombre elegido fue
aux.
La macro
será accionada cuando ocurra el evento Al
excluir del formulario. Ella deberá
realizar dos acciones: mostrar el cuadro
de mensaje (y obtener el resultado de la
llamada de la función) y enseguida debe
testear si el valor resultante determina
o no el cancelamiento de la ejecución.
Como una condición está comprendida y
es necesario incrementar la columna de
condiciones (picar en el botón de la
barra de herramientas el botón
condiciones)en la ventana de la macro
conforme lo detallado en al figura 8.7.
FIGURA 8.7 Ventana de
proyecto de la macro confirmar
exclusión.
La acción
Definir Valor posee dos
parámetros: para donde debe ir el valor
calculado (cuadro de texto aux.) y cuál
es la expresión a ser calculada
(CuadroMsj("eliminar";52;"").
Ejecuta esa acción si pasa el test del
contenido del cuadro aux. en la columna
condición. Si el test da el resultado
verdadero, será ejecutada la acción
especificada en la columna acción. En
caso, que se desee cancelar el evento en
curso, por lo tanto, se utiliza la
acción CancelarEvento.
Construida
la macro y atribuido un nombre a ella
("confirmar exclusión") se
puede incorporar su llamada al evento
correspondiente del formulario. Para eso
se debe abrir la ventana de propiedades
del formulario y especificar el nombre de
la macro en la propiedad/evento. Al
excluir.
Conviene
recordar que es patrón de Access
solicitar confirmación a cada remoción
de registros. Mientras tanto, ese mensaje
puede ser desactivado par todo ambiente
vía menú Herramientas Opción
Modificar/Buscar, activando en
confirmar la opción Cambios en los
registros.
8.4. Macros para
convalidar datos.
El
formulario desarrollado exige que el
usuario digite la sigla del departamento.
Si el no recuerda ese código, puede
inspeccionar la tabla correspondiente
accionando el botón de encabezado. Pero,
de cualquier manera, es siempre él quien
digita el código en cuestión y es
importante que este código se confirme
con algún código del padrón
correspondiente.
Para
garantizar que esto ocurra podemos crear
una macro asociada al cuadro de texto de
la sigla y que será activado
inmediatamente antes de ocurrir la
actualización. La macro debe verificar
si el valor digitado consta en el padrón
correspondiente. Si no consta debe emitir
un mensaje de aviso y cancelar la
actualización. Para que el test pueda
ser hecho es necesario que el control
(cuadro de texto) posea un nombre, en
nuestro caso se le atribuye el nombre
sigla a la propiedad sigla Nombre
del control.
Para
verificar si la información consta de
los otros padrones utilizamos la función
interna Dbúsq. Se debe especificar tres
argumentos tipo texto en la llamada de
esta función:
-
- El nombre del
campo de donde será obtenido el
valor que ella va a retornar
- El nombre de la
tabla donde la búsqueda es
hecha.
- La condición que
debe ser testada y que
posiblemente es hecha sobre otro
campo de la tabla.
En el caso
el test incorporado a la macro está
especificado a continuación. En la
ventana de la macro no es posible ver
todo el texto del test por razones de
espacio.
EsNulo(DBúsq([Nombre
del Departamento];[Padron de
Departamentos];[Sigla del
Departamento]=[sigla]))
Por lo
tanto la función busca la tabla PADRÓN
DE DEPARTAMENTOS. En esta tabla ella
hace la búsqueda sobre la columna [sigla
del departamento] hasta localizar la
primera línea donde el valor sea igual
al contenido del cuadro de texto [sigla].
Esta línea determina el valor en la
columna [nombre del departamento] que
será devuelto como resultado de la
llamada de la función. Si en ninguna
línea el test fuera satisfecho entonces
la búsqueda no tubo suceso y la función
retorna valor nulo.
En la
macro en cuestión estamos apenas
interesados en saber si un valor fue
localizado o no. Realmente no nos
interesa el nombre del departamento en
caso de que localice alguno. De esta
forma, la acción en la macro
correspondiente al verificar si la
función retornó nulo pues, en este
caso, deseamos mostrar un mensaje de
aviso vía acción CuadroDeMensage
seguido de la acción CancelarEvento.
Como son dos acciones a ser ejecutadas en
caso que el texto dé verdadero, debemos
colocar reticencias (...) en la columna
condición correspondiente.
Observar
que para la acción CuadroDeMensage
tenemos que indicar el texto del mensaje,
si queremos o no un aviso sonoro y el
tipo de icono que deba ser mostrado junto
con el mensaje. Finalmente, el nombre de
la macro (validación de la sigla del
departamento) es especificado en la
propiedad Antes de Actualizar del
cuadro de texto de la sigla del
departamento.
FIGURA 8.8 Macro de
validación de la sigla del departamento.
8.5. Macro de
activación inmediata.
Podemos
desear que al abrir la Base de datos en
el menú archivo, se accione una ventana
de formulario denominada pantalla base
donde consten botones que accionan las
principales tareas de este sistema. En el
ejemplo actual, apenas a título de
ilustración, están reunidas las
funciones en torno de la consulta,
entrada de datos y visualización de los
informes. La ventana del formulario está
presentada a continuación. Detalles de
su construcción son presentados en el
próximo ítem.
FIGURA 8.9 Formulario
pantalla base.
Para
accionar esta pantalla creamos una macro
que abre el formulario pantalla base.
Esta macro no presenta novedades. Para
que su activación sea inmediata debemos
atribuirle un nombre patrón al Access
autoexec. La macro está presentada a
continuación.
FIGURA 8.10 Pantalla
proyecto de la macro que abre el
formulario pantalla base.
8.6. Grupo de Macros.
La ventana
/ formulario pantalla base posee una
serie de botones. Básicamente a cada uno
de ellos está asociada a una macro de
única acción que corresponde al abrir
la pantalla, formulario o informe
correspondiente. En nuestro caso
tendríamos que crear 8 macros y
denominar a cada una; esto causaría
cierta confusión en la ventana de la
Base de Datos. Para simplificar podemos
reunir las diversas macros en una única
ventana conforme muestra la figura.
FIGURA 8.11 Grupos de
macros de la pantalla base
Se trata
de una ventana que reúne un grupo de
macros. Para eso fue necesario
incrementar una columna para el nombre de
la macro y emplear nombres mas cortos y
por lo tanto mnemotécnicos. Este nombre
será especificado en la propiedad/evento
Al picar el botón correspondiente
a través de la siguiente sintaxis: nombre
del grupo. Nombre de la macro, por
ejemplo, en el botón empleados se
especifica botones de la pantalla base
abremp. El Access trata de buscar el
nombre de la macro en el grupo y ejecuta
sus acciones hasta encontrar el nombre de
otra macro en la columna de nombres.
El
formulario pantalla base merece algunas
observaciones pues el no se parece a un
formulario común. Esto se debe al echo
de que todos los controles están en el encabezado
del formulario. Para este encabezado
se especificó el color de fondo gris.
Además de eso, las siguientes
propiedades del formulario fueron
especificadas:
Título
pantalla base
Permitir
ediciones no (desactiva Permitir
edición)
Barras de
desplazamiento ninguna (quita barras de
desplazamiento)
Vistas
permitidas formulario (desactiva botón
hoja de datos)
Permitir
filtros no (desactiva botones de
filtros).
|