PB中数据窗口的数据有效性验证及错误处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PB中数据窗口的数据有效性验证及错误处
理
2002年第4期青岛远洋船员学院VOL.23NO.4
PB中数据窗口的数据有效性
验证及错误处理
乔显亮李莉莉
(青岛远洋船员学院管理系)
提要数据窗口是PowerBuilder中功能非常强大的对象,它是用来恢复,
提交和操纵关系数据表中数据的主要界面.从数据窗口的基本编辑单元入手,
分析PowerBuilder中处理数据的几个层次与剖析数据窗口处理数据的过程并分析数据有效性验证过程中可能出现的不同结果,可为优化系统的提示信息提供
有效方法.
关键词数据窗口有效性验证
PowerBuilder可以在多层次上处理应用程序的错误,我们这里介绍通过数据窗口控
制错误数据的输入,数据窗口的数据在被更新到数据库之前必须要经过一系列数据有效
性验证.数据如何通过一个数据窗口进人数据库这一结构变得很重要,图1说明了这一
过程.
-
圈
,l,
1
,
,,\
,,,
,ll§
i《1一II量h,\,
囊,\\
编辑控件数据窗口数据窗口主缓冲区数据库
图1数据窗口中的数据如何进入到数据库中
上述过程的原理是:用户在数据窗口的编辑控件(或称作表元)中输人数据后,如果用户按Esc键,那么数据将会从Edit控件中删除,并且再也不会被数据窗口见到,因为这
时候的所输入的数据只是"飘浮"在编辑控件上面,还没有到达数据窗口主缓冲区.如果
l8?
2002年第4期青岛远洋船员学院VOL.23NO.4
对数据窗口可见的话,数据将首先会通过数据窗口本身的有效性验证循环,而且必须成功
地完成循环中的每一步,数据才能移人数据窗口主缓冲区,但此时它仍没有进入数据库,
只有当Update()函数被成功执行时,该情况才发生.即使如此,直到遇到COMMIT 语句
时,更新过程才会最终完成.当数据从数据窗口主缓冲区到达数据库中的过程中,数据库
系统对于数据还要进行一次有效性检验,比如:数据的宽度,小数位数等,不过,下面我们
只是讨论数据从编辑控件到达数据主缓冲区的有效性检验及过程.
对于数据从编辑控件到达数据主缓冲区的有效性验证通常是通过建立hemChanged
事件来完成的.使用ItemChanged事件能够在错误发生时对之进行精确地捕捉和处理.
那么,什么情况下才触发ItemChanged事件呢?在一个数据窗口中,当某个域被修改而且失去焦点(例如用户在其他域中单击了鼠标和按了Enter键,Tab键或向上,向下箭
头)就会触发ItemChanged事件,此时该事件将执行:
第一,让数据通过数据类型检验;
第二,让数据通过一条有效性验证规则(假定该规则已为此列定义);
第三,检测数据是否发生了变动,并决定是否接受该数据.
不过,对于上述条件,如果没有遇到条件1或条件2,则触发的是ItemError事件而不是ItemChanged事件.
数据有效性验证是怎样实现的呢?
有效性验证的第一步是验证数据类型的正确性.如果数据类型不正确,ItemError事件将被触发.按照缺省条件,hemError拒绝接受此数据值并显示一个提示信息框.用户
可以为ItemError事件编写脚本来进行其他的处理.例如,你可以设置一个返回代码来接
受数据,或者拒绝接受该数据但允许改变焦点.这样就可以从不同的途径来对错误响应.
图2说明了不同的返回代码的结果.
图2第一步:检测数据类型
l9?
2002年第4期青岛远洋船员学院VOL.23NO.4
0——(缺省)接受该数据;
1——拒绝该数据值并触发ItemError事件
2——拒绝该数据值但允许改变焦点位置,用此列的初始值来替换刚输入的数值.程
序员都可以根据上面有效性验证的返回值,要么接受,要么忽略,要么拒绝该数据. 怎样避免因数据类型无法通过验证而出现的系统错误提示呢?我们可以用编程来代
替系统自动的错误处理.下面,我们通过一个简单的例子来说明:
例如,在用户使用DataWindow时,常常习惯将暂时没有的字段空着或输入空格,而对于string类型以外的数据,空字符串不符合数据类型无法通过校验,导致触发ItemError
事件,出现"Item''doesn'tpassvalidationtest"的错误提示,可以在ItemError事件下编程代替系统自动的错误处理.具体编程如下:
IFTrim(data)<>""THEN
//如果用户输入的值不是空格,则拒绝接受数据值,并显示系统的错误信息. RETURN0
ENDIF
//如果用户输入的是空格,则设置为相应类型的NULL值,并允许焦点改变CHOOSECASE1s_
damtype//ls_datatype为字段类型
CASE"long"
Integernull_
num
SetNull(nuU_num)
This.Sethem(row,1s_colname,nuH_num)//1s_colname为字段名
RETURN3
CASE"date"
Datenull_
date
SetNull(null_date)
This.Sethem(1OW,1s_colname,null—date)
RETURN3
ENDCASE
在PowerBuilder中优化错误信息处理的方法解决了一般用户获取并处理PB中常见
错误的问题,对一个完整的,性能良好的应用程序,这是不可缺少的一部分.除了数据窗
口错误,还有数据库错误和系统错误,在开发中,可充分利用面向对象的思想,将各层次的
错误信息进行捕捉处理,做成公用的用户对象,通过各个应用和数据窗口中引用用户对象
以简化和提高应用程序的开发效率.
参考文献
1[美]SteveErlank,CraigLevinPowerBuilder基础教程中国水利水电出版社
2柯建勋等PowerBuilder8.0应用开发清华大学出版社
2l?。