国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

技術筆記-Forms的錯誤控制

2024-07-21 02:39:17
字體:
來源:轉載
供稿:網友

  1 前言  
  對于新接觸OracleDeveloper編程的同仁而言,當完成的系統交給用戶時,經常性出現“沒有保存需要修改”,“視圖不可以更新”...之類的錯誤提示是非常尷尬的事。
  系統交付用戶使用后,用戶一定會回饋一些BUG,然而讓用戶重現BUG又是一件非常艱難的工作。
  面對這些問題,解決的途徑仍與其它開發工具一樣,就是錯誤處理的控制。在其它語言中,我們可以通過類似On Error Do xxx...之類的語句來實現,但是在FORMS中,錯誤控制卻往往令新進同仁頭疼不已,不知該在哪里屏蔽錯誤信息。
  本文對Forms的錯誤處理進行簡單論述和應用,并提供錯誤控制基本的程序包,以解決新進同仁對困惑;同時也拋磚引玉,希望各同仁可以不斷充實本文涉及的程序包和錯誤字典,使之成為更加實用的共享代碼。
  
  2 技術要點 
  復雜的問題,仍是由最簡單的方法來實現。
  2.1 錯誤處理相關觸發器
  FORMS的錯誤,全部由On Error和On Message兩個觸發器來控制,比較麻煩的是這兩個觸發器有時會一起觸發,有時又只觸發一個。
  最好的辦法,就是將觸發器的響應程序做得一個程序包,在兩個觸發器中都進行控制。
  
  2.2 相關錯誤代碼
  在On Error觸發器中,一般使用Error_Code,Error_Text,Error_Type系統變量,錯誤代號/錯誤名稱/錯誤類型
  在On Message觸發器中,一般使用Message_Code,Message_Text,Message_Type系統變量
  假如是Oracle后臺錯誤,則通過DBMS_Error_Code和DBMS_Error_Text來獲取相關信息
  
  3 實現與功能
  3.1 體系架構
  3.1.1 創建字典表數據表和相關視圖,存儲在屏蔽的錯誤信息,此時程序的BUG信息仍可以<當然也可以不>顯示于用戶界面
  3.1.2 創建錯誤日志數據表,存儲用戶使用過程中的每一個錯誤信息,該數據表可以為將來系統維護提供非常重要的支持
  3.1.3 創建后臺程序包,對錯誤進行處理。所謂“處理”,在實例中是將錯誤信息寫入錯誤日志,并判定字典表確認該錯誤信息是否顯示于用戶界面
  3.1.4 創建前臺程序包,對錯誤進行處理。所謂“處理”,在實例中只是調用后臺程序包而已。
  
  所有相關文件及代碼:點擊此處下載armok0199700.rar
  
  3.2 創建數據庫運行環境
  -- ============================================================
  --  Table: 錯誤日志數據表                   
  -- ============================================================
  create table SYSTEM_ERRORLOG
  (
    SELKEY     NUMBER(28)       not null,
    ISCONTROL    CHAR(10)        null  ,
    SELCODE     NUMBER(28)       null  ,
    SELTYPE     VARCHAR2(100)     null  ,
    SELTEXT     VARCHAR2(200)     null  ,
    SELMODULE    VARCHAR2(100)     null  ,
    SELBLOCK    VARCHAR2(100)     null  ,
    SELITEM     VARCHAR2(100)     null  ,
    ORACLECODE   NUMBER(28)       null  ,
    ORACLETEXT   VARCHAR2(100)     null  ,
    SQLTEXT     VARCHAR2(500)     null  ,
    SQLSTR     VARCHAR2(500)     null  ,
    SELLOG     DATE          null  ,
    SELUSR     NUMBER(28)       null  ,
    constraint PK_SYSTEM_ERRORLOG PRimary key (SELKEY)
  )
  /
  
  -- ============================================================
  --  Table: 字典表                   
  -- ============================================================
  create table SYSTEM_DICT
  (
    DICTKEY     number(28)       not null,
    DICTCLASS    nvarchar2(100)     null  ,
    DICTPROP    nvarchar2(100)     null  ,
    DICTCODE    nvarchar2(100)     null  ,
    DICTNAME    nvarchar2(100)     null  ,
    UPCLASSKEY   number(28)       null  ,
    MEMO      nvarchar2(1000)    null  ,
    CRTUSR     number(28)       null  ,
    CRTLOG     date          null  ,
    AMDUSR     number(28)       null  ,
    AMDLOG     date          null  ,
    constraint PK_SYSTEM_DICT primary key (DICTKEY)
  )
  /
  
  -- ============================================================
  --  Table: 錯誤日志序列                   
  -- ============================================================
  --系統錯誤日志KEY,用于生成系統錯誤日志的主鍵
  CREATE SEQUENCE SQ_System_SelKey INCREMENT BY 1 START WITH 1
    MAXVALUE 1.0E28 MINVALUE 1 NOCYCLE 
    CACHE 20 NOORDER
  /
  
  -- ============================================================
  --  Table: 要屏蔽的錯誤信息                   
  -- ============================================================
  
  Insert Into System_Dict 
  (DictKey,DictClass,DictProp,DictCode,DictName,UpClassKey,CrtLog,CrtUsr,AmdLog,AmdUsr) 
    Values 
   (112001,'ErrorMsg','AppDict','41051','不能在此創建記錄',Null,SysDate,1,SysDate,1);

  
  Insert Into System_Dict 
  (DictKey,DictClass,DictProp,DictCode,DictName,UpClassKey,CrtLog,CrtUsr,AmdLog,AmdUsr) 
    Values 
   (112002,'ErrorMsg','AppDict','40200','域被保護防止更新',Null,SysDate,1,SysDate,1);
  
  Insert Into System_Dict 
  (DictKey,DictClass,DictProp,DictCode,DictName,UpClassKey,CrtLog,CrtUsr,AmdLog,AmdUsr) 
    Values 
   (112003,'ErrorMsg','AppDict','40602','不能在視圖插入或更新數據',Null,SysDate,1,SysDate,1);
  
  Insert Into System_Dict 
  (DictKey,DictClass,DictProp,DictCode,DictName,UpClassKey,CrtLog,CrtUsr,AmdLog,AmdUsr) 
    Values 
   (112004,'ErrorMsg','AppDict','41050','不能更新此記錄',Null,SysDate,1,SysDate,1);
  
  Insert Into System_Dict 
  (DictKey,DictClass,DictProp,DictCode,DictName,UpClassKey,CrtLog,CrtUsr,AmdLog,AmdUsr) 
    Values 
   (112005,'ErrorMsg','AppDict','40401','沒修改需要保存',Null,SysDate,1,SysDate,1);
  
  Insert Into System_Dict 
  (DictKey,DictClass,DictProp,DictCode,DictName,UpClassKey,CrtLog,CrtUsr,AmdLog,AmdUsr) 
    Values 
   (112006,'ErrorMsg','AppDict','40350','沒有查詢到記錄',Null,SysDate,1,SysDate,1);
  
  Insert Into System_Dict 
  (DictKey,DictClass,DictProp,DictCode,DictName,UpClassKey,CrtLog,CrtUsr,AmdLog,AmdUsr) 
    Values 
   (112007,'ErrorMsg','AppDict','40100','在第一條記錄',Null,SysDate,1,SysDate,1);
  
  Insert Into System_Dict 
  (DictKey,DictClass,DictProp,DictCode,DictName,UpClassKey,CrtLog,CrtUsr,AmdLog,AmdUsr) 
    Values 
   (112008,'ErrorMsg','AppDict','40352','已查詢到最后一條記錄',Null,SysDate,1,SysDate,1);
  
  -- ============================================================
  --  Table: 要屏蔽的錯誤信息清單視圖               
  -- ============================================================
  
  Create Or Replace View VW_System_JumpMsg_Qry AS 
  Select 
  --創建字典視圖:要屏蔽的系統信息
      DictKey 
      ,DictClass 
      ,DictProp 
      ,DictCode 
      ,DictName 
    From System_Dict 
    Where 
      Upper(DictClass)=Upper('ErrorMsg')
      And Upper(DictProp)=Upper('AppDict')
      Order By DictKey
  /
  
  -- ============================================================
  --  Table:錯誤信息后臺程序包               
  -- ============================================================
  create or replace package PKG_System_Assert is
  
   -- Author : RUBYXUE
   -- Created : 2004-4-11 12:59:44
   -- Purpose : 系統維護
   
    --登記前臺系統的錯誤
    Function FN_SystemErrorLog
     (P_SelCode Number
       ,P_SelType Varchar

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荣昌县| 广南县| 富裕县| 甘孜| 察雅县| 汤原县| 隆子县| 文安县| 威海市| 桃园县| 晋江市| 鹤庆县| 若尔盖县| 安阳市| 绍兴市| 张家口市| 宝应县| 保亭| 通河县| 玛曲县| 彝良县| 绥江县| 和田县| 信阳市| 乌拉特前旗| 长阳| 中牟县| 湖南省| 工布江达县| 龙川县| 仙桃市| 石门县| 利辛县| 安阳县| 玉田县| 龙游县| 厦门市| 临沧市| 布尔津县| 渑池县| 无棣县|