2012-12-06 27 views
1

我想使列表將在列表dispay值,如文本項BYT:甲骨文表單生成器列表不顯示vayes

我的代碼:

DECLARE rg_dept RecordGroup;

rg_dname VARCHAR2(4) := 'Name'; 

    dlist_ID Item := Find_Item('PROJESCT.LIST_ID'); 

    nDummy  NUMBER; 

BEGIN rg_dept:= Find_Group(rg_dname);

-- Delete any existing Group first 
    IF NOT Id_Null(rg_dept) THEN 
     Delete_Group(rg_dept); 
    END IF; 

    -- Now create a Record Group using a SQL query 
    -- Your Query must have a Label and a Value (two Columns) 
    -- and the data types must match your item type 
    rg_dept := Create_Group_From_Query(rg_dname,'SELECT department_name, to_char(department_id) FROM departments'); 


    --Clear the existing List 
    Clear_List(dlist_ID); 


    -- Populate the Record Group 
    nDummy := Populate_Group(rg_dept); 


    -- Populate the List Item 
    Populate_List(dlist_ID ,rg_dept); 

END;

如果我讓列表項目並添加此代碼,所有窗體將不會顯示,如果我刪除列表一切正常。

p.s. Trigger: when-list-item-change

回答

2

我建議你從例如填充您的列表當全新的外形實例。像往常一樣,您可以從窗體幫助(菜單'幫助/聯機幫助')中瞭解您需要做什麼。這是我僅通過指定列表項目的名稱和選擇語句來填充lsit項目的簡單填充列表的過程。

PROCEDURE populate_list_item (
    p_item_name VARCHAR2 
, p_select VARCHAR2 
) IS 
    l_rg_id   RECORDGROUP; 
    l_list_id  ITEM; 
    l_err_num  PLS_INTEGER; 

    FUNCTION create_temp_group (
     p_select  VARCHAR2 
    ) RETURN RECORDGROUP IS 
     l_rg_id  RECORDGROUP; 
     l_group_name VARCHAR2(30) := 'TMP$RG'; 
    BEGIN 
     l_rg_id := FIND_GROUP(l_group_name); 

     --Make sure that record group don't alreay exist 
     IF NOT ID_NULL(l_rg_id) THEN 
      DELETE_GROUP(l_rg_id); 
     END IF; 

     --Populate the temporary record group 
     l_rg_id := CREATE_GROUP_FROM_QUERY(l_group_name, p_select); 

     RETURN l_rg_id; 
    END create_temp_group; 

BEGIN 
    l_rg_id := create_temp_group(p_select); 

    l_err_num := Populate_Group(l_rg_id); 

    --Allow for no data found in the selection query 
    IF l_err_num NOT IN (0, 1403) THEN 
     RAISE Form_Trigger_Failure; 
    END IF; 

    l_list_id := Find_Item(p_item_name); 
    IF ID_NULL(l_list_id) THEN 
     RAISE Form_Trigger_Failure; 
    END IF; 

    Populate_List(l_list_id, l_rg_id); 

    Delete_Group(l_rg_id); 
END populate_list_item; 

的當-新表格-實例是一種形式的水平觸發並應的形式(的塊或項目代替)下:

Adding of When-New-Form-Instance

+0

當我在這裏找到這個觸發器時,新的窗體實例,當我點擊列表中不能找到只有當列表chenge或類似這樣的東西。 – Wizard

+1

When-New-Form-Instance是表單級別觸發器,因此可以直接在表單模塊名稱下找到。 – DJPeter

2

最好的辦法是在設計時建立所有的記錄組。它不會減慢性能,除非你有一些巨大的,已經很慢的表單。然後在運行時填充您的列表項。始終從Forms幫助複製/粘貼代碼。

--Oracle Forms Example: Create a record group from a query, and populate it.

DECLARE 
    rg_name VARCHAR2(40) := 'Salary_Range'; 
    rg_id RecordGroup; 
    errcode NUMBER; 
BEGIN 
/* 
** Make sure group doesn't already exist 
*/ 
rg_id := Find_Group(rg_name); 
/* 
** If it does not exist, create it and add the two 
** necessary columns to it. 
*/ 
IF Id_Null(rg_id) THEN 
rg_id := Create_Group_From_Query(rg_name, 
    'SELECT SAL-MOD(SAL,1000) BASE_SAL_RANGE,' 
    ||'COUNT(EMPNO) EMPS_IN_RANGE ' 
    ||'FROM EMP ' 
    ||'GROUP BY SAL-MOD(SAL,1000) ' 
    ||'ORDER BY 1'); 
END IF; 
/* 
** Populate the record group 
*/ 
    errcode := Populate_Group(rg_id); 
END; 
+0

在哪裏可以找到'表help' ,你關於F1? – Wizard

+0

當您打開它時,在窗體構建器中選擇是,F1或幫助菜單。我從上面的幫助複製代碼... – Art