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

arrow
arrow
    全站熱搜

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