Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Preguntas Frecuentes
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?
Inicio 4. ¿Cómo conectar Oracle Developer con la base de datos Oracle de mi ordenador?
Instalación 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?
Forms 7. ¿Cómo referenciar a una clave externa con dos campos?
Developer 8. ¿Cómo almaceno horas en Oracle o fechas y horas?
Reports 9. No me recupera ningún registro desde Developer pero desde Sql Plus al hacer un select me salen los datos ¿Qué
Developer pasa?
10. ¿Cómo usar mis imágenes para decorar los formularios/informes?
Preguntas 11. ¿Cómo generar valores consecutivos (un código) para un campo desde un formulario?
Frecuentes 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
Fco. Javier
no se muestra ¿Por qué?
García
14. ¿Cómo hacer un acceso identificado para mi aplicación?
Castellano
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?
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)?
Respuestas
flanagan.ugr.es/docencia/2005-2006/2/developer/faq.html 1/8
28/6/2020 Tutorial Oracle Developer
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:
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)
que utilice TCP/IP. No cambiar (si lo permite) el puerto por defecto 1521
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.
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)
5. Por ultimo hay que ejecutar lo siguiente desde una ventada de DOS:
C:\>sqlplus /nolog
SQL> connect / as sysdba
Conectado.
SQL> shutdown immediate
SQL> startup restrict
SQL> alter database character set internal_use UTF8;
SQL> shutdown immediate
SQL> startup
6. Para conectarse:
User Name: system
Password : (Password que colocaron al momento de instalar Oracle XE)
database : XE
flanagan.ugr.es/docencia/2005-2006/2/developer/faq.html 2/8
28/6/2020 Tutorial Oracle Developer
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)*/
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;
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;
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.
flanagan.ugr.es/docencia/2005-2006/2/developer/faq.html 3/8
28/6/2020 Tutorial Oracle Developer
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;
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.
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, 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.
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
/*Añadimos parametros*/
Add_parameter(parametros,'empleado',TEXT_Parameter,:persona.nombre);
Add_parameter(parametros,'tipo',TEXT_Parameter,'Pago');
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').
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?
flanagan.ugr.es/docencia/2005-2006/2/developer/faq.html 5/8
28/6/2020 Tutorial Oracle Developer
Supongamos que lo que queremos hacer es que en el formulario de Recursos Humanos empiece siempre
mostrando al empleado 'Ignacio'. Para ello en el 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');
/*Ejecutamos la consulta*/
Execute_Query;
END;
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 ');.
flanagan.ugr.es/docencia/2005-2006/2/developer/faq.html 6/8
28/6/2020 Tutorial Oracle Developer
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.
32. ¿Cómo incrementar el campo código si tengo una letra antes del número?
Básicamente como muestra el siguiente código:
DECLARE
cadena1 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 incremento*/
numero:=numero+1;
/*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?
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,
flanagan.ugr.es/docencia/2005-2006/2/developer/faq.html 7/8
28/6/2020 Tutorial Oracle Developer
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.
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.
fjgc@decsai.ugr.es
flanagan.ugr.es/docencia/2005-2006/2/developer/faq.html 8/8