tutorial de oracle developer

119
Tutorial de Oracle Developer En este tutorial se explicará la utilización de Oracle Developer para la realización de las prácticas de Bases de Datos 2. Oracle Developer es una herramienta visual para la creación fácil de aplicaciones que trabajen sobre la base de datos Oracle. Dentro de Oracle Developer, distinguiremos dos partes fundamentalmente: 1. Forms Developer: Nos va a permitir construir formularios con los que podremos acceder a la Base de Datos. En dichos formularios podremos hacer consultas, modificaciones, inserciones y borrados sobre elementos de la base de datos. 2. Reports Developer: Nos va a permitir construir informes con los que podremos presentar e imprimir los datos de una forma ordenada y con un formato visualmente agradable. Dentro de este tutorial se distinguen los siguientes apartados: Instalación : En esta sección veremos como instalar la base de datos Oracle y/o la herramienta Oracle Developer en nuestro ordenador personal. Eso no es necesario ya que las prácticas se pueden realizar dentro las prácticas utilizando la partición orag, pero puede ser útil para un mayor conocimiento de las herramientas o para organizarse de forma personalizada. Tutorial Forms Developer : En este tutorial veremos como crear distintos tipos de formularios y con distintas opciones Tutorial Reports Developer : En este tutorial veremos como crear distintos tipos de informes y como conectarlos con los formularios creados con Forms Developer. Preguntas frecuentes : Conjunto de preguntas con sus respectivas respuestas de dudas que suelen aparecer frecuentemente en el uso de Oracle Developer. Si se quiere ampliar conocimientos sobre el uso de Oracle Developer se puede consultar el tutorial de la Granja El Cerdito Valiente , que se ha utilizado en años anteriores y la sección de preguntas frecuentes .

Upload: ferran-alf

Post on 25-Jun-2015

3.753 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Tutorial de Oracle Developer

Tutorial de Oracle DeveloperEn este tutorial se explicará la utilización de Oracle Developer para la realización de las prácticas de Bases de Datos 2. Oracle Developer es una herramienta visual para la creación fácil de aplicaciones que trabajen sobre la base de datos Oracle.

Dentro de Oracle Developer, distinguiremos dos partes fundamentalmente:

1. Forms Developer: Nos va a permitir construir formularios con los que podremos acceder a la Base de Datos. En dichos formularios podremos hacer consultas, modificaciones, inserciones y borrados sobre elementos de la base de datos.

2. Reports Developer: Nos va a permitir construir informes con los que podremos presentar e imprimir los datos de una forma ordenada y con un formato visualmente agradable.

Dentro de este tutorial se distinguen los siguientes apartados:

Instalación : En esta sección veremos como instalar la base de datos Oracle y/o la herramienta Oracle Developer en nuestro ordenador personal. Eso no es necesario ya que las prácticas se pueden realizar dentro las prácticas utilizando la partición orag, pero puede ser útil para un mayor conocimiento de las herramientas o para organizarse de forma personalizada.

Tutorial Forms Developer : En este tutorial veremos como crear distintos tipos de formularios y con distintas opciones

Tutorial Reports Developer : En este tutorial veremos como crear distintos tipos de informes y como conectarlos con los formularios creados con Forms Developer.

Preguntas frecuentes : Conjunto de preguntas con sus respectivas respuestas de dudas que suelen aparecer frecuentemente en el uso de Oracle Developer.

Si se quiere ampliar conocimientos sobre el uso de Oracle Developer se puede consultar el tutorial de la Granja El Cerdito Valiente, que se ha utilizado en años anteriores y la sección de preguntas frecuentes.

Base de Datos

En este tutorial seguiremos con el ejemplo de la Facultad de Estudios Avanzados centrándonos en una parte del mismo. Del diagrama Entidad/Relación nos quedaremos con el siguiente trozo para ilustrar el uso de Oracle Developer:

De donde obtenemos las siguientes tablas:

Page 2: Tutorial de Oracle Developer

Persona: PID, nombre, apellido1, apellido2, direccion, cp, localidad, provincia, telefono, email, lugarNacimiento, fechaNacimiento, NIF, sexo, nacionalidad

Alumno: PID, login, password, familiaNumerosa, centroProcedencia, acceso, notaAcceso

Profesor: PID, login, password, categoria, fechaAlta, departamento, despacho, telefonoDpcho

Matricula: IDMatricula, IDAlumno, tipo, numeroPlazos, fechaExpedicion, curso, PID Pago: IDPago, cantidad, abonado, fechaPago, IDMatricula Asignatura: nombre, creditosTeoricos, creditosPracticos, tipo, cuatrimestre DetalleMatricula: IDMatricula, nombre

Para el diseño físico de la base de datos tenemos tres ficheros:

CreaBD.sql : Fichero que contiene el conjunto de sentencias SQL necesario para crear la base de datos.

DatosBD.sql : Fichero que contiene el conjunto de sentencias SQL que inicializan la base de datos con unas cuantas tuplas de ejemplo.

BorraBD.sql : Fichero que contiene el conjunto de sentencias SQL que borra la base de datos.

InstalaciónIntroducción

En esta parte del tutorial se explicará como instalar Oracle 9i Personal Edition y Oracle Developer 6i (Forms Developer y Reports Developer) para poder tener disponibles dichas herramientas en nuestro ordenador personal.

En principio no hará falta instalar ningún software en el ordenador personal, ya que las prácticas se han configurado y temporizado para su realización en las instalaciones de la E.T.S.I.I. Sin embargo, aquellos alumnos que deseen profundizar en el conocimiento de estas herramientas u organizar su trabajo de forma personalizada, pueden acceder de forma gratuita a las mismas, para uso docente.

1 Opciones de Instalación

Primero tenemos que decidir que tipo de instalación queremos hacer, para ello tenemos distintas posibilidades:

1. Instalar sólo Oracle Developer y acceder al servidor Oracle de la E.T.S.I.I. Para ello nos hará falta una conexión a Internet. Esta es la opción recomendada para ordenadores con poca potencia/memoria pero que dispongan de una conexión Internet

2. Instalar Oracle 9i Personal Edition y Oracle Developer 6i, de esta forma no nos hará falta una conexión y la realización de las prácticas no dependerá de posibles caídas de red o del servidor. Tengamos en cuenta que sería conveniente tener una máquina con al menos 256MB o 512MB de memoria RAM, 1Ghz de velocidad del microprocesador y unos 8GB de espacio libre en el disco duro.

3. Si tenemos un ordenador poco potente (menos de 1Ghz) o con poca memoria (menos de 256Mb) y sin conexión a Internet, podemos optar por la instalación de otras

Page 3: Tutorial de Oracle Developer

versiones de Oracle, para ello consultaremos la Guía de instalación de Oracle usada en años anteriores.

De esta forma si queremos instalar la base de datos Oracle y Oracle Developer tendremos que seguir todos los pasos de este tutorial a excepción, quizás del último (7) que nos sirve para utilizar la base de datos del servidor de la escuela (si se dispone de conexión a Internet sería interesante que se probaran tanto la base de datos local como la del servidor de la escuela).

Si tenemos una conexión a Internet y sólo queremos instalarnos Oracle Developer y usar la base de datos de la escuela tendremos que realizar los pasos 3,4 y 7.

2 Instalación de Oracle Database 9i Personal Edition

Las instrucciones que se dan se han probado usando como sistema operativo Windows XP SP2 versión de 32 bits.

Primero tendremos que comprobar en el Panel de Control (subapartado conexiones de red) que tenemos instalado el protocolo TCP/IP (si accedemos a Internet ya lo tendremos instalado)

Para no tener problemas se aconseja seguir uno a uno los pasos de forma escrupulosa, dichos pasos son:

Page 4: Tutorial de Oracle Developer

Descargarnos Oracle9i Database Release 2 Enterprise/Standard/Personal Edition for Windows NT/2000/XP desde la página web de Oracle. Téngase en cuenta que para ello tendremos que aceptar las condiciones de la licencia y estar dados de alta previamente en la página web de Oracle .

Creamos tres directorios llamados Disk1, Disk2 y Disk3y descargamos los tres ficheros que hay en la página web:

o 92010NT_Disk1.zip (612,802,971 bytes)o 92010NT_Disk2.zip (537,604,934 bytes)o 92010NT_Disk3.zip (254,458,106 bytes)

cada fichero lo guardamos en su directorio correspondiente.

Descomprimimos cada fichero descargado en cada uno de los directorios. Dentro de Disk1, ejecutar Setup.exe. Nos aparecerá la pantalla de bienvenida, pulsamos el botón Siguiente

Nos aparecerá la pantalla de Ubicación de Ficheros de origen y destino, no se aconseja cambiar nada, quedándonos con el valor por defecto (c:\oracle\ora92\) y si lo

Page 5: Tutorial de Oracle Developer

cambiáramos por cualquier motivo (p.e. motivos de espacio) lo tendremos en cuenta a la hora de interpretar el tutorial. Pulsamos el botón Siguiente

Posteriormente se nos muestra la pantalla de selección de tipo de instalación, escogemos Personal Edition y pulsamos el botón Siguiente

Page 6: Tutorial de Oracle Developer

Nos preguntará el tipo de configuración de la Base de Datos según el uso que le demos, escogemos Uso General y pulsamos el botón Siguiente

Page 7: Tutorial de Oracle Developer

Nos preguntará por el puerto a usar por Oracle MTS Recovery Service, dejamos el valor por defecto (2030) y pulsamos el botón Siguiente

Page 8: Tutorial de Oracle Developer

Posteriormente nos pedirá el nombre de la base de datos global y el SID (Identificador de Sistema de Oracle), utilizamos los valores que se muestran en la imagen (progBD2.localhost y progBD2) y pulsamos el botón Siguiente.

Page 9: Tutorial de Oracle Developer

Nos pregunta por la Ubicación de los archivos de datos, dejamos el valor por defecto y pulsamos el botón Siguiente

Page 10: Tutorial de Oracle Developer

Nos permite cambiar el juego de caracteres, dejaremos que utilice el juego de caracteres por defecto y pulsamos el botón Siguiente

Page 11: Tutorial de Oracle Developer

Finalmente nos aparece un pequeño resumen con distintas opciones de la instalación, pulsamos el botón Instalar

Page 12: Tutorial de Oracle Developer

Después de un rato instalándose y configurándose nos pedirá las contraseñas para los superusuarios de la base de datos (SYS y SYSTEM). Ten en cuenta que estas contraseñas no debemos olvidarlas. Podemos usar la misma para ambos superusuarios.

Page 13: Tutorial de Oracle Developer

Si no ha habido ningún problema nos aparecerá la pantalla de Fin de la instalación, pulsamos el botón Salir

Page 14: Tutorial de Oracle Developer

3 Instalación de Oracle Forms Developer

Nos descargarnos Oracle® Forms Developer/Services 6i Release 2 for Windows 98/NT/2000/XP desde la página web de Oracle. Téngase en cuenta que para ello tendremos que aceptar las condiciones del contrato y estar dados de alta previamente en la página web de Oracle (Para los que quieran la versión de Linux, tendrán pueden descargarla desde Oracle Forms Developer/Services 6i Release 2 for Linux. O experimentar con las últimas versiones en Oracle Application Server Forms and Reports.).

Una vez descargado, tendremos un fichero comprimido llamado 6i_rel2_xp.zip (si no le hemos cambiado el nombre al descargarlo). Lo descomprimimos y ejecutamos Setup.exe. Seguimos los siguientes pasos:

Lo primero que nos aparece es una ventana para que introduzcamos algunas definiciones de instalación, cogemos los mismos valores que en la imagen y le damos a Ok.

Page 15: Tutorial de Oracle Developer

Nos pregunta que herramienta instalar, seleccionamos Oracle Forms Developer y le damos la botón Aceptar/OK.

Cuando nos pregunta por el tipo de instalación seleccionamos Typical

Page 16: Tutorial de Oracle Developer

Cuando nos pregunta si queremos instalar Forms Server, seleccionamos No

Le damos a Aceptar un par de veces y ya hemos instalado Oracle Forms Developer.

4 Instalación de Oracle Reports Developer

Usando el mismo fichero Setup.exe obtenido a partir de descomprimir el fichero 6i_rel2_xp.zip también podremos instalar Oracle Reports Developer

Lo primero que nos aparece es una ventana para que introduzcamos algunas definiciones de Instalación de Oracle, cogemos los mismos valores que en la imagen y le damos a Ok.

Page 17: Tutorial de Oracle Developer

Nos pregunta que herramienta instalar, seleccionamos "Oracle Reports Developer" y le damos la botón Aceptar.

Cuando nos pregunta por el tipo de instalación seleccionamos Typical

Page 18: Tutorial de Oracle Developer

Cuando nos pregunta si queremos instalar Reports Server, seleccionamos No

Le damos a Aceptar un par de veces y ya hemos instalado Oracle Reports Developer.

5 Creación de Usuarios

Vamos a crear un usuario sin privilegios para poder trabajar sin complicaciones en nuestra base de datos, para ello utilizaremos la herramienta SQL Plus, que la podremos encontrar en el grupo de programas Oracle-OraHome92 en Application Development->SQL Plus

Page 19: Tutorial de Oracle Developer

Nos pedirá que nos identifiquemos, entramos como el superusuario system y con la contraseña que dimos durante la configuración. Pulsamos el botón Aceptar.

Una vez identificados en SQL Plus vamos a crear un usuario, se recomienda que la cuenta de usuario tenga el mismo nombre que la que tenéis en la BD de la Escuela y trabajar sobre ella. Esto se puede hacer, con las siguientes sentencias:

create user <ALUMNO> identified by <password> default tablespace users temporary tablespace temp quota 4M on users quota 1M on temp; grant connect, resource to <x9999999>;

Por ejemplo:

Page 20: Tutorial de Oracle Developer

Si todo sale bien nos dirá primero que el usuario ha sido creado y que la concesión ha terminado correctamente.

6 Conexión de Oracle Developer con la Base de Datos instalada en nuestro ordenador

Para acceder al servidor Oracle lo vamos a hacer añadiendo un nombre de servicio (o alias), usando para ello la aplicación Oracle Net8 Easy Config, que la podremos encontrar en el grupo de programas Oracle para Windows NT-developer

Los pasos que hay que dar son:

Añadir un nuevo servicio, por ejemplo, lo puedes llamar casa y pulsas siguiente

Page 21: Tutorial de Oracle Developer

El protocolo que va a usar es TCP/IP (Protocolo Internet).

El nombre del host será localhost y el número de puerto es 1521(el valor por defecto, no cambiar)

Page 22: Tutorial de Oracle Developer

El identificador del sistema (SID de la Base de datos) es el que hemos introducido en la instalación, esto es, PROGBD2

Ya sólo nos hace falta probar que la conexión funciona perfectamente, para ello usaremos el usuario creado recientemente

Page 23: Tutorial de Oracle Developer

De esta forma para conectarse a la base de datos (con las distintas herramientas de Developer), te hará falta el usuario que has creado, el password y en la cadena de conexión pones el alias creado (en este ejemplo, casa). Por ejemplo, si utilizamos la versión de SQL Plus que viene con developer y que podrás encontrar el grupo de programas Oracle para Windows NT-developer tendrás que poner dicha cadena de conexión, por ejemplo:

Page 24: Tutorial de Oracle Developer

Puede que algún cortafuegos (firewall) nos de problemas al usar el puerto 1521, si ese es el caso se debe permitir la utilización de ese puerto en el cortafuegos.

7 Conexión de Oracle Developer con la Base de Datos de la ETSII

Para acceder al servidor Oracle lo vamos a hacer añadiendo un nombre de servicio (o alias), usando para ello la aplicación Oracle Net8 Easy Config, que la podremos encontrar en el grupo de programas Oracle para Windows NT-developer

Page 25: Tutorial de Oracle Developer

Los pasos que hay que dar son:

Añadir un nuevo servicio, por ejemplo, lo puedes llamar UGR y pulsas siguiente

El protocolo que va a usar es TCP/IP (Protocolo Internet).

Page 26: Tutorial de Oracle Developer

El nombre del host será oracle0.ugr.es. Sería conveniente comprobar antes que podéis acceder a dicho servidor, para ello desde MS-Dos (símbolo del sistema) poned "ping oracle0.ugr.es", si no responde es probable que se haya caído el servidor. El número de puerto es 1521(el valor por defecto, no cambiar)

El identificador del sistema (SID de la Base de datos) es PRACTBD

Page 27: Tutorial de Oracle Developer

Ya sólo nos hace falta probar que la conexión funciona perfectamente, para ello usaremos nuestro usuario y contraseña que tenemos en la base de datos de la ETSII

Page 28: Tutorial de Oracle Developer

De esta forma para conectarse a la base de datos (con las distintas herramientas de Developer), te hará falta el usuario de la escuela, su password y en la cadena de conexión pones el alias creado (en este ejemplo, UGR). Por ejemplo, si utilizamos la versión de SQL Plus que viene con developer y que podrás encontrar el grupo de programas Oracle para Windows NT-developer tendrás que poner dicha cadena de conexión, por ejemplo:

Puede que algún cortafuegos (firewall) nos de problemas al usar el puerto 1521, si ese es el caso se debe permitir la utilización de ese puerto en el cortafuegos.

Oracle Forms1 Formulario Personas-Alumnos

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:

1. Crear el bloque de datos Persona que muestra una única persona

Page 29: Tutorial de Oracle Developer

2. Crear el bloque detalle Alumno asociado a cada persona

1.1 Bloque Maestro Persona

Ejecutar Form Builder, que es la herramienta para construir formularios

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

Page 30: Tutorial de Oracle Developer

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:

Page 31: Tutorial de Oracle Developer

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.

Ya hemos terminado de usar el Asistente de Bloques de Datos y comenzamos el Asistente de Diseño que nos dará la bienvenida, le damos al botón Siguiente. Nos

Page 32: Tutorial de Oracle Developer

preguntará por el Lienzo y tipo de Lienzo, lo ignoramos y le damos al botón Siguiente. Nos aparecerá una ventana don dos columnas para seleccionar los atributos que deseamos visualizar. En principio, los vamos a visualizar todos, así que nos los llevamos todos a la columna de la derecha.

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.

Page 33: Tutorial de Oracle Developer

Como resultado ya tenemos nuestro primer bloque de datos.

Una vez terminado los asistentes de datos y diseño, nos aparecen dos subventanas dentro de Forms Builder, el Navegador de Objetos que es una ventana con estructura de árbol que nos muestra todos los elementos de nuestro formulario y el Editor de

Page 34: Tutorial de Oracle Developer

Diseño que nos permite ver el aspecto de nuestro formulario y lo que es más importante, modificarlo.

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)

Page 35: Tutorial de Oracle Developer

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.

Page 36: Tutorial de Oracle Developer

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.

Page 37: Tutorial de Oracle Developer

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

Page 38: Tutorial de Oracle Developer

EJERCICIO: Hacer un formulario que nos permita consultar, introducir, borrar y modificar las asignaturas

1.2 Bloque detalle Alumno

Seguimos con el formulario persona con el que hemos estado trabajando anteriormente. Seleccionamos, en el navegador de objetos, el bloque de datos Persona y pulsamos en el

navegador de objetos el botón de crear . De esta forma crearemos un nuevo bloque de datos (detalle) asociado al bloque de datos seleccionado (Persona - Maestro)

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.

Page 39: Tutorial de Oracle Developer

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

Page 40: Tutorial de Oracle Developer

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!

Page 41: Tutorial de Oracle Developer

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.

Page 42: Tutorial de Oracle Developer

En la ventana de Editor PL/SQL escribimos la línea

execute_query;que si nos fijamos es ejecutar_consulta en inglés, le damos al botón Compilar y luego a Cerrar. De esta forma cada vez que ejecutemos el formulario no tendremos que pulsar el botón Ejecutar Consulta para ver los registros.

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.

Page 43: Tutorial de Oracle Developer

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

Page 44: Tutorial de Oracle Developer

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.

Page 45: Tutorial de Oracle Developer

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 1Con 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)

Page 46: Tutorial de Oracle Developer

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) ISverror NUMBER :=0;errorRellenoLista exception;BEGIN verror:= Populate_Group(grupo); if verror = 0 then Clear_List(lista); /*Elimina el contenido de la lista*/

Page 47: Tutorial de Oracle Developer

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.

Page 48: Tutorial de Oracle Developer

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

Page 49: Tutorial de Oracle Developer

Finalmente, el formulario tendrá un aspecto similiar a:

¡Qué no se te olvide guardarlo!

3 Bloque LOV (List of Values - Lista de Valores)

En lugar de utilizar listas, en muchos casos nos interesará más utilizar bloques LOV. Con un Bloque LOV podremos asignar más de un valor a la vez, es decir, seleccionando un elemento de un bloque LOV podremos rellenar varios campos del formulario a la vez. Los bloques LOV son dinámicos en el sentido de que se construyen a partir de los datos de la base de datos y además nos permitirán ver más datos que los que se van a utilizar para rellenar el formulario.

Para ilustrar el ejemplo de los bloques LOV: si nos fijamos en el formulario anterior el campo alumno es sólo un código que no nos dice mucho, si hubiera que cambiar la asignación de una matrícula a un alumno (por ejemplo, para deshacer un error del secretario), habría que buscar en alumnos el código (o, al menos, saberlo) y con ese código cambiar la matrícula. Para evitar esto, vamos a crear un bloque LOV que nos permita ver datos del los alumnos, pero que nos almacene sólo el código del mismo.

Abrimos el formulario de matrículas si no lo tenemos abierto ya. En el navegador de objetos, seleccionamos Listas de Valores (o elementos LOV, según la versión de

Developer) y le damos al botón de crear . Le decimos que sí queremos utilizar el Asistente de Listas de Valores. Dejamos seleccionado Nuevo Grupo de Registros basado en una consulta y le damos al botón Siguiente.

Page 50: Tutorial de Oracle Developer

En la parte de la consulta SQL, vamos a introducir la siguiente consulta:

SELECT alumno.pid, nif, nombre, apellido1, apellido2 FROM alumno, persona WHERE (alumno.pid=persona.pid)Nos conectamos (si no lo estamos ya) y le damos a Comprobar Sintaxis para ver si la consulta está correcta. Le damos al botón Siguiente.

Page 51: Tutorial de Oracle Developer

En la ventana de selección movemos todos los atributos a la columna de la derecha, ya que en la misma consulta hemos seleccionado los atributos que queremos que nos salgan en la lista de valores. Le damos a Siguiente.

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

Page 52: Tutorial de Oracle Developer

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.

Page 53: Tutorial de Oracle Developer

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.

Page 54: Tutorial de Oracle Developer

Si quieres que la Lista de Valores se visualice automáticamente al irnos a la casilla de Alumno, sin tener que pulsar F9, tienes que irte a la Paleta de Propiedades de la Lista de Valores creada y poner la propiedad Visualización Automática a Sí

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.

Page 55: Tutorial de Oracle Developer

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.

Page 56: Tutorial de Oracle Developer

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).

Page 57: Tutorial de Oracle Developer

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ón desactivamos 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.

En el Asistente de Diseño, en la ventana Tipo de Lienzo, vamos a asignarle el lienzo tabular antes creado con las asignaturas, pero sí vamos a seleccionar una Nueva Página con Pestaña.

Visualizaremos todos los campos menos IDMatricula. Escogemos un diseño tabular, de título Pagos, y que se muestren sólo 2 registros, sin barra de desplazamiento. Le cambiamos el nombre a la pestaña, como hicimos anteriormente para las asignaturas (cambiando la propiedad Etiqueta por Pagos de la nueva página con pestaña creada).

Page 58: Tutorial de Oracle Developer

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.

Page 59: Tutorial de Oracle Developer

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.

Page 60: Tutorial de Oracle Developer

Cambiamos las siguiente propiedades:

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

Ya sólo nos queda llamar a la alerta, para ello, en el disparador WHEN_NEW_FORM_INSTANCE, escribimos el código:

DECLARE boton NUMBER; BEGIN

/*Mostramos la alerta BIENVENIDA y guardamos el botón pulsado*/boton := Show_Alert('Bienvenida');

/*Miramos que botón se ha pulsado*/IF boton = ALERT_BUTTON1 THEN

/*Sólo hay uno, no hacemos nada*/NULL;

END IF;

/*Rellenamos el formulario*/Execute_Query;

END;De esta forma, al ejecutar el formulario nos debería salir, algo parecido a

Page 61: Tutorial de Oracle Developer

La función Show_alert devuelve el número ALERT_BUTTON1, ALERT_BUTTON2, ALERT_BUTTON3 dependiendo de que botón haya sido pulsado

4.3 Barras de herramientas

Para ilustrar el funcionamiento de una barra de herramientas, vamos a crear una para nuestro formulario de matriculación que será horizontal y con cuatro botones, dos para movernos entre los registros, otro para almacenar los cambios realizados y un cuarto botón para cerrar el formulario, mostrando un aviso antes. La barra de herramientas tendrá el siguiente aspecto:

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

Page 62: Tutorial de Oracle Developer

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, salva y salida.

Page 63: Tutorial de Oracle Developer

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;

Page 64: Tutorial de Oracle Developer

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

Page 65: Tutorial de Oracle Developer

Para terminar al botón Salida para su disparador WHEN-BUTTON-PRESSED le asignamos el siguiente código:

DECLAREboton NUMBER;

BEGIN/*Preguntamos si guardar*/boton := show_alert('salir');

/*Si se ha pulsado el primer botón,guardamos los cambios*/if boton = ALERT_BUTTON1 then

commit_form;end if;

/*Si no se ha pulsado el tercer botón,nos salimos*/if boton <> ALERT_BUTTON3 then

exit_form(no_commit);end if;

END;

El aspecto del formulario será:

Page 66: Tutorial de Oracle Developer

5 Elementos con resultados de cálculos

En Developer se pueden crear campos que muestren datos calculados a partir de otros campos. Para ilustrar esta funcionalidad, para cada pago vamos a añadir un campo que sea Pagado (pago.abonado*pago.cantidad) que nos muestre para un pago dado si se ha pagado o no, y dos campos uno con la suma de las cantidades de los pagos (Precio Total matrícula) y otro con la suma de las cantidades pagadas (Total Pagado).

En el navegador de objetos seleccionamos Elementos del bloque de datos Pago y

pulsamos el botón de crear , nos creará un nuevo campo de texto. Con la Paleta de Propiedades le damos los siguientes valores:

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

Page 67: Tutorial de Oracle Developer

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:

Page 68: Tutorial de Oracle Developer

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

Al bloque de datos Pago le cambiamos la propiedad Consultar todos los registros a Sí y la propiedad Precalcular Totales como No. Ya sólo queda ajustar los campos de totales creados por si no se visualizaran bien y ejecutar el formulario cambiando los valores de cantidad/abonado para ver que ocurre.

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 usaremos menudef.mmb.

Page 69: Tutorial de Oracle Developer

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.

Page 70: Tutorial de Oracle Developer

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.

Con la opción Formularios seleccionada pulsamos el botón de Crear a la derecha . Al nuevo elemento le damos: Nombre: Alumnos, Etiqueta: Alumnos, 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'); /*Llamamos al formulario de Alumnos*/ Run_PRODUCT(FORMS,'Alumno',SYNCHRONOUS, RUNTIME, FILESYSTEM,parametros ,NULL);

Page 71: Tutorial de Oracle Developer

END;

La función Run_PRODUCT nos servirá para ejecutar cualquier elemento de Developer, el primer parámetro sera FORMS si llamamos a un formulario y REPORTS si llamamos a un informe, el segundo parámetros será el formulario o informe que queremos usar y el penúltimo será una lista de parámetros que le pasamos al formulario o informe, en este ejemplo, está vacía. Para más información acerca del procedimiento Run_PRODUCT, puedes consultar la ayuda interactiva de Developer.

En el navegador de objetos, seleccionamos el objeto menú con el que estamos trabajando y nos vamos a Fichero -> Guardar Como. Lo guardamos como mimenu.mmb. Ya sólo nos queda compilarlo (manteniéndolo seleccionado, nos vamos a Fichero ->Administración -> Compilar Fichero) e incorporar el menú compilado al formulario. Para ello, abrimos la paleta de propiedades del formulario (el único elemento de Pantallas en el navegador de objetos) y cambiamos la propiedad Módulo de Menús a mimenu.mmx. Ejecutamos y probamos si funciona la opción de ver el formulario de alumnos.

Page 72: Tutorial de Oracle Developer

7 Formularios con parámetros

Un formulario puede tener parámetros de forma que, cuando lo invoquemos (por ejemplo, desde un menú o un botón), tenga un comportamiento distinto dependiendo de los parámetros. Un parámetro será una variable asociada a un Formulario o a un Informe.

Vamos a crear un formulario donde se visualicen los datos de un alumno en particular y lo vamos a invocar desde nuestro formulario de Matriculación. Primero, copiamos nuestro formulario Alumno.fmb a otro fichero, por ejemplo, AlumnoP.fmb y abrimos el nuevo formulario creado. Para crear un parámetro, en el navegador de objetos

seleccionamos Parámetros y pulsamos el botón de crear . Al nuevo parámetro creado le damos el nombre Seleccionado, será de tipo numérico (Number) y el valor Inicial será 1.

Page 73: Tutorial de Oracle Developer

El siguiente paso que daremos será cambiar la cláusula WHERE del bloque de datos Persona, de forma que se muestre el registro cuyo PID se le pasa como parámetro. Para ello le damos a la propiedad Cláusula WHERE el valor pid = :Parameter.seleccionado

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.

Page 74: Tutorial de Oracle Developer

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');

/*Le añadimos el alumno a visualizar*/ Add_parameter(parametros,'seleccionado', TEXT_Parameter,:matricula.IDAlumno);

/*Llamamos al formulario de Alumnos*/ Run_PRODUCT(FORMS,'AlumnoP',SYNCHRONOUS, RUNTIME, FILESYSTEM,parametros ,NULL);

/*Limpiamos la la lista de parámetros creados*/ Destroy_Parameter_List(parametros); END;

Page 75: Tutorial de Oracle Developer

Con el procedimiento Add_parameter se pueden añadir tantos parámetros como haga falta, primero tendrá la lista de parámetros, después el nombre del parámetros, el tipo de parámetro (normalmente, TEXT_Parameter) y finalmente el valor del parámetro. Observa que aquí escogemos el atributo IDAlumno del bloque de datos Matricula

Guardamos y ejecutamos el formulario para ver que el nuevo botón funciona correctamente.

Oracle Reports

1 Informe Asignaturas

Vamos a hacer un primer informe que nos va a mostrar una relación de asignaturas que se pueden cursar, para ello ejecutamos Report Builder, que es la herramienta para construir informes

Lo primero que nos saldrá será una pantalla de bienvenida con diversas opciones, nosotros escogeremos Utilizar el Asistente de Informes y le damos al botón Aceptar.

Page 76: Tutorial de Oracle Developer

Nos sale otra bienvenida, la ignoramos y pulsamos el botón Siguiente, nos preguntará el título de nuestro informe y el tipo del mismo. Como Título pondremos Asignaturas y escogeremos el tipo tabular. Pulsamos Siguiente

Nos preguntará el tipo de consulta que queremos utilizar, seleccionaremos Sentencia SQL y pulsamos Siguiente. En la siguiente ventana nos pedirá la consulta y aprovechamos, pulsando el botón conectar para identificarnos. La consulta que debemos introducir es:

SELECT nombre, creditosTeoricos, creditosPracticos, tipo, cuatrimestre FROM asignatura;

Page 77: Tutorial de Oracle Developer

Nos aparecerá una ventana con dos columnas para seleccionar los atributos que deseamos visualizar en nuestro informe, los vamos a visualizar todos, así que nos los llevamos todos a la columna de la derecha.

Page 78: Tutorial de Oracle Developer

En la siguiente pantalla nos permite calcular totales, mínimos, máximos, etcétera, por lo pronto, la ignoramos y pulsamos Siguiente. Ahora nos preguntará por las Etiquetas del Informe y el tamaño de cada uno de los campos, nos limitamos a cambiar "creditosTeoricos" por "Créditos Teóricos" y "creditosPracticos" por "Créditos Prácticos".

Finalmente, seleccionamos la plantilla de diseño con la que parecerá nuestro informe, escogemos la que más nos gusta, por ejemplo, escogemos la primera Corporate 1 y le damos al botón de Terminar.

Page 79: Tutorial de Oracle Developer

Como resultado ya tenemos nuestro primer informe, en el Report Editor podemos cambiar aquellos detalles que no nos gusten. Que no se te olvide guardarlo como asignaturas.rdf

Page 80: Tutorial de Oracle Developer

2 Informe Matrículas

Vamos a crear un informe donde, para cada alumno, nos muestre las matrículas que ha realizado y para cada matrícula los pagos de la misma. Utilizamos el Asistente de Informes para hacerlo. El estilo de informe será Agrupar a la izquierda y el título "Matriculas".

Page 81: Tutorial de Oracle Developer

El motivo de agruparlo a la izquierda es que queremos agrupar las matriculas por alumnos (un alumno se puede matricular más de una vez) y los pagos por matricula (una matricula puede tener uno o dos pagos). El tipo de consulta sera mediante Sentencia SQL y el código de la misma será:

SELECT matricula.idmatricula, tipo, numeroplazos, fechaexpedicion, curso, cantidad, abonado, fechapago, persona.nombre, persona.apellido1, persona.apellido2 FROM pago, matricula, persona WHERE (pago.idmatricula=matricula.idmatricula) and (matricula.idalumno=persona.pid);

Le damos a conectar para identificarnos y pulsamos Siguiente. En la siguiente pantalla, tendremos que elegir por que grupos de atributos vamos a realizar las agrupaciones. Primero pasamos nombre, apellido1, apellido2 que estará en el nivel 1 e idmatricula estará en el nivel 2. Para dejar de añadir atributos al nivel 1 y empezar al nivel 2, simplemente hay que cerrar el árbol del nivel 1. Nos quedará:

Page 82: Tutorial de Oracle Developer

El resto de atributos lo añadimos luego en la parte de campos visualizados en el siguiente orden: curso, tipo, fechaexpedicion, numeroplazos, cantidad, abonado, fechapago.

Cuando nos pregunta los campos sobre los cuales se desea calcular el total, seleccionaremos el campo cantidad, así nos sumará las cantidades de los pagos de una matrícula y los totales de las distintas matriculas de un alumno. Entonces,

Page 83: Tutorial de Oracle Developer

seleccionamos cantidad y nos lo llevamos a la columna de totales, usando el botón de Suma >

Ya sólo nos queda poner los títulos y ajustar los tamaños de los distintos campos. Observa que nos salen tres nuevos atributos:

SumCantidadPeridmatricula, que nos sumará las distintas cantidades por matrícula SumCantidadPernombre, que nos sumará las distintas cantidades por persona SumCantidadPerReport, que nos hará la suma de todas las cantidades del informe

Escogemos la plantilla predefinida NCA yellow y le damos a Terminar. Qué no se te olvide guardarlo cómo matriculas.rdf

Page 84: Tutorial de Oracle Developer

3 Informes con parámetros e invocación de informes

Al igual que con los formularios, en los informes también podemos parametrizar su funcionalidad, para demostrar su uso, vamos a copiar el último informe creado (matriculas.rdf) con el nombre de matricula.rdf para que nos muestre las matrículas y pagos de una sola persona que se le pasará como parámetro.

Para crear un parámetro, en el navegador de objetos nos vamos al Modelo de Datos y de

ahí, seleccionamos Parámetros de Usuario y pulsamos el botón de crear . Al nuevo parámetro creado le damos el nombre Elegido, será de tipo Character y el valor Inicial será 1.

Page 85: Tutorial de Oracle Developer

Modificaremos la consulta del informe, eso se puede hacer por el navegador de objetos y la paleta de propiedades del informe, cambiando la propiedad Sentencia de Consulta SQL de la consulta que haya dentro de Consultas en el Modelo de datos o abriendo el Asistente de Informes (dentro del menú herramientas) y escogiendo la pestaña Datos. Introduciremos la siguiente sentencia SQL:

SELECT matricula.idmatricula, tipo, numeroplazos, fechaexpedicion, curso, cantidad, abonado, fechapago, persona.nombre, persona.apellido1, persona.apellido2 FROM pago, matricula, persona WHERE (pago.idmatricula=matricula.idmatricula) and (matricula.idalumno=persona.pid) and (:elegido =persona.pid);

Si ejecutamos el informe veremos que antes de mostrarlo nos sale una ventan donde nos pregunta por los parámetro de usuario.

Page 86: Tutorial de Oracle Developer

Pulsamos el icono del semáforo verde para visualizar el informe y sólo nos muestra las matrículas de una persona (la que coincide con el valor introducido).

Para evitar que cuando lo llamemos desde nuestro menú o desde un formulario nos aparezca la ventana de parámetros, nos vamos al menú Herramientas->Constructor de Pantalla de Parámetros. Dejamos en blanco el Titulo, la Linea de Indicación y la Línea de Estado, además deseleccionamos aquellos atributos que estuviesen seleccionados en la lista. Guardamos y cerramos el informe.

Page 87: Tutorial de Oracle Developer

Abrimos nuestro formulario de matriculación con su menú y al menú le añadimos una opción nueva que será Imp. Matriculas. Para ello, debajo de la entrada Formularios

creamos la entrada Informes pulsando el botón de Crear debajo . Al nuevo elemento le damos: Nombre: Informes, Etiqueta: Informes, Tipo de Elemento de Menú: Normal.

Con la opción Informes seleccionada pulsamos el botón de Crear a la derecha . Al nuevo elemento le damos: Nombre: Imp_Matriculas, Etiqueta: Imp. Matriculas, Tipo de Elemento de Menú: Normal.

Para ejecutar el informe Matricula.rdf cuando se elija la opción Imp. Matrículas del menú, tendremos que modificar su propiedad Código del Elemento de Menú con el siguiente código:

DECLARE parametros Paramlist; elemento Item; BEGIN

/*Buscamos el ítem IDAlumno*/ elemento := Find_Item('IDalumno');

Page 88: Tutorial de Oracle Developer

/*Creamos la lista de parámetros*/ parametros := Create_Parameter_List('Param_i');

/*Le añadimos el alumno elegido*/ Add_parameter(parametros,'elegido', TEXT_Parameter, Get_Item_Property(elemento,DATABASE_VALUE));

/*Llamamos al informe de matricula de un alumno*/ Run_PRODUCT(REPORTS,'Matricula',SYNCHRONOUS, RUNTIME, FILESYSTEM,parametros ,NULL);

/*Limpiamos la la lista de parámetros creados*/ Destroy_Parameter_List(parametros); END;

En el navegador de objetos, seleccionamos el objeto menú con el que estamos

trabajando y le damos al botón de guardar . Ya sólo nos queda compilarlo (manteniéndolo seleccionado, nos vamos a Fichero ->Administración -> Compilar Fichero). Ejecutamos el formulario y probamos si funciona la opción de ver el informe de las matrículas de un alumno.

Page 89: Tutorial de Oracle Developer

Preguntas Frecuentes

Page 90: Tutorial de Oracle Developer

Preguntas

1. ¿Qué versión de Developer instalo?2. ¿Qué versión de Oracle instalo?3. ¿Cómo conectar Oracle Developer con la base de datos Oracle de la ETSII?4. ¿Cómo conectar Oracle Developer con la base de datos Oracle de mi ordenador?5. No consigo conectar con la base de datos Oracle de la ETSII¿Qué pasa?6. ¿Cómo conecto Oracle Developer con la base de datos Oracle XE?7. ¿Cómo referenciar a una clave externa con dos campos?8. ¿Cómo almaceno horas en Oracle o fechas y horas?9. No me recupera ningún registro desde Developer pero desde Sql Plus al hacer un

select me salen los datos ¿Qué pasa?10. ¿Cómo usar mis imágenes para decorar los formularios/informes?11. ¿Cómo generar valores consecutivos (un código) para un campo desde un formulario?12. ¿Cómo empezar con el formulario con valores sin tener que pulsar el botón

execute_query/ejecuta_consulta?13. Utilizo un LOV y al ejecutar el formulario me sale en la barra de estado Lista de

Valores/List of Values pero el LOV no se muestra ¿Por qué?14. ¿Cómo hacer un acceso identificado para mi aplicación?15. ¿Cómo ejecutar un formulario/informe distinto al que estamos usando al pulsar un

botón?16. ¿Cómo elegir diferentes opciones de características de un formulario?17. En un formulario quiero rellenar un campo darle a un botón y que me rellene el resto

de los campos ¿Cómo lo hago?18. ¿Cómo puedo borrar la tupla actual que se muestra en un formulario pulsando un

botón?19. Me sale el error FRM-402002: Es obligatorio introducir un valor en el elemento ¿cómo

lo quito?20. ¿Como puedo modelar una relación muchos a muchos ?21. ¿Cómo hago que un elemento no se pueda modificar (que sólo se muestre)?22. ¿Cómo usar imágenes de la BD en los formularios?23. ¿Cómo pasar parámetros a un formulario o a un informe?24. ¿Cómo usar los parámetros de un informe en la consulta?25. ¿Cómo quitar la ventana que te pide los parámetros de un informe?26. ¿Se puede utilizar una lista dinámica para una clave primaria o para una clave externa

utilizada en una relación?27. Me gustaría que al entrar a un formulario, se realizara automaticamente

Execute_query con un campo relleno. ¿Cómo lo hago? 28. ¿Cómo pasar parametros de un formulario a otro?29. ¿Cómo saber que valor he escogido de un grupo de Radio Button?30. ¿Cómo saber si he marcado un checkbox?31. ¿Cómo incrementar el campo código si uso secuencias?32. ¿Cómo incrementar el campo código si tengo una letra antes del número?33. ¿Quiero crear una tabla donde tenga una comprobación de tiempo respecto a la fecha

actual ¿Cómo lo hago?34. ¿Cómo hago que en mi formulario se vea sólo la parte de una tabla que cumple

determinadas características?35. Tengo una serie de bloques de datos en el mismo formulario y que no están

relacionados (por ejemplo, varias pestañas) y al ejecutar un execute_query (ejecutar consulta) sólo se me rellena el primero de ellos ¿cómo relleno los demás?

Page 91: Tutorial de Oracle Developer

36. Tengo una especialización y tengo problemas para mostrarla junto su generalización ¿cómo lo hago?

37. Quiero hacer un insert/update dentro de un disparador, pero no funciona ¿cómo hago que funcione?

38. ¿Hay que entregar el diseño de la aplicación otra vez?39. ¿Cómo preparo los ficheros de mi aplicación para que no me den problemas con las

rutas (path)?

Respuestas1.

¿Que versión de Developer instalo?

Lo más aconsejable es que instales la que hay instalada en las aulas de prácticas de la ETSII que es la 6i, ya que la presentación de la aplicación se hará en esas aulas. Si utilizas una versión superior (9i o 10g) seguramente no funcionará y tendrás que llevarte tu propio ordenador.

2. ¿Que versión de Oracle instalo?

Lo más sencillo es que instales sólo Developer y con éste te conectes a la Base de Datos de la ETSII, pero para ello necesitas conexión a internet. Si prefieres trabajar en local sigue las instrucciones del tutorial de instalación.

3. ¿Cómo conectar Oracle Developer con la base de datos Oracle de la ETSII?

Para acceder al servidor Oracle de forma remota se puede hacer usando la aplicación SQL Net Easy configuration (dependiendo de la versión de Developer se puede llamar también Oracle Net8 Easy Config o Net Configuration Assistant). Los pasos que hay que dar son:

o crear/agregar un alias (o un nuevo servicio o configurar los métodos de nomenclatura), por ejemplo, lo puedes llamar bd2 (se llama alias, nombre del servicio o nombre del servicio de red)

o que utilice TCP/IP. No cambiar (si lo permite) el puerto por defecto 1521o Que use como servidor (TCP/IP host name) oracle0.ugr.es

. Sería conveniente comprobar antes que podeis acceder a dicho servidor, para ello desde MS-Dos (símbolo del sistema) poned "ping oracle0.ugr.es", si no responde es probable que se haya caido el servidor.

Page 92: Tutorial de Oracle Developer

o La instancia de la base de datos (database instance o SID de la Base de datos) es PRACTBD

De esta forma para conectarse a la base de datos (tanto en SQL Plus como en Developer), te hará falta el usuario, el password y en la cadena de conexión pones el alias creado (por ejemplo, bd2)

4. ¿Cómo conectar Oracle Developer con la base de datos Oracle de mi ordenador?

Lo primero es usar el usuario que has creado porque no se conectará con los usuarios SYS o SYSTEM. Si aún no se conecta, prueba a configurar un alias (como en el apartado anterior). Donde la instancia de la BD (SID) es la que tú has creado y el servidor es localhost. De esta forma para conectarse a la base de datos (tanto en SQL Plus como en Developer), te hará falta el usuario, el password y en la cadena de conexión pones el alias creado.

5. No consigo conectar con la base de datos Oracle de la ETSII¿Qué pasa?

Suponiendo que se han seguido todos los pasos correctamente y que el cortafuegos no nos cierra el puerto 1521. Tendremos que asegurarnos que nos estamos conectando a la red de la universidad de Granada por VPN. En algunos casos la versión 2005 del Panda Platinum bloquea el acceso a Oracle.

6. ¿Cómo conecto Oracle Developer con la base de datos Oracle XE?

Para conectar Developer Forms 6i a Oracle XE se debe hacer lo siguiente:

1. Instalar primero Developer Forms 6i.2. Instalar Oracle XE (Esto con el objetivo de que en las variables de entorno debe

estar primero el path de Oracle XE)3. Hay que asegurarse que en el registro de windows en:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE

la variable NET80 tenga el valor

C:\ORANT\NET80

4. En la ruta C:\ORANT\NET80\ADMIN se encuentran los ficheros TNSNAMES.ORA y SQLNET.ORA, hay que hacer una copia de seguridad de los mismos y reemplazarlos por los que instala Oracle XE en la ruta

5. C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN6. Por ultimo hay que ejecutar lo siguiente desde una ventada de DOS: 7. C:\>sqlplus /nolog

Page 93: Tutorial de Oracle Developer

8. SQL> connect / as sysdba9. Conectado.10. SQL> shutdown immediate11. SQL> startup restrict12. SQL> alter database character set internal_use UTF8;13. SQL> shutdown immediate14. SQL> startup

Nota: Esto es para que al conectar con Oracle XE no de error windows.

15. Para conectarse: 16. User Name: system17. Password : (Password que colocaron al momento de

instalar Oracle XE)18. database : XE

Y con esto debería funcionar.

7. ¿Cómo referenciar a una clave externa con dos campos?

Supongamos que tenemos una clave primaria en la tabla Proveedor cuya clave primaria es Nombre y Dirección y una tabla Distribuye que relaciona la anterior con una tabla productos y cuyos campos son Nombre, Dirección y CodigoProducto. La forma de crearla sería la siguente:

CREATE TABLE Distribuye ( Nombre VARCHAR(10), /*Referencia a Proveedor(Nombre)*/ Direccion VARCHAR(25), /*Referencia a Proveedor(Nombre)*/ CodigoProdcuto INTEGER REFERENCES Productos(cod), /*Referencia a Producto(cod)*/ /*La clave primaria son los 3 campos, relación muchos a muchos)*/ CONSTRAINT ClavePrimariaDistribuye PRIMARY KEY (Nombre,Direccion,CodigoProducto),

/*La clave externa son 2 campos de la tabla proveedor*/ CONSTRAINT ClaveExternaDobleProveedort FOREIGN KEY (Nombre,Direccion) REFERENCES Proveedor(Nombre,Direccion) );

8. ¿Cómo almaceno horas en Oracle o fechas y horas?

Usando el tipo de dato DATE y la función SET_DATE, la cual, tiene dos argumentos uno con la fecha/hora y otro con el formato que sigue esa fecha y

Page 94: Tutorial de Oracle Developer

hora. Por ejemplo, si queremos guardar una cita con un cliente un día y a una hora determinada sería

INSERT INTO Citas VALUES('11223344X',to_date('6/06/2006:20:00:00','dd/mm/yyyy:hh24:mi:ss'));

que guardaría una cita con el cliente 11223344X el día 6 de Junio de 2006 a las 20:00 horas. Si queremos guardar sólo la fecha

INSERT INTO Citas VALUES('11223344X',to_date('6/06/2006','dd/mm/yyyy'));

o sólo la hora

INSERT INTO Citas VALUES('11223344X',to_date('20:00:00','hh24:mi:ss'));

En developer en la paleta de propiedades de los elementos de Tipo de dato Date hay una propiedad que nos sirve para poner el formato a usar en la fecha denominada máscara de formato que utiliza el mismo formato que la función TO_DATE

9. No me recupera ningún registro desde Developer pero desde Sql Plus al hacer un select me salen los datos ¿Qué pasa?

Después de crear las tablas y de insertar los datos iniciales tienes que hacer un commit;

10. ¿Cómo usar mis imágenes para decorar los formularios/informes?

Desde Archivo->Importar->Imagen y desde ahí puedes abrir una imagen que se te incorpora al formulario o al informe No todos los tipos de formato de imagen son soportados pero si los más comunes.

11. ¿Cómo generar valores consecutivos (un código) para un campo desde un formulario?

Usando dicho campo (por ejemplo, codigo) en el bloque de datos (por ejemplo, productos) que se usa, pero no mostrándolo (eso se hace en el asistente de diseño). Posteriormente desde el disparador PRE-COMMIT escribir SELECT MAX(codigo)+1 INTO :productos.codigo FROM tabla_productos;

Page 95: Tutorial de Oracle Developer

12. ¿Cómo empezar con el formulario con valores sin tener que pulsar el botón execute_query/ejecuta_consulta?

Poniendo dentro del cuerpo del disparador WHEN-NEW-FORM-INSTANCE la línea execute_query;

13. Utilizo un LOV y al ejecutar el formulario me sale en la barra de estado Lista de Valores/List of Values pero el LOV no se muestra ¿Por qué?

Tienes que poner la propiedad de Visualización Automática del LOV a si. Si quieres que no se visualice automaticamente lo pones a No y cuando quieres que se visualice pulsas F9.

14. ¿Cómo hacer un acceso identificado para mi aplicación?

Vamos a hacer un acceso identificado para el ejemplo del tutorial, usaremos el nombre de empleado como login y su edad como contraseña. Lo que vamos a hacer es utilizar acceso identificado al formulario de recursos humanos (el de loz lienzos tabulares) Lo primero que haremos será crear un formulario (lo llamaremos Acceso) con un bloque de datos basado en la tabla Persona dónde se visualice un sólo registro. Añadiremos un botón Aceptar, otro Limpiar y otro Salir.

Para que no se nos muestre el password (campo edad) al hacer un ejecutar_consulta tendremos que irnos a sus propiedades y poner Ocultar Datos a Si y Elemento de la Base de Datos a No

Para cada botón definiremos un disparador WHEN-BUTTON-PRESSED (para cada botón no para todo el formulario), donde el codigo del boton Aceptar seria:

DECLARE cursor usuario is select edad, nombre from persona where nombre= :persona.nombre; tipo usuario %rowtype; ignora number;

BEGIN

open usuario;fetch usuario into tipo;

if :persona.edad = tipo.edad then /*Si queremos que no se cierre el formulario de acceso usamos OPEN_FORM('RecursosHumanos'); CLEAR_FORM(NO_VALIDATE); */

Page 96: Tutorial de Oracle Developer

/*Abrimos el nuevo formulario y cerramos el de acceso*/ CALL_FORM('RecursosHumanos');

exit_form;else /*En caso de fallo mostramos un Alert diciendo que hay un

acceso erroneo*/ ignora:=Show_Alert('errorAcceso'); /*Limpiamos para empezar de nuevo*/ CLEAR_FORM(NO_VALIDATE);end if;

close usuario;END;

Observamos que cuando se comete un error llama a la Alerta errorAcceso por tanto hay que crearla. Se puede usar tanto CALL_FORM como OPEN_FORM si se quiere ver las diferencias o si se quisiera utilizar parámetros al llamar al formulario, mirar la ayuda en línea de Oracle Developer.

El codigo del boton Borrar sería clear_form(no_validate);y para el botón Salir seria exit_form;

Si para la contraseña usamos cadenas de texto a la hora de declarar los campos debe usarse VARCHAR, si usamos CHAR no funcionará.

15. ¿Como ejecutar un formulario/informe distinto al que estamos usando al pulsar un botón?

Sería de forma análoga como hemos llamado en la pregunta anterior al formulario Principal desde el formulario Acceso.

16. ¿Como elegir diferentes opciones de características de un formulario?

Con la utilización de parámetros al igual que como se hace en los informes.

17. En un formulario quiero rellenar un campo darle a un botón y que me rellene el resto de los campos ¿Cómo lo hago?

Supongamos que el campo que queremos rellenar es Nombre (el ejemplo de lienzos tabulares del tutorial nos sirve). Le damos al botón de Introducir Consulta (Enter Query) rellenamos el nombre (por ejemplo Ramon) y le damos al botón de Ejecutar Consulta.

Si queremos no tener que utilizar estos dos botones y hacerlo de forma que sólo se introduzca el nombre y le demos a un botón, se haría creando un nuevo botón,

Page 97: Tutorial de Oracle Developer

al que le asociamos un disparador WHEN-BUTTON-PRESSED donde ponemos de código execute_query; y el disparador WHEN-NEW-FORM-INSTANCE del formulario añadimos la línea enter_query;.

18. ¿Cómo puedo borrar la tupla actual que se muestra en un formulario pulsando un botón?

Añadiríamos un botón con un disparador WHEN-BUTTON-PRESSED cuyo código sería delete_record; y lo que haría sería borrar el registro que se está visualizando

19. Me sale el error FRM-402002: Es obligatorio introducir un valor en el elemento ¿cómo lo quito?

Esto ocurre cuando al campo del formulario tiene la propiedad de Obligatorio puesta a Sí. Basta con cambiarlo a No, pero si lo que se quiere es obligar al usuario a introducir datos en un campo sin usar esta característica de Oracle, se tendría que comprobar en un disparador que el contenido no está vacío.

20. ¿Como puedo modelar una relación muchos a muchos ?

Supongamos que tenemos una relación mucho a muchos entre las entidades Coche, Caracteristicas y la relación Tiene. Si lo hacemos normalmente, creamos el Bloque de Datos Coche, luego lo relacionamos con Tiene y finalmente añadimos el Bloque de Datos Caracteristicas relacionado con el Bloque Tiene, nos va a salir que cada coche tiene una sóla característica, si visualizamos los campos del bloque de datos Tiene veremos que para cada coche se ven todas sus entradas de la tabla Tiene y para cada una de estas se muestra sólo una caracteristica.

Si quisieramos ver todas las características de cada coche las solución más fácil es crear una vista que aglutine Tiene y Caracteriticas, y a la hora de realizar el formulario se haga con dos Bloques de Datos uno para Coche y otro para la vista creada.

21. ¿Cómo hago que un elemento no se pueda modificar (que sólo se muestre)?

Para cada elemento que no quieras que se modifique activale la propiedad Activado a No

Page 98: Tutorial de Oracle Developer

22. ¿Cómo usar imágenes de la BD para los formularios?

Esto lo vamos a hacer de una forma sencilla, en un campo de una tabla guardaremos la ruta hasta la imagen (path) y en el formulario lo que haremos será leer desde un fichero la imagen cuya ruta nos da la BD y mostrarla en el formulario. Es importante que esa ruta sea simple (portabilidad de la aplicación a la ETSII) y que los ficheros con las imágenes existan.

Vamos a suponer que en el ejemplo de la granja tenemos en la tabla persona un campo llamado Foto, donde guardaremos la ruta hacia la imagen de la persona. Cuando construyamos el Bloque de Datos sobre la tabla Persona escogeremos también el campo Foto, pero no los mostraremos.

Una vez con el bloque de datos para Persona creado, en el Editor de Diseño crearemos un Elemento de Imagen (icono con un paisaje), la cambiaremos el nombre a, por ejemplo, IMAGENFOTO y le cambiaremos la propiedad Elemento de Base de Datos a No y la propiedad Obligatoria a No.

Para el bloque de datos Persona crearemos un disparador POST-BLOCK cuyo código será READ_IMAGE_FILE(:Persona.foto, 'JPG', 'Persona.IMAGENFOTO'); donde le decimos que lea una imagen desde un fichero (el que le da :Persona.foto) y lo ponga en un elemento de imagen (llamado 'Persona.IMAGENFOTO'). Si quieres saber más acerca del disparador POST-BLOCK o de la función READ_IMAGE_FILE mira la ayuda en línea de Developer.

23. ¿Cómo pasar parámetros a un formulario o a un informe?

Tanto si usamos CALL_FORM, OPEN_FORM(ambos para formularios y que tiene una forma que acepta una lista de parámetros) o RUN_PRODUCT (que nos sirve tanto para formularios como para informes) tendremos que definir una lista de parámetros y añadir los parámetro uno a uno. Por ejemplo:

DECLARE parametros Paramlist; /*Definimos la lista de parametros*/BEGIN /*Creamos la lista de parametros*/ parametros := Create_Parameter_List('datos');

/*Añadimos parametros*/ Add_parameter(parametros,'empleado',TEXT_Parameter,:persona.nombre); Add_parameter(parametros,'tipo',TEXT_Parameter,'Pago');

/*Llamamos a un informe con parametros*/ Run_PRODUCT(REPORTS,'LibroContabilidadEmpleadoTipo',SYNCHRONOUS, RUNTIME, FILESYSTEM,parametros ,NULL);END;

Page 99: Tutorial de Oracle Developer

En el anterior ejemplo añadimos a la lista de parámetros llamada parametros dos parametros de texto (TEXT_PARAMETER) cuyo nombre son empleado y tipo y en el primero le pasamos el valor cogiendo de un campo de un bloque de datos ( persona.nombre) y en el segundo le pasamos una cadena ('Pago').

24. ¿Cómo usar los parámetros de un informe en la consulta?

En el Report Builder, Iniciamos el asistente y creamos una consulta temporal que no utilice los paramétros.

Una vez creada la consulta, desde el navegador de objetos creamos dos Parámetros del Usuario con sus respectivos nombres y tipos (siguiendo el ejemplo anterior les ponemos Empleado y Tipo, usando el Tipo de Dato Cararacter). Ejecutamos el Asitente de Informes y en la pestaña datos modificamos la consulta para que utilice los parámetros (en nuestro caso sería, por ejemplo, select * from librocuentas where persona= :empleado AND tipooperacion= :tipo;)

25. ¿Cómo quitar la ventana que te pide los parámetros de un informe?

Desde el Reports Builder con el informe abierto, nos vamos a herramientas->Constructor de Pantalla de Parametros. Dejamos en blanco el Titulo, la Linea de Indicación y la Línea de Estado, además deseleccionamos aquellos atributos que estuviesen seleccionados en la lista.

26. ¿Se puede utilizar una lista dinámica para una clave primaria o para una clave externa utilizada en una relación?

No se debe, ya que la lista está vacía al principio (sólo tiene el valor por defecto) y posteriormente la rellenas cuando se crea el formulario, si está la clave primaria vacía o la clave externa vacía no puede recuperar bien los datos de la base de datos, ni hacer bien las relaciones.

Lo aconsejable sería utilizar bloque LOV.

27. Me gustaría que al entrar a un formulario, se realizara automaticamente Execute_query con un campo relleno. ¿Cómo lo hago?

Supongamos que lo que queremos hacer es que en el formulario de Recursos Humanos empiece siempre mostrando al empleado 'Ignacio'. Para ello en el

Page 100: Tutorial de Oracle Developer

disparador WHEN-NEW-FORM-INSTANCE del formulario añadimos el siguiente código:

DECLARE

bloquedatos Block;BEGIN/*Nos vamos al bloque de datos en el que queremos hacer la

consulta*/ bloquedatos := Find_Block('Persona');

/*Modificamos la clausula WHERE del bloque de datos*/ Set_Block_Property(bloquedatos,DEFAULT_WHERE, ' nombre = ''Ignacio'' ');

/*Ejecutamos la consulta*/ Execute_Query;

END;

28. ¿Cómo pasar parametros de un formulario a otro?

Supongamos que en el formulario de Acceso al darle al botón Aceptar queremos que se pase el nombre del empleado que se ha identificado de forma que en el formulario de RecursosHumanos (llamador por Acceso) se nos muestren los datos de dicho empleado.

Lo primero que tendremos que hacer es modificar el código del botón Aceptar en el formulario Acceso para que mande el nombre del empleado como parámetro al llamar al formulario RecursosHumanos:

open usuario;fetch usuario into tipo;

if :persona.edad = tipo.edad then

/*Creamos la lista de parametros*/ parametros := Create_Parameter_List('datos');

/*Añadimos como parametro la persona que se ha identificado*/ Add_parameter(parametros,'empleado',TEXT_Parameter,:persona.nombre);

/*Llamamos al formulario de Recursos Humanos*/ Run_PRODUCT(FORMS,'RecursosHumanos',SYNCHRONOUS, RUNTIME, FILESYSTEM,parametros ,NULL); /*cerramos el de acceso*/

exit_form;else /*En caso de fallo mostramos un Alert diciendo que hay un

acceso erroneo*/ ignora:=Show_Alert('errorAcceso');

Page 101: Tutorial de Oracle Developer

/*Limpiamos para empezar de nuevo*/ CLEAR_FORM(NO_VALIDATE);end if;

close usuario;END;

Lo segundo que haremos es modificar el formulario de RecursosHumanos para que se inicialice con la persona que se le pasa como parámetro. Antes de anda tendremos que definir un nuevo parámetro en el navegador de objetos (dándole a crear) y le daremos nombre EMPLEADO (el nombre con el que lo llamamos desde el formulario Acceso) y que sea de tipo carácter. Después modificaremos el disparador WHEN-NEW-FORM-INSTANCE como en la pregunta anterior pero cambiando la línea Set_Block_Property(bloquedatos,DEFAULT_WHERE, ' nombre = ''Ignacio'' '); por Set_Block_Property(bloquedatos,DEFAULT_WHERE, ' nombre = :Parameter.empleado ');.

29. ¿Cómo saber que valor he escogido de un grupo de Radio Button?

Para cada botón de un grupo de Radio buttons tenemos que activar la propiedad Valor de Botón de Radio a un valor diferente, por ejemplo 1, 2 y 3 si tenemos tres botones. Posteriormente para saber que valor tiene, si el grupo de botones de radio se llama GBRADIo y está en el bloque de datos PERSONA, tendremos que comparar :Persona.gbradio con 0, 1 y 2 para saber que botón es el que está activado. Para el grupo de Radio buttons (GBRADIO en nuestro caso) habrá que poner la propiedad ValorInicial a uno de los valores introducidos en los radio buttón, por ejemplo, 1 para que se marque ese por defecto.

30. ¿Cómo saber si he marcado un checkbox?

Tendremos que inicilizar las propiedades Valor Si Está Comprobado y Valor Si No Está Comprobado, por ejemplo a 1 y 0, el primero si está marcado y el segundo para si no lo está. Posteriormente para saber que valor tiene, si el checkbox se llama MiCheckBox y está en el bloque de datos PERSONA, tendremos que comparar :Persona.micheckbox con 1 ó 0 para saber si está activado o no.

31. ¿Cómo incrementar el campo código si uso secuencias?

Igual que cuando lo vimos en la pregunta ¿Cómo generar valores consecutivos (un código) para un campo desde un formulario? pero podemos poner SELECT misecuencia.NEXTVAL INTO :productos.codigo FROM dual;

Page 102: Tutorial de Oracle Developer

32. ¿Cómo incrementar el campo código si tengo una letra antes del número?

Básicamente como muestra el siguiente código:

DECLAREcadena1 varchar2(50);cadena2 varchar2(50);numero number;

BEGIN /*Me quedo con la subcadena que tiene el numero*/

cadena1:=substr(:Productos.codigo.texto,2,length(:Productos.codigo)); /*Lo paso a numero*/numero:=TO_number(cadena1);

/*Lo incremento*/numero:=numero+1;

/*Lo vuelvo a pasar a cadena*/cadena2:=TO_CHAR(numero);

/*Le añado la letra la principio*/cadena1:='T'||cadena2;

/*Actualizo la clave*/:Prodcutos.codigo :=cadena1;

END;

Hay que tener en cuenta que esto está pensado para códigos que tiene una sóla letra (la T) antes de un número y que incrementa el que se encuentra en el formulario (para obtener el maximo a partir de la tabla se podría hacer con un SELECT INTO con un ORDER BY para que los ordene).

33. ¿Quiero crear una tabla donde tenga una comprobación de tiempo respecto a la fecha actual ¿Cómo lo hago?

No se puede hacer, ya que no se puede usar SYSTIME en la creación de tablas. Ten en cuenta que la tabla se crea una vez y usar SYSTIME en una clausula CHECK sería algo dinámico. Para hacerlo se pueden usar disparadores (triggers) dentro de la base de datos, pero eso se sale un poco de nuestros objetivos, lo ideal sería hacer las comprobaciones en nuestra aplicación.

34. ¿Cómo hago que en mi formulario se vea sólo la parte de una tabla que cumple determinadas características?

Page 103: Tutorial de Oracle Developer

Los bloques de datos de nuestros formularios son consultas a la base de datos pero que no tienen, por defecto, una clausula WHERE. Esta clausula WHERE se puede definir en la paleta de propiedades de los bloques de datos algo que hicimos en PL/SQL en las preguntas 24 y 25.

35. Tengo una serie de bloques de datos en el mismo formulario y que no están relacionados (por ejemplo, varias pestañas) y al ejecutar un execute_query (ejecutar consulta) sólo se me rellena el primero de ellos ¿cómo relleno los demás?

Rellenando cada uno por separado en el disparador WHEN-NEW-FORM-INSTANCE:

Go_Block('librodecuentas'); Execute_Query; Go_Block('personas'); Execute_Query; Go_Block('empleados'); Execute_Query; Go_Block('alojamiento'); Execute_Query;

36. Tengo una especialización y tengo problemas para mostrarla junto su generalización ¿cómo lo hago?

Como cualquier otras dos tablas que están relacionadas, si aún así tienes problemas puedes usar una vista para unir todos los campos de ambas tablas

37. Quiero hace un un insert/update dentro de un disparador, pero no funciona ¿cómo hago que funcione?

Este problema se suele dar cuando tenemos un bloque de datos a partir de una tabla de la base de datos y queremos realizar alguna operación sobre dicha tablas. El problema está en que Forms abre la tabla (para usarla, lógico) y la bloquea de forma que cualquier operación insert/update sobre dicha tabla fallará. La única solución a este problema es no usar dicha tabla para construir un bloque de datos (y contruir el bloque de datos manualmente, rellenando sus datos desde PL/SQL), o bien, usar el form para añadir/actualizar registros en la base de datos.

38. ¿Hay que entregar el diseño de la aplicación otra vez?

Si. Hay que entregarlo con los fallos corregidos, que ya se indicaron en su día.

Page 104: Tutorial de Oracle Developer

39. ¿Cómo preparo los ficheros de mi aplicación para que no me den problemas con las rutas (path)?

Lo ideal sería que todos los ficheros estuvieran en un CD y se pudiese ejecutar desde ahí. Aunque también se puede optar por guardar todos los ficheros en un directorio (o estructura sencilla) que cuelgue de C: e indicarlo de forma muy clara en la entrega.

Tomado de: http://flanagan.ugr.es/docencia/2005-2006/2/developer/inicio.html