製作登入、資料登錄畫面,按鈕觸發:
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;

版主您好, 無意間看到您的網頁,真是收益良多.想請教您是否知道市面上有不錯的oracle Form & Report 書籍?由於我目前剛接觸Oracle Erp想多了解一些Developer的內容.如果有不錯的書籍是否可以介紹給我呢?非常感謝您.
可以買大陸的書來看.寫的滿仔細的.
基本上,這方面的書不多吔,不過建議你可以去oracle 下載原文檔來看 或者上網看一下別人怎麼做的. http://www.oradev.net/bbs_list.jsp?bbs_id=0010&bbs_page_no=1 不然我可以把我收集的文件,寄給你參考.或者你開發時遇到什麼問題, 可以POST上來一起研究..就這樣啦.
請問版主, 因為我剛進公司,希望趕快學好Oracle 開發. 想請教您剛開始接觸Oracle Form & Oracle Report.您是怎麼學習的呢?可以跟我分享您的經驗嗎?我想從中學習. 如果方便的話也可以麻煩您寄文件給我,讓我參考嗎?如果看不到mail請在留言給我. 真的非常感謝您耶~
http://download-west.oracle.com/docs/cd/B11454_01/11.5.9/html/erpset.html
謝謝喔~
被罵多了就學好了。2~5年可以出師,看你要投入多少下班時間。 就這樣
1樓的大大..原文對剛入門看起來還真有點吃力..我也有找過這方面的書...繁體的書松崗幾百年前有出過一本吧....簡體的(版本較新)..網拍上有一兩本..可以去找看看..
多謝大大的教學, 小弟獲益良多.... 但係想問下那裏可以找到相關資料, 因為網上找的對入門的小弟我有點吃力....
你想找那方面的.