Tutorial Oracle Froms Developer
Tutorial Oracle Froms Developer
Tutorial Oracle Froms Developer
Vamos a hacer un primer formulario que nos va a permitir introducir nuevos alumnos en la base
de datos, además de poder consultar, modificar y borrar los que ya existen. Para ello
realizaremos una serie de pasos:
Lo primero que nos saldrá será una pantalla de bienvenida con diversas opciones, nosotros
escogeremos Utilizar el Asistente de Bloques de Datos y le damos al botón Aceptar.
Nos sale otra bienvenida, la ignoramos y pulsamos el botón Siguiente, donde nos preguntará el
tipo de nuestro bloque de datos, nosotros utilizaremos siempre Tabla o Vista, pulsamos
Siguiente
Ahora nos pedirá la tabla o vista que queremos utilizar, para seleccionarla le damos al botón
examinar, en este momento nos pedirá que nos conectemos a la base de datos,
para ello metemos nuestro usuario, contraseña y en Base de Datos el alias que hemos creado en
la fase de instalación (casa para la base de datos local, ugr para la base de datos de la escuela y si
estamos en las aulas de prácticas la dejamos en blanco). Por ejemplo:
Si nos hemos identificado correctamente nos saldrá una lista con las tablas y vistas del usuario
con el que nos hemos conectado, seleccionamos la tabla Persona y pulsamos Aceptar. En la
columna de la izquierda tenemos los atributos de la tabla seleccionada y en la de la derecha los
atributos que queremos utiliza. Inicialmente la columna de la derecha está vacía, así que nos
llevamos todos los atributos a la columna de la derecha y le damos al botón Terminar.
Ahora nos preguntará el Prompt (que es la cadena que sale en el formulario), el ancho y el alto
para cada atributo. Dejamos los valores de ancho y alto que nos salen excepto para PID que le
ponemos un ancho de 20 y en la parte del Prompt, cambiamos "Lugarnacimiento" por "Lugar de
Nacimiento" y "Fechanacimiento" por "Fecha de Nacimiento" y le damos al botón Terminar.
Si no nos aparecen en algún momento, tanto el Navegador de Objetos como el Editor de Diseño,
siempre los podemos llamar desde el menú Herramientas. Dentro del editor de diseño vamos a
cambiar el prompt de "Apellido1" por "Primer Apellido" y "Apellido2" por "Segundo Apellido".
También cambiaremos el tamaño de la entrada del PID, que es demasiado grande para almacenar
tan sólo un número. Podemos hacer todos los cambios que consideremos necesarios en el diseño
para que se quede a nuestro gusto. (Ten en cuenta que para deshacer se usan las teclas CTRL+Z)
Podemos observar que cuando seleccionamos algo en el editor de diseño cambia la posición en
el Navegador de objetos, de forma que se va al elemento seleccionado. Si en el editor de diseño
hacemos doble click sobre cualquier elemento nos saldrá la Paleta de Propiedades de dicho
elemento. La paleta de propiedades de un elemento es, como su nombre indica, las distintas
propiedades que puede tener un elemento y que ya iremos viendo poco a poco.
Ahora vamos a ejecutar nuestro formulario, para ello pulsamos el icono del semáforo verde
(aparece tanto en el editor de diseño como en el navegador de objetos o en el menú, Programa-
>Ejecutar Pantalla->Cliente/Servidor). Lo que hace es llamar al Oracle Forms Runtime que se
encarga de ejecutar el formulario.
Los distintos botones de Oracle Forms Runtime que queremos destacar son:
Guardar: Este botón nos permite almacenar las modificaciones hechas en un registro, las
nuevas tuplas creadas y las entradas eliminadas. Es como un commit en la base de datos.
Salir: Con este botón nos salimos de la ejecución del formulario.
Ejecutar consulta: Con este botón ejecutamos una consulta sobre la base de datos en
función del contenido del formulario, si no tienen ningún valor, nos permite consultar todos
los registros.
Introducir consulta: Nos permite introducir una consulta para traernos aquellas tuplas
de la base de datos que cumplan una determinada condición.
Bloque anterior: Sirve para irnos al anterior bloque de datos, cuando hay más de uno.
Registro anterior: Nos permite irnos al anterior registro, cuando hay más de uno.
Registro siguiente: Sirve para irnos al siguiente registro, cuando hay más de uno.
Bloque siguiente: Nos permite irnos al siguiente bloque de datos, cuando hay más de
uno.
Insertar registro: Este botón sirve para añadir un nuevo registro a la tabla.
Suprimir registro: Con este botón podemos borrar el registro que se muestra.
Prueba a darle al botón de Ejecutar Consulta, muévete por los registros, crea uno nuevo,
modifica alguno de los anteriormente creados y borra el último que hayas creado. Para ver que
los cambios se producen en la base de datos, haz consultas sobre la tabla personas desde SQL
Plus
Ya sólo nos hace falta guardar el formulario para poder utilizarlo en un futuro, para ello le
damos a la opción del menú Fichero->Guardar y le damos de nombre, por ejemplo, persona.fmb.
Ten en cuenta que si lo guardas en la unidad C en el aula de prácticas no podrás reutilizar este
formulario.
Si modificas el valor del atributo Sexo de cualquier registro poniendo, por ejemplo, una X y le
damos al botón de guardar. En la barra de estado (abajo) de Oracle Forms Runtime nos saldrá un
error diciendo que Oracle no puede actualizar el registro, eso es debido a que es campo sólo
puede tomar dos valores H o M, pues al crear la base de datos forzamos mediante la
cláusula CHECK IN que así fuera. Para evitar problemas, ya que puede que el usuario no sepa
quw valores son los permitidos, vamos a utilizar una lista desplegable para este atributo.
Para ello, en el navegador de objetos nos vamos al bloque de datos Persona y de ahí al elemento
Sexo, lo seleccionamos con el ratón y le damos al botón derecho, del menú contextual que nos
aparece seleccionamos Paleta de Propiedades (Otra forma de acceder a la Paleta de Propiedades
del elemento Sexo, es pulsándolo dos veces en el Editor de Diseño como ya sabes).
Cambiaremos el atributo Tipo de Elemento a Elemento de Lista y el
atributo Correspondencia con otros valores lo ponemos a M(sería el valor por defecto).
Ahora cambiamos la propiedad Elementos de la lista donde nos saldrá una subventana con dos
partes, en la primera será cada uno de los valores de la lista que se muestran, y el campo de abajo
para cada uno de esos valores que se muestran los valores que se almacenan en la base de datos,
de esta forma, en la lista de valores que se muestran pondremos Hombre y Mujer y los valores
correspondientes que se guardarán serán, lógicamente, H y M
Nos preguntará que cómo queremos crear el nuevo bloque de datos, le decimos que queremos
utilizar el asistente de bloques de datos
Escogeremos la tabla Alumno y nos quedaremos con todos sus atributos, después de pulsar
Siguiente nos aparecerá una ventana donde crear la relación maestro-detalle. Le daremos al
botón Crear Relación (el tipo de la relación será basada en una condición de unión),
escogeremos la tabla Persona (la única que nos parece en la lista) y le damos a Aceptar. Como
elemento detalle y como elemento maestro escogeremos el atributo PID. Marcamos la casilla de
Unir Automáticamente bloques de datos.
Le damos a Terminar para iniciar el asistente de diseño. Los atributos que se mostrarán serán
todos menos el PID, puesto que éste ya se nos muestra en la tabla de persona. En el tamaño de
cada campo, modificamos el de la nota de acceso, le ponemos un tamaño de 20. Le daremos al
botón Terminar.
Una vez terminado el asistente de diseño, desde el editor de diseño adecuaremos el aspecto
visual del formulario a nuestro gusto. Cuando lo ejecutemos nos daremos cuenta que los campos
de los alumnos sólo se nos rellenarán cuando estemos moviéndonos por una persona que sea un
alumno. Esto tiene el inconveniente de que nos muestra también aquellas personas que no son
alumnos (o sea, los profesores).
Nota: Para que nos muestre tan sólo a los alumnos, vamos a restringir los elementos que nos
traemos en el bloque de datos Persona. Supongamos que en SQL sólo queremos obtener aquellas
personas que son alumnos, una forma de hacerlo es con la siguiente consulta:
SELECT * FROM persona WHERE pid IN (SELECT pid FROM alumno)
Si nos vamos a la Paleta de Propiedades del bloque de datos Persona, en el apartado Base de
Datos, encontramos la propiedad Cláusula WHERE que inicialmente está vacía. Si la rellenamos
con pid IN (SELECT pid FROM alumno), al ejecutar de nuevo el formulario sólo nos mostrará a
los alumnos.
¡Qué no se te olvide guardarlo!
EJERCICIO: Hacer un formulario maestro detalle para los profesores de forma análoga
a como hemos realizado el ejemplo anterior. Será más fácil si no modificas el diseño
hasta que no tienes los bloques maestro y detalle.
Nota: Si queremos que cuando ejecutemos un formulario no tengamos que pulsar el botón
Ejecutar Consulta para empezar a visualizar los registros vamos a hacer que lo haga de forma
automática cuando cree el formulario. Para ello, en el navegador de objetos, nos vamos
a Disparadores y pulsamos el botón de crear , seleccionamos el disparador WHEN-NEW-
FORM-INSTANCE y pulsamos el botón de Aceptar.
2 Formulario Matrícula
Vamos a hacer un formulario maestro-detalle, donde el maestro será la tabla Matrícula y el
detalle la tabla DetalleMatrícula. En este formulario podremos borrar/añadir asignaturas a una
matrícula. Vamos a hacerlo de forma similiar a como hemos realizado el anterior ejemplo, pero
con dos pequeñas diferencias.
En el asitente de diseño, para el bloque maestro, escogemos un estilo de diseño Pantalla,
pulsamos Siguiente y al marco le damos el título de Matrícula, después pulsamos Terminar.
La segunda diferencia, es que en el asistente de diseño,para el bloque detalle (que es la
tabla DetalleMatricula), escogemos un estilo de diseño Tabular, pulsamos Siguiente y al marco
le damos el título de Asignaturas, los registros visualizado serán 10 y marcaramos la casilla de
Visualizar Barra de Desplazamiento, después pulsamos Terminar.
De esta forma y retocando un poco con el editor de diseño debería quedar algo parecido a:
Este formulario queda bastanta poco intuitivo y dificil de utilizar, para ello vamos a realizar
varios cambios, el primero será realizar una lista estática para el campo Tipo, de forma que
aparezcan las opciones: Ordinaria, Libre, Personal Universidad y que, en realidad, en la base de
datos se almacene los valores O, L,U (respectivamente). Y el número de plazos, otra lista, que
tome los valores 1 ó 2.
La siguiente mejora será utilizar una lista desplegable como las usadas en Tipo y en Número de
plazos, para las asignaturas, de forma que podamos ver en la lista el nombre de la asignatura y
no haga falta conocer el nombre de todas las asignaturas. Observa que, con los conocimientos
que tenemos, para cada asignatura que se añada a la base de datos tendríamos que cambiar el
diseño de nuestro formulario, de forma que incluyese la nueva asignatura como una opción más
de la lista. Esto no es realista es un entorno normal, es decir, no se cambia la aplicación cuando
se cambia la base de datos, no tendría sentido. Para esto vamos a realizar listas dinámicas a
contraposición de las usadas hasta hora que son estáticas. Las listas dinámicas se construirán
cada vez que ejecutemos el formulario a partir de los valores almacenados en la base de datos.
Construiremos una lista dinámica para la parte de asignaturas a partir de la tabla Asignaturas.
Para ello, lo primero que tenemos que hacer es definir el campo Nombre de DetalleMatrícula
como Elemento de Lista. Usaremos un valor por defecto conocido y rellenaremos la lista con un
sólo valor (esto es para que forms developer no nos diga que la lista está mal), para esto
podemos usar el valor por defecto Base de Datos (Correspondencia con otros valores), y en la
lista podemos añadir el elemento Base de Datos y que almacene Base de Datos en la base de
datos.
Ya tenemos una lista estática que si compilamos el formulario no nos sirve de nada, para hacerla
dinámica realizaremos los siguientes pasos:
1. Escribir una consulta que obtenga las distintas asignaturas de la base de datos con las que
construiremos la lista
2. Escribir un prodecimiento PL/SQL que se encargue de rellenar la lista con los datos
obtenidos en la anterior consulta
3. Llamar al procedimiento PL/SQL para que rellene la lista cuando se utilice el formulario
Para crear la consulta que nos permita obtener los datos de las consultas, en el Navegador de
Objetos, seleccionaremos Grupo de Registros (una consulta, en realidad) y le damos al botón
de crear , introduciendo el siguiente texto:
SELECT nombre, nombre FROM Asignatura order by 1
Con esta consulta, obtendremos el valor que se mostrará en la lista (nombre) y el valor
correspondiente que se alamcenará en la base de datos (nombre) ordenados de forma alfabética.
A la nueva consulta creada, le damos el nombre de asignaturas (por ejemplo, usando la paleta de
propiedades -> nombre)
Ahora crearemos un procedimiento PL/SQL para rellenar una lista a partir de los datos de una
consulta. Como este proceso es probable que lo utilicemos más de una vez en nuestros
formularios lo vamos a hacer reutilizable, en forma de biblioteca. Para ello, , en el Navegador de
Objetos, marcaremos Bibliotecas PL/SQL y le damos al botón de crear , ahí
seleccionaremos Unidades de Programa y le volvemos a dar al botón de crear .
Introducimos el nombre de la Unidad de Programa, que será llena_listas y le damos al
botón Aceptar.
En el editor PL/SQL que nos aparece introduciremos el siguiente código:
PROCEDURE llena_listas (lista in VARCHAR2, grupo in VARCHAR2) IS
verror NUMBER :=0;
errorRellenoLista exception;
BEGIN
verror:= Populate_Group(grupo);
if verror = 0 then
Clear_List(lista); /*Elimina el contenido de la lista*/
Populate_List(lista,grupo);
elsif verror = 1403 then /*No se encuentra ningún */
/*elemento en la lista*/
null; /*no se hace nada*/
else
raise errorRellenoLista;
end if;
EXCEPTION
when errorRellenoLista then
message ('Excepción: no se puede rellenar la '||lista||
' con la consulta de '||grupo||'.');
END;
Pulsamos Compilar y si no hay ningún problema, le damos a Cerrar
Nos vamos a la biblioteca creada y le damos al botón de guardar , la guardamos como
MiBiblioteca, recuerda el sitio donde la guardas, (por ejemplo, en u:/bd2/). Seleccionamos la
biblioteca y la compilamos (en el menú, nos vamos a Programa->Compilar Selección). Ahorá
sólo nos queda añadir la biblioteca a nuestro formulario y, en general, a cualquier formulario que
deseemos crear, para esto, dentro de nuestro formulario nos vamos dentro del Navegador de
Objetos a Bibliotecas Incorporadas(o Bibliotecas Asociadas, dependiendo de la versión de
Developer) y pulsamos el botón de crear . Examinamos y seleccionamos la biblioteca y le
damos a Incorporar.
Nos preguntará si suprimir la ruta para que la aplicación sea portable, le decimos que No. Esto
tiene el problema que si la biblioteca no está en la ruta especificada, el formulario no funcionará.
Esto es importante a tener en cuenta a la hora de detallar la instalación de un formulario.
Ya sólo nos queda llamar al procedimiento PL/SQL para que rellene la lista con los datos de la
consulta cuando se utilice el formulario. Para esto, en el navegador de objetos, nos vamos
a Disparadores y pulsamos el botón de crear , seleccionamos el disparador WHEN-NEW-
FORM-INSTANCE y pulsamos el botón de Aceptar. Y añadimos el siguiente código:
llena_listas('DetalleMatricula.nombre','asignaturas');
si además queremos que nos salga el formulario inicializado, sería:
BEGIN
llena_listas('DetalleMatricula.nombre','asignaturas');
execute_query;
END;
Observa que la llamada al procedimiento llena_listas de MiBiblioteca tiene dos párametros, el
primero el bloque datos y elemento a rellenar, el segundo es la consulta que se va a utilizar para
ello. Le damos a Compilar y Cerrar
En la siguiente ventana del asistente, nos muestra la forma en que se van a mostrar los valores en
el bloque LOV, cambiamos el ancho de las columnas (ver imagen), y en la fila del PID, en la
columna Valor de Retorno ponemos MATRICULA.IDALUMNO (o en lugar de escribirlo,
podemos seleccionarlo pulsando el botón Buscar elemento de retorno...), ésto lo que hace es
devolver el elemento PID del bloque LOV en el campo Matricula.IDAlumno. Si quisiéramos
devolver más valores utilizaríamos las casillas correspondientes en la columna Valor de
retorno. Dejamos activado la casilla de Ajustar automáticamente el tamaño de las columnas y
pulsamos Siguiente.
Le damos de título Selección de Alumno, dejando el resto de valores por defecto, pulsamos dos
veces Siguiente.
Finalmente desplazamos Matricula.IDAlumno a la columna de la derecha y le damos al
botón Terminar.
Cuando ejecutemos el formulario, al irnos a la casilla de Alumno, nos saldrá en la barra de
estado (abajo) de Oracle Forms Runtime la anotación Lista de Valores, pulsamos F9 y nos
aparecerá el bloque LOV.
4 Ventanas y lienzos
Los Lienzos son elementos del diseño sobre el que se sitúan los otros elementos de nuestro
formulario. Una ventana actúa como un visor sobre el lienzo permitiendo desplazarse por su
contenido. Cuando ejecutamos un formulario se dispone una ventana principal que no dispone de
lienzos, mediante la cual se visualiza el resto de las ventanas que si contendrán lienzos. Podemos
distinguir distintos tipos de lienzos:
1. Contenido: Elemento contenedor de otros. Es el que se crea por defecto con un formulario
nuevo y una ventana debe tener al menos un lienzo de este tipo, ya que es un lienzo
contenedor de los elementos del formulario o de otros lienzos
2. Apilado: Un lienzo que se muestra encima de otros.
3. Tabular: Lienzo para poder hacer pestañas en nuestro formulario.
4. Barra de Herramientas: Contiene botones que se muestran en forma vertical u horizontal
en la ventana.
Como ya hemos visto de forma implícita el uso de lienzos contenedores y los lienzos apilados se
pueden simular poniendo los elementos de distintos bloques de datos en el mismo lienzo, vamos
a ver los lienzos tabulares y las barras de herramientas. También veremos un tipo especial de
ventanas que son las Alertas y que nos serán muy útiles.
4.1 Lienzos tabulares
Vamos a realizar un formulario de Matriculación donde en una parte tengamos los datos de la
matrícula y abajo tengamos dos pestañas: una con las asignaturas asociadas a la matrícula y otra
con los pagos de la matrícula. De esta forma tendremos un bloque de datos Maestro (Matrícula)
y dos bloques Detalle (Asignaturas y Pagos), cada uno en una pestaña.
Abrid Form Builder (empezamos sin ningún formulario) y mediante el Asistente creamos
nuestro bloque de datos asociado a la tabla matrícula, como ya hicimos en el aparatado 2,
seleccionando todos sus atributos. Fíjate que en el asistente de diseño, después de la bienvenida
aparece la ventana Tipo de Lienzo y que, por defecto, tiene un tipo de lienzo contenedor.
Visualizad todos los campos, en formato Pantalla, que el título del marco sea Matrícula, se vea
un sólo registro y tenga la barra de desplazamiento.
Verifica que funciona y guárdalo, por ejemplo, como Matriculacion2.fmb. Observa que
moviéndonos con la barra de desplazamiento nos vamos moviendo por las distintas tuplas de la
tabla Matrícula.
Ahora vamos a crear la primera pestaña para las asignaturas. Vamos a crear el bloque detalle
basado en la tabla DetalleMatrícula (recuerda que para crear un bloque detalle, debes seleccionar
primero el bloque de datos maestro y darle al botón de crear), seleccionando todos sus campos.
En el Asistente de Diseño, en la ventana de Tipo de Lienzo, vamos a asignarle un lienzo nuevo
(Nuevo Lienzo) que será de tipo Tabular y una Nueva Página con Pestaña.
Visualizaremos sólamente el campo Nombre (de una asignatura) y elegiremos una presentación
tabular visualizando 5 registros y la barra de desplazamiento. En el navegador de objetos
buscamos en Lienzos el nuevo lienzo tabular que hemos creado (puedes ver el nombre en el
editor de diseño) y, dentro de éste, en Páginas con Pestaña le cambiamos el nombre a la
primera que hay, que tendrá un nombre parecido a PAGE5 (puedes hacerlo en la Paleta de
Propiedades cambiando el atributo Etiqueta por el valor Asignaturas).
Al ejecutar el formulario, sólo verás la parte de matrícula, no importa, luego lo cambiaremos.
Ahora vamos a crear la segunda pestaña para el bloque detalle Pagos seleccionando todos sus
campos. Ten cuidado, al crear la relación, en este caso ya que al tener dos bloques de datos el
asistente se puede confundir. Para evitarlo, antes de pulsar Crear Relacióndesactivamos Unir
automáticamente bloques de datos, hacemos la relación basada en una condición de unión
sobre el campo IDMatricula de Matricula y el campo IDMatricula de Pago.
Ahora vamos a redimensionar los lienzos para que se vean al ejecutar el formulario. Para ello, en
el navegador de objetos, nos vamos a los lienzos y seleccionamos el lienzo Tabular (el segundo),
abrimos la Paleta de Propiedades y cambiamos la propiedad Posición Y en la Puerta de
Vista a 90 y la propiedad Bisel a Ninguno
De esta forma colocaremos el lienzo con las pestañas debajo de los datos de la matrícula. Ten en
cuenta en redimensionar el lienzo de la Matrícula (si no es lo suficientemente grande) para que
quepa debajo el lienzo tabular. Poniendo Bisel a ninguno, lo que hacemos es quitar una línea que
separa los dos lienzos. Ejecutamos, el lienzo, corregimos y guardamos el formulario.
Si en el navegador de objetos, el bloque de datos Maestro (Matricula) está después de un bloque
de datos detalle, no se visualizará correctamente.
Si se quiere ver en el editor de diseño los dos lienzos en lugar de tener dos editores de diseño
(uno por lienzo), en el editor de diseño del bloque maestro vete a la opción Ver del menú y de
ahí a Vistas Apiladas ..., seleccionamos el lienzo tabular y le damos al botón Aceptar.
Para cambiar el título de la ventana, en le navegador de objetos, vete a Ventanas, selecciona la
que hay y abre su paleta de propiedades. Cambia la propiedad Título a, por
ejemplo, Matriculación.
4.2 Ventanas de Avisos (Alertas)
Developer tiene un tipo especial de ventanas para enviar avisos al usuario. Básicamente mostrará
un mensaje y puede tener hasta tres botones (por ejemplo, "Si" "No" y "Cancelar"). Hay tres
tipos de estilos de alerta: Parar, Precaución y Nota.
Vamos a crear una alerta que nos muestre un mensaje de bienvenida cuando se ejecute el
formulario de Matriculación, para ello tendremos que tenerlo abierto previamente con Forms
Builder. En el Navegador de Objetos, seleccionamos Alertas y pulsamos el botón de crear .
Abrimos la paleta de propiedades de la alerta creada.
A Nombre le damos Bienvenida
A Título le damos Bienvenido
A Mensaje le damos Bienvenido al proceso de matriculación.
A Etiqueta de Botón 1 escribimos Aceptar
A Etiqueta de Botón 2 y a Etiqueta de Botón 3 lo dejamos en blanco
Lo primero será crear un lienzo, para ello, en el navegador de objetos vete a lienzos y pulsa el
botón de crear . Abre la paleta de propiedades del lienzo creado y cambia las siguientes
propiedades:
A Nombre le damos Botones
A Tipo de Lienzo le damos Barra de Herramientas Horizontal
A Ventana le damos WINDOWS1 (o la que tengas si tienes otra, pero sólo deberías tener
una)
A Altura le escribimos 30
Abrimos el editor de diseño, seleccionando previamente el lienzo creado. Mediante el botón para
crear botones , le añadimos los cuatro botones para que tengan un aspecto parecido a lo que
estamos buscando. Inicialmente, tendrá este aspecto:
Fíjate que los botones se deben de crear como elementos del bloque de datos Matricula.
Debiendo quedar algo como:
Mediante la paleta de propiedades de cada botón, le cambiamos la propiedad Etiqueta a los
valores <,>, Guardar y Cerrar y la propiedad Nombre a los
valores anterior,posterior, salvay salida.
Ahora mismo si ejecutamos el formulario, nos aparecerá la barra de herramientas pero los
botones no hacen nada. Para el botón anterior creamos un nuevo disparador del tipo WHEN-
BUTTON-PRESSED, con el siguiente código:
do_key('up');
e igualmente para el botón posterior, pero con el código:
do_key('down');
para el botón salva, el código es:
commit_form;
Al ejecutar el formulario comprobarás que los botones ya funcionan (con excepción al de
cerrar), el código del disparador WHEN-BUTTON-PRESSED, se ejecuta (como dice su
nombre) cuando se pulsa un botón. Ahora nos quedan el otro botón que es un poco más
complicados. En el botón de salir, usaremos una alerta que pregunte si se quieren almacenar los
cambios antes de salir y que tenga tres botones, "Si" "No" y "Cancelar". Dependiendo del botón
que se pulse se guardarán los resultados y se cerrará el formulario, no se guardarán los cambios y
saldrá del formulario y no hará nada (respectivamente). Para ello, lo primero, será crear una
Alerta con las siguientes propiedades:
A Nombre le damos Salir
A Título le damos Salir
A Mensaje le damos ¿Quieres almacenar los cambios antes de salir?
A Estilo de Alerta le damos Precaución
A Etiqueta de Botón 1 escribimos Sí
A Etiqueta de Botón 2 escribimos No
A Etiqueta de Botón 1 escribimos Cancelar
Para terminar al botón Salida para su disparador WHEN-BUTTON-PRESSED le asignamos el
siguiente código:
DECLARE
boton NUMBER;
BEGIN
/*Preguntamos si guardar*/
boton := show_alert('salir');
A Nombre le damos Pagado
A Tipo de Dato le damos Number
A Modo de Cálculo le escogemos Fórmula
En Fórmula escribimos :pago.abonado*:pago.cantidad
En Elemento de Base de datos elegimos No
A Lienzo le asignamos el lienzo tabular (el segundo creado)
En Página con Pestaña le damos la página con la pestaña de pagos (la segunda creada)
A Prompt le damos el valor Pagado
En Justificación del Prompt nos quedamos con Centro
En Borde del anexo del Prompt escogemos Superior
En el editor de diseño colocamos mejor el campo creado (como son dos pagos, se verán dos
campos de texto). Si ejecutamos el formulario comprobaremos que funciona, basta con cambiar
el valor de Abonado.
En el editor de diseño creamos dos nuevos campos de texto , tal y como muestra la figura.
Si los campos de texto creados nos aparecen en el bloque de datos Pago (¡Nos saldrán dobles!),
no hay ningún problema, pero si nos salen en el bloque de datos Matrícula (como en el ejemplo),
los arrastraremos hasta el bloque de datos Pago que es donde queremos hacer los cálculos.
Al campo situado más a la izquierda, mediante la paleta de propiedades, le modificamos los
siguiente atributos:
A Nombre le damos Total
A Tipo de Dato le damos Number
A Modo de Cálculo le escogemos Total
En Función totalizar seleccionamos Sum
En Bloque de Total elegimos Pago
En Elemento de Total ponemos Cantidad
En Número de elementos visualizados escribimos 1
En Elemento de Base de datos elegimos No
A Prompt le damos el valor Precio Total Matrícula
En Grosor de la Fuente del Prompt nos quedamos con Negrita
Al campo situado más a la derecha, mediante la paleta de propiedades, le modificamos los
siguiente atributos:
A Nombre le damos TotalPagado
A Tipo de Dato le damos Number
A Modo de Cálculo le escogemos Total
En Función totalizar seleccionamos Sum
En Bloque de Total elegimos Pago
En Elemento de Total ponemos Pagado
En Número de elementos visualizados escribimos 1
En Elemento de Base de datos elegimos No
A Prompt le damos el valor Total Pagado
En Grosor de la Fuente del Prompt nos quedamos con Negrita
Nota:Estos campos no se almacenan datos en la base de datos (no existe un campo donde
hacerlo)
6 Menús
Cualquier formulario tiene un menú por defecto que permite ejecutar las órdenes habituales,
algunas de ellas las vimos al principio cuando ejecutamos nuestro primer formulario. El menú
por defecto no se puede modificar, pero si se puede cambiar por un menú personalizado, para
ello, es conveniente partir de un menú previamente definido, nosotros usaremosmenudef.mmb.
Empezamos con el formulario para matriculaciones con el que hemos estado trabajando. En el
navegador de objetos, seleccionamos Menús y pulsamos el botón de abrir , seleccionamos el
fichero menudef.mmb (ten en cuenta en la ruta donde lo has guardado). Seleccionamos el menú
incorporado y pulsando el botón derecho del ratón, nos vamos al Editor de Menús.
Lo primero que haremos para familiarizarnos con el editor de menús es traducir las entradas del
inglés al castellano, quedando con el siguiente aspecto:
Lo siguiente que vamos a hacer en crear una opción del menú que llame al formulario de
alumnos. Para ello vamos a crear una entrada nueva en la opción de menú Consulta. Debajo de
Sig. Grupo, vamos a crear un separador, para ello nos vamos a Consulta->Sig.Grupo y pulsamos
el botón de Crear debajo . Al nuevo elemento del menú le cambiamos las siguiente
propiedades: Nombre: SeparadorForms, Etiqueta: SeparadorForms, Tipo de Elemento de
Menú: Separador.
Debajo del separador creado creamos la entrada Formularios pulsando el botón de Crear
debajo . Al nuevo elemento le damos: Nombre: Formularios, Etiqueta: Formularios, Tipo de
Elemento de Menú: Normal.
Para ejecutar el formulario Alumnos cuando se elija la opción Alumnos del menú, tendremos
que modificar su propiedad Código del Elemento de Menú con el siguiente código:
DECLARE
parametros Paramlist;
BEGIN
/*Creamos la lista de parametros vacía*/
parametros := Create_Parameter_List('nada');
Si ejecutamos el formulario creado nos mostrará la persona con PID igual a 1 (recuerda el valor
inicial del parámetro). Cerramos el formulario y abrimos el formulario matrícula, en éste
formulario vamos a añadir un botón nuevo en la barra de herramientas que nos va a servir para
abrir el formulario AlumnoP.fmb con el alumno del que estamos visualizando su matrícula. Para
ello, abrimos la barra de herramientas en el Editor de diseño y le añadimos un botón ,
redimensionamos los que tenemos para que quepa correctamente. Abrimos la paleta de
propiedades del botón creado y ponemos Alumno en las propiedades Nombre y Etiqueta.
Ya tenemos el nuevo botón que ahora mismo no hace nada, para que abra el formulario
AlumnoP, le vamos a añadir un disparador del tipo WHEN-BUTTON-PRESSED con el
siguiente código:
DECLARE
parametros Paramlist;
BEGIN
/*Creamos la lista de parámetros*/
parametros := Create_Parameter_List('Param');