ORACLE FORMS

malloc
16 de Enero del 2009
Como puedo insertar más de una fila en un elemento de texto de un form?.
El código que utilizo es:

DECLARE
CURSOR c1 IS
SELECT * FROM EMP
WHERE deptno = :PARAMETER.deptno;

BEGIN

FOR c1_rec IN c1 LOOP
:emp.empno := c1_rec.empno;
:emp.ename := c1_rec.ename;
:emp.job := c1_rec.job;
:emp.sal := c1_rec.sal;
:emp.comm := c1_rec.comm;

END LOOP;

END;

Inserta todos las filas, pero sólo visualiza la última porque sobreescribe las anteriores. Qué puedo hacer para que esto no suceda y pueda ver todos los registros?.

Gracias.


tronx
16 de Enero del 2009
mira cuate, una linea antes de tu END LOOP inserta: next_record;

ivg182
16 de Enero del 2009
No es necesario hacer next_record ya que el propio loop lo lleva implícito.

Un saludo.

ivg182
16 de Enero del 2009
Pero por qué no creas un bloque de datos, de base de datos, con la tabla EMP? Si lo haces con el asistente te pregunta si se trata de un bloque multiregistro y los campos que quieres mostrar. Vaya, lo puedes hacer con el cursor pero tendrias que insertar una nueva fila cada vez, que viene a ser lo mismo que crear un bloque multiregistro de base de datos.

Ej:

DECLARE
CURSOR c1 IS
SELECT * FROM EMP
WHERE deptno = :PARAMETER.deptno;

BEGIN

go_block(emp); -- Va al bloque donde vamos a insertar las filas.

FOR c1_rec IN c1 LOOP
down; -- Inserta una fila.
:emp.empno := c1_rec.empno;
:emp.ename := c1_rec.ename;
:emp.job := c1_rec.job;
:emp.sal := c1_rec.sal;
:emp.comm := c1_rec.comm;
END LOOP;

first_record; -- Te lleva al primer registro.
END;

Un saludo.

Eoquiroz
16 de Enero del 2009
Si requiero que no se puedan modificar los datos de ese bloque? He intentado con set_item_properties , utilizando ENABLED en modo FALSE pero marca error de propierties, set_block no tiene una propiedad similar. Ya he bloqueado desde las propiedades los campos del bloque sin embargo solo inserta el ultimo registro, sin bloquear se insertan todos.
Como puedo solucionar esto, de antemano gracias.

malloc
16 de Enero del 2009
Gracias, el bloque de datos no tenía la propiedad multiregistro y por eso no no me mostraba todos los registros. No ha sido necesario utilizar DOWN.

Gracias.