製作登入、資料登錄畫面,按鈕觸發:
When-Button-Pressed
要實現下面幾個功能。 1。保存功能 : 輸入資料以後,按此按鈕保存到對應變數裏。
2。消除功能 : 消除所有輸入,恢復到原始狀態
3。輸出功能 : 將此表輸出到C:\aaa
4。翻頁功能 : pageup 翻到上個畫面,pagedown下個畫面。
5。數據登入 : 順序排列,比如輸入 D,B,C,A 登陸時候按照A,B,C,D 排列
6。條件判斷 : 比如A項必須填寫,否則彈出錯誤對話方塊;如果填寫B項,但是資料庫裏面沒有B,也彈出對話方塊。
7。可能出現的錯誤、問題和bug。
When-Button-Pressed
要實現下面幾個功能。 1。保存功能 : 輸入資料以後,按此按鈕保存到對應變數裏。
2。消除功能 : 消除所有輸入,恢復到原始狀態
3。輸出功能 : 將此表輸出到C:\aaa
4。翻頁功能 : pageup 翻到上個畫面,pagedown下個畫面。
5。數據登入 : 順序排列,比如輸入 D,B,C,A 登陸時候按照A,B,C,D 排列
6。條件判斷 : 比如A項必須填寫,否則彈出錯誤對話方塊;如果填寫B項,但是資料庫裏面沒有B,也彈出對話方塊。
7。可能出現的錯誤、問題和bug。
第一步 當然是建表了
example : -- create table
drop table t_tname;
create table t_tname(xh number(2), -- 序號
xm varchar2(10), -- 姓名
csrq date, -- 出生日期
bz varchar2(100), -- 備註
constraint pk_t_tname primary key(xh));
下面以表格 t_tname 為例
第二步 就是實現功能了
打開form builder 前期準備工作
首先要有一個畫布、視窗(假如將其名字名為cc_main,w_main)兩者必須對應,然後就是添加資料塊(就是選擇你建立的表格)佈局畫面,按照提示一步一步完成了,最後將你需要實現什麼功能添加功能按鈕,放在另外一個非資料庫塊
然後就是代碼編寫了。
1.WHEN-NEW-FORM-INSTANCE(進入FROM時執行) 所要做的就是初始化視窗和一些自己需要的查詢
1.1 將初始化視窗寫成一個過程
PROCEDURE Prc_Init_Windows IS
BEGIN
Set_Window_Property(Forms_Mdi_Window,TITLE,'WINDOW_NAME'); --設置多文檔視窗標題
Set_Window_Property(Forms_Mdi_Window,WINDOW_STATE,maximize); --設置多文檔視窗最大化
Set_Window_Property('W_Main',WINDOW_STATE,maximize); --設置主視窗最大化
:System.Message_Level:='15'; --設置資訊提示級別
END;
然後直接調用過程在WHEN-NEW-FORM-INSTANCE觸發器裏
-- code
Prc_Init_Windows;
GO_BLOCK('t_tname');
SET_BLOCK_PROPERTY('t_tname',INSERT_ALLOWED,PROPERTY_false);
SET_BLOCK_PROPERTY('t_tname',UPDATE_ALLOWED,PROPERTY_false);
execute_query; -- 內置副程式執行查詢(查詢所有記錄)
2.添加 (所要做的就是保證序號不能為空,關鍵字)
兩種操作方法一種直接在介面上輸入,二種彈出另外一個視窗進行操作
就講第一種吧,定義一個form參數p_xh (在物件導航器裏面定義)
declare
nXH NUMBER(2);
BEGIN
GO_BLOCK('t_tname');
SET_BLOCK_PROPERTY('t_tname',INSERT_ALLOWED,PROPERTY_TRUE);
SET_BLOCK_PROPERTY('t_tname',UPDATE_ALLOWED,PROPERTY_false);
last_record;
create_record;
select max(xh) into nXH from t_tname;
:parameter.p_xh := nXH;
:t_tname.xh := :parameter.p_xh;
END;
在t_tname資料塊中添加WHEN-NEW-RECORD-INSTANCE觸發器
if get_block_property('t_tname',insert_allowed) = 'true' then
if :t_tname.xh is null then
:parameter.p_xh := :parameter.p_xh + 1;
:t_tname.xh := :parameter.p_xh;
end if;
end if;
3.修改
GO_BLOCK('t_tname');
IF :t_tname.XH IS NOT NULL THEN
SET_BLOCK_PROPERTY('t_tname',INSERT_ALLOWED,PROPERTY_FALSE);
SET_BLOCK_PROPERTY('t_tname',UPDATE_ALLOWED,PROPERTY_TRUE);
END IF;
4.刪除
GO_BLOCK('t_tname');
IF :t_tname.XH IS NOT NULL THEN
SET_BLOCK_PROPERTY('t_tname',delete_ALLOWED,PROPERTY_true);
delete_record;
commit;
SET_BLOCK_PROPERTY('t_tname',delete_ALLOWED,PROPERTY_false);
END IF;
5.保存
GO_BLOCK('t_tname');
COMMIT;
SET_BLOCK_PROPERTY('t_tname',delete_ALLOWED,PROPERTY_FALSE);
SET_BLOCK_PROPERTY('t_tname',INSERT_ALLOWED,PROPERTY_FALSE);
SET_BLOCK_PROPERTY('t_tname',UPDATE_ALLOWED,PROPERTY_FALSE);
6.撤銷
DECLARE
P_WHERE VARCHAR2(200);
BEGIN
GO_BLOCK('t_tname');
CLEAR_BLOCK(NO_COMMIT);
P_WHERE := GET_BLOCK_PROPERTY('t_tname',DEFAULT_WHERE);
SET_BLOCK_PROPERTY('t_tname',DEFAULT_WHERE,P_WHERE);
EXECUTE_QUERY;
END;
7.查詢
以姓名和出生日期為欄位進行查詢,從新添加一個視窗和畫布,一個查詢非資料塊(例如塊名為BLK_QUERY)
DECLPARE
P_WHERE VARCAHR2(200) := '1=1';
BEGIN
IF :BLK_QUERY.XM IS NOT NULL THEN
P_WHERE := P_WHERE||' AND XM = '||CHR(39)||:BLK_QUERY.XM||CHR(39);
END IF;
IF :BLK_QUERY.CSRY IS NOT NULL THEN
P_WHERE := P_WHERE||' AND TO_CHAR(CSRY,''YYYYMMDD'') = '||CHR(39)||TO_CHAR(:BLK_QUERY.CSRY,'YYYYMMDD')||CHR(39);
END IF;
GO_BLOCK('t_tname');
CLEAR_BLOCK(NO_VALIDATE);
SET_BLOCK_PROPERTY('t_tname',DEFAULT_WHERE,P_WHERE);
EXECUTE_QUERY;
END;