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

創作者介紹
創作者 oracleD2K 的頭像
oracleD2K

oracle園地

oracleD2K 發表在 痞客邦 留言(8) 人氣()


留言列表 (8)

發表留言
  • Gcat
  • oracle Form&Report 書籍

    版主您好,

    無意間看到您的網頁,真是收益良多.想請教您是否知道市面上有不錯的oracle Form & Report 書籍?由於我目前剛接觸Oracle Erp想多了解一些Developer的內容.如果有不錯的書籍是否可以介紹給我呢?非常感謝您.
  • 可以買大陸的書來看.寫的滿仔細的.

    oracleD2K 於 2012/02/08 19:20 回覆

  • 版主
  • 基本上,這方面的書不多吔,不過建議你可以去oracle 下載原文檔來看
    或者上網看一下別人怎麼做的.
    http://www.oradev.net/bbs_list.jsp?bbs_id=0010&bbs_page_no=1
    不然我可以把我收集的文件,寄給你參考.或者你開發時遇到什麼問題,
    可以POST上來一起研究..就這樣啦.
  • Gcat
  • 非常感謝

    請問版主,

    因為我剛進公司,希望趕快學好Oracle 開發.
    想請教您剛開始接觸Oracle Form & Oracle Report.您是怎麼學習的呢?可以跟我分享您的經驗嗎?我想從中學習.
    如果方便的話也可以麻煩您寄文件給我,讓我參考嗎?如果看不到mail請在留言給我.
    真的非常感謝您耶~
  • Gcat
  • 謝謝喔~
  • DBDBDBA
  • 被罵多了就學好了。2~5年可以出師,看你要投入多少下班時間。
    就這樣
  • horace1123
  • 1樓的大大..原文對剛入門看起來還真有點吃力..我也有找過這方面的書...繁體的書松崗幾百年前有出過一本吧....簡體的(版本較新)..網拍上有一兩本..可以去找看看..
  • OBY
  • 多謝大大的教學, 小弟獲益良多....
    但係想問下那裏可以找到相關資料, 因為網上找的對入門的小弟我有點吃力....
  • 你想找那方面的.

    oracleD2K 於 2012/02/08 19:21 回覆