Llenar una lista con datos de una tabla en Oracle Forms-En dÃas anteriores tuve que resolver el hecho de llenar una lista desplegable, o lo que podemos conocer como un List Item, con datos que provinieran de una tabla de mi base de datos Oracle 9i. Comúnmente colocamos los los valores que contendrá la lista en la propiedad ‘Elements in List’ de nuestro list item, pero si no quiero que estos valores sean fijos sino que deseo sacarlos de una tabla,.. cómo hago esto por código ? Pues bien, lo primero que debemos hacer es quitar cualquier dato que haya en la propiedad ‘Elements in List’ del List Item que hemos creado, luego debemos crear un record group que nos permita introducir un query (select) para traernos los valores de la tabla que deseamos. Pero mejor veamos el código y lo vamos describiendo paso a paso:
1 PROCEDURE CREACION_LISTA IS
2 RG_NAME VARCHAR2(40):='LISTA';
3 RG_ID RECORDGROUP;
4 IT ITEM;
5 ERR NUMBER;
6 BEGIN
7 RG_ID:=FIND_GROUP(RG_NAME);
8 IT:=FIND_ITEM('E.NOMBREDEPTO');
9 IF Id_Null(RG_ID) THEN
10 RG_ID:=CREATE_GROUP_FROM_QUERY(RG_NAME,'SELECT NOMBREDEPTO,CODDEPTO FROM DEPARTAMENTOS ORDER BY NOMBREDEPTO');
11 END IF;
12 ERR:=POPULATE_GROUP(RG_NAME);
13 IF ERR=0 THEN
14 Clear_List(IT);
15 POPULATE_LIST(IT,RG_NAME);
16 END IF;
17 END;
En la lÃnea 2 declaramos un nombre para nuestro record group.
En la lÃnea 3 declaramos una variable de tipo Record Group para posteriormente crear nuestro record group que nos permitirá obtener los datos de la tabla que necesitamos.
En la linea 4 declaramos una variable de tipo item que nos permitirá trabajar con el item de tipo List que hemos creado en nuestra forma.
En la lÃnea 5 declaramos una variable numérica que nos servirá para alojar la respuesta de una función posteriormente.
Una vez iniciamos el cuerpo de nuestro código, lo primero que debemos hacer, según la lÃnea 7 es un Find_Group que nos permitirá saber si ese record group ya existe, esta función devuelve un ID del record group si este existe.Luego según la lÃnea 8, verificamos si existe en nuestra forma un item, perteneciente a un bloque E, llamado NOMBREDEPTO(es ejemplo, ustedes colocan el nombre de su item), la función Find_Item retorna un ID si encuentra un Item con el nombre que le hemos dado. En la lÃnea 9 se pregunta si el id que devolvio el Find_group es null, si es asà quiere decir que ese record group aun no ha sido creado, de esta manera en el paso 10 creamos el record group a través de la función CREATE_GROUP_FROM_QUERY que nos permitirá crearlo a partir de un query. Los parámetros que debe contener esta función son el nombre del record group de tipo varchar2 y el query tambien varchar2; es importante mencionar que en el select el primer dato corresponde al Item desplegado y el segundo al valor que tiene asociado ese item desplegado como los datos que nos pide cuando empleamos el ‘Elements in List’ y ambos deben ser varchar2, si en nuestra tabla no estan asà sino númericos podemos emplear la función TO_CHAR. Luego en la lÃnea 12 el Populate_Group ejecuta el query asociado con el record group y retorna un número indicando si fue satisfactorio o no; si es satisfactorio retorna un cero, por ello en el paso 13 si la variable ERR es igual a 0 limpiamos la lista(por seguridad…lÃnea 14), luego hacemos un populate_list, cuyos parámetros son el nombre del item(list item) y el nombre del record group creado, que nos permite remover lo que haya en la lista y cargarle los valores que nos brinda el record group a través de su query(lÃnea 15).
De esta manera podemos tener nuestra lista desplegable con datos de una tabla…
4 comments ↓
Gracias,
Ni sabia que era tu pagina, pero me sirvió.
Interesante Post….
Le dare tus gracias a mi novia… ella fue la que lo escribió…
Hola, hice el recor grouo y me funciona suoer bien. el problema es que despues que guardo la data y hago un F7 F8 me dice que no consigue registros, y claro es logico porque la lista del campo List Item esta vacio. como hago para que el bloque no valide contra este campo y me traiga la informacion?
Leave a Comment