分享
 
 
 

技术笔记-Forms的错误控制

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有