如何将pb的错误换成自定义的错误!???
数据窗口保存时,如果主键重复,将会出现一大堆错误代码,以及英文提示。
如何在程序中避免这些提示从而换成自己的提示信息。
数据窗口grid格式,当保存时,如果有错误,如何知道时主键重复。
即 if XXXXXX then
messagebox("提示信息","代码重复")
return
end if
问题点数:20、回复次数:5Top
1 楼qlzgdzfl(紫风玲)回复于 2002-06-07 21:34:46 得分 15
Tips:消除数据窗口的英文提示 [Close]
//在数据窗口的dberror事件中加入下列代码,可以根据自己需要来扩展出错检测
//文章中的'primary key for'等会根据pb的版本而不同。
if pos(sqlerrtext,'primary key for')<>0 then
messagebox("","记录重复了,请重新输入")
this.setfocus()
this.scrolltorow(row)
return 1
elseif pos(sqlerrtext,'not running')<>0 then
messagebox("","数据库连接不上,请与管理员联系")
return 1
elseif pos(sqlerrtext,"Integrity constraint violation: Column")<>0 then
string ziduan
ziduan=mid(sqlerrtext,80,pos(sqlerrtext,"in table") - 82)
messagebox("","["+this.describe(ziduan+"_t.text")+"]不能为空")
this.setfocus()
this.scrolltorow(row)
this.setcolumn(ziduan)
return 1
end if
//pb6.5中的
integer ls_len,ls_len1,ls_len2,ls_len3,ls_len4
if pos(sqlerrtext,'primary key for')<>0 then
messagebox("","记录重复了,请重新输入")
this.setfocus()
this.scrolltorow(row)
return 1
elseif pos(sqlerrtext,'not running')<>0 then
messagebox("","数据库连接不上,请与管理员联系")
return 1
elseif pos(sqlerrtext,"Integrity constraint violation: Column")<>0 then
ls_len = pos(sqlerrtext,"Integrity constraint violation: Column")
ls_len1 = len("Integrity constraint violation: Column")
ls_len2 = ls_len + ls_len1 + 2
ls_len3 = pos(sqlerrtext,"in table")
ls_len4 = ls_len3 - 2 - ls_len2
string ziduan
ziduan=mid(sqlerrtext,ls_len2,ls_len4)
messagebox("系统提示","[ "+this.describe(ziduan+"_t.text")+" ] 不能为空!",stopsign!)
this.setfocus()
this.scrolltorow(row)
this.setcolumn(ziduan)
return 1
else
messagebox("系统提示","数据发生错误!,是否有一项未输入值,请检查!",stopsign!)
return 1
end if
asa7.0中的
其实简单的,只是一点不同看看sqlerrtext就知道连
Top
2 楼yuanbo824(小波在线)回复于 2002-06-07 22:15:25 得分 5
我把error.number的值换成中文列出来,供大家参考:
1: 被零除
2:引用空对象
3:数组越界
4:枚举值超出函数范围
5:函数中遇到负值
6:指定的数据窗口行/列无效
7:联接引用时,出现不可解决的外部引用
8:引用带有空下标的数据
9:DLL函数未在当前程序中
10:DLL函数不支持的参数类型
11:对象文件已过期,必须转化为当前版本
12:数据窗口列类型与GETITEM类型不匹配
13:不可知的属性引用
14:为外部函数打开错误DLL库
15:错误调用外部函数
16:超出最大字符串长度
17:数据窗口控件中引用的数据窗口对象不存在
18:函数未返回值
19:不能将任意变量中NAME转化为NAME
20:没有成功地准备好数据库命令
21:运行时,不正确地引用函数
22:不可知的对象类型
23:不能将NAME类型的对象赋值为NAME类型的对象
24:函数调用与其定义不匹配
25:DOUBLE或REAL表达式溢出
26:不支持对NAME字段的赋值
27:非整数指数不能为负
28:VBX错误:NAME
29:ANY变量需要非整组值
(不好意思,还没写完,有事,有空再补,请先别结贴)Top
3 楼bzlj(bzlj)回复于 2002-06-07 23:10:58 得分 0
继续!
先收藏!
qlzgdzfl(紫风玲) 那样太麻烦了!
Top
4 楼mxlmwl(飞星)回复于 2002-06-08 00:23:04 得分 0
这个可用itemchanged和数据窗口的losefocus()就可以实现啦,先在itemchanged中写入
if this.find(data,1,this.rowcount())>0 then
messagebox("","")
end if
然后用return 1还是return 2,我忘记了,你自己试试看吧
如果只想区别主键,可以将data用getitemstring或getitemnumber等找出数据,然后用find().
然后可以将dberror,itemerror等事件都可以设为return 1,这样就可以避免讨厌的自带提示了。
然后在losefocus()中写入this.accepttext(),这样就可以避免数据窗口失去焦点而无法触发itemchanged事件的问题了。Top




