//DW的DBError事件
string error_text
CHOOSE CASE sqlDBCode
case 1 error_text = '违反唯一索引!'
case 1400 error_text = '字段不能为空!'
case 1407 error_text = '字段不能为空!'
case 1401 error_text = '字段太长!'
case 1438 error_text = '数值大于列允许的最大精度!'
case 2291 error_text = '出现非法字段!'
case 1031 error_text = '权限不足!'
case 911 error_text = '注册名无效!' //权限专用
case 922 error_text = '特殊字符无效!' //权限专用
CASE 1017 error_text = '非法的用户名或口令,拒绝登录!'
CASE 12154 error_text = '不能分解服务名称!'
CASE 01005 error_text = '未给出口令或口令错误,拒绝登录!'
CASE 01935 error_text = '注册名项输入的名称为系统关键字,禁止作为注册名使用!'
CASE 540 error_text = '数据表或视图不存在!'
CASE 942 error_text = '数据表或视图不存在!'
CASE 903 error_text = '非法列名!'
CASE 1403 error_text = '未查找到符合条件的数据!'
CASE -3 error_text = '在您读入数据和存盘操作过程中,服务器中的数据已被别的用户或窗口改变,请重新读取数据后再试!'
CASE 6 error_text = '网络同数据库服务器的连接已经中断,请关闭应用程序然后重新打开.'
CASE 50 error_text = '网络同数据库服务器的连接已经中断,请关闭应用程序然后重新打开.'
case 1920 error_text = '用户名称与另外的用户或角色名称冲突'
case 988 error_text = '缺少口令或其非法!'
case 1918 error_text = '该ORACLE用户不存在!'
case 1940 error_text = '不能放弃一个当前被连接的操作员,即当前删除的操作员正在使用!'
CASE ELSE
if isnull(sqlca.sqlErrText) or sqlca.sqlErrText = '' then
error_text = '数据操作失败!'
else
error_text = sqlca.sqlErrText
end if
END CHOOSE
return MessageBox('错误',error_text,RetrYCancel!,1)
//DBError参数
Buffer 发生错误所在的缓冲区
Row 发生第一笔错误的行数
SqlDBCode 数据库错误代码
SqlErrText 数据库错误信息
//MessageBox(title,text,icon,button,default)
icon参数:
information! 提示(缺省)
stopSign! 中止
exclamation! 警告
question! 询问
none! 没有
button参数:
ok! 确定(缺省)
okCancel! 确定,取消
yesNo! 是,否
yesNoCancel! 是,否,取消
retryCancel! 重试,取消
abortRetryIgnore! 终止,重试,忽略
//如何在DBError event中处理多笔数据的错误
Rollback Using SQLCA;
If buffer = primary! Then
Messagebox("error in row:" + string(row),"Code:" + string(sqldbcode) + "," + sqlerrtext)
This.scrollToRow(row)
return 1 //避免显示PB缺省的错误信息
end if
//数据窗口的规则检查
当用户在编辑控件中输入数据时,数据并不会立即写入数据窗口的缓冲区中,直到发生下面任何一种情况,
PowerBuilder才会把数据从编辑控件写入数据窗口的缓冲区中.
1.用户按下Enter键
2.用户按下Tab键跳到下一个字段
3.用户按下鼠标键跳到其它字段
4.运行AcceptText()函数
在完全通过4个步骤的规则检查后,才会真正把数据从编辑控件写入数据窗口缓冲区.任何一个步骤的错误
都会产生数据窗口的ItemError Event.数据窗口的数据规则检查步骤如下:
1.数据是否改变?
2.数据类型是否符合?
3.是否符合用户自定字段规则?
4.是否符合ItemChanged Event的程序?
//编辑控件函数
AcceptText():将编辑控件中的数据写入数据窗口缓冲区中.
不要在Itemchanged或ItemError event中编写Acceptext()函数,因为Acceptext()函数有可能驱动
ItemChanged或ItemError event,这将造成死循环的出现.
Ge