Documentos de Académico
Documentos de Profesional
Documentos de Cultura
html
Preguntas Frecuentes
Preguntas
1. ¿Qué versión de Developer instalo?
2. ¿Qué versión de Oracle instalo?
Inicio 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?
Instalación 5. No consigo conectar con la base de datos Oracle de la ETSII¿Qué pasa?
Forms 6. ¿Cómo conecto Oracle Developer con la base de datos Oracle XE?
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é pasa?
Developer 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?
Preguntas 12. ¿Cómo empezar con el formulario con valores sin tener que pulsar el botón execute_query/ejecuta_consulta?
Frecuentes 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
Fco. Javier 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
1 de 6 31-08-2020 16:38
Tutorial Oracle Developer http://flanagan.ugr.es/docencia/2005-2006/2/developer/faq.html
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
C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN
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
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'));
2 de 6 31-08-2020 16:38
Tutorial Oracle Developer http://flanagan.ugr.es/docencia/2005-2006/2/developer/faq.html
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.
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;.
3 de 6 31-08-2020 16:38
Tutorial Oracle Developer http://flanagan.ugr.es/docencia/2005-2006/2/developer/faq.html
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.
4 de 6 31-08-2020 16:38
Tutorial Oracle Developer http://flanagan.ugr.es/docencia/2005-2006/2/developer/faq.html
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 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 ');.
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;
5 de 6 31-08-2020 16:38
Tutorial Oracle Developer http://flanagan.ugr.es/docencia/2005-2006/2/developer/faq.html
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, 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
6 de 6 31-08-2020 16:38