2023年11月27日发(作者:)
pb(powerbuilder)异常及错误
⼀、打开任意⼀个数据窗时,提⽰⼀、打开任意⼀个数据窗时,提⽰“sybase powerbuilder已停⽌⼯作”解决⽅法,错误如图所⽰
解决⽅法1:
找到注册表(运⾏:regedit)中HKEY_USERSS-1-5-21-1060284298-1004336348-839522115-
1003SoftwareSybasePowerBuilder9.0LayoutDefault,然后删除其中的Datawindow项⽬
解决⽅法2:
卸载PB 清理注册表,重启电脑,换个路径重新安装。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------
⼆、使⽤return 1 处理报错信息:
在DataWindow的DBError事件下:写脚本return 1 (如果返回1会触发itemchange事件)
Return value
Set the return code to affect the outcome of the event:
0 (Default) Reject the data value and show an error message box
1 Reject the data value with no message box
2 Accept the data value
3 Reject the data value but allow focus to change
itemerror事件的返回值
0——缺省值,显⽰出错信息,拒绝输⼊值并显⽰有效性检查,出错信息同时不允许移⾛焦点;
1——不显⽰出错信息,拒绝输⼊信息,同时不允许移⾛焦点;
2——不显⽰出错信息,接收输⼊值;
3——不显⽰出错信息,拒绝输⼊信息,允许移⾛焦点;
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------
三、
数据管道 错误列表
Integer. Returns 1 if it succeeds and a negative number if an error occurs.
Error values are:
-1 Pipe open failed
-2 Too many columns
-3 Table already exists
-4 Table does not exist
-5 Missing connection
-6 Wrong arguments
-7 Column mismatch
-8 Fatal SQL error in source
-9 Fatal SQL error in destination
-10 Maximum number of errors exceeded
-12 Bad table syntax
-13 Key required but not supplied
-15 Pipe already in progress
-16 Error in source database
-17 Error in destination database
-18 Destination database is read-only
If any argument's value is NULL, Start returns NULL.
String ls_errortext
IF IsNull( ai_ErrCode ) THEN
CASE - 2
ls_errortext = "列数超过上限!错误代码:" + String( ai_ErrCode )
CASE - 3
ls_errortext = "⽬的表已存在!错误代码:" + String( ai_ErrCode )
CASE - 4
ls_errortext = "⽬的表不存在!错误代码:" + String( ai_ErrCode )
CASE - 5 //common start()函数与repair()函数公⽤错误代码
ls_errortext = "连接被断开!错误代码:" + String( ai_ErrCode )
CASE - 6
ls_errortext = "错误参数!"
CASE - 7
ls_errortext = "列类型不匹配!错误代码:" + String( ai_ErrCode )
CASE - 8
ls_errortext = "源SQL语法错误!错误代码:" + String( ai_ErrCode )
CASE - 9 //common
ls_errortext = "⽬的SQL语法错误!错误代码:" + String( ai_ErrCode )
CASE - 10 //common
ls_errortext = "发⽣错误个数超过最⼤界定错误数!错误代码:" + String( ai_ErrCode )
CASE - 11 //repair专⽤错误代码
ls_errortext = "⽆效的窗⼝句柄!错误代码:" + String( ai_ErrCode )
CASE - 12 //common
ls_errortext = "错误的表语法!错误代码:" + String( ai_ErrCode )
CASE - 13
ls_errortext = "空的主键值!错误代码:" + String( ai_ErrCode )
CASE - 15 //common
ls_errortext = "该数据管道已打开!错误代码:" + String( ai_ErrCode )
CASE - 16
ls_errortext = "错误发⽣在源数据库!错误代码:" + String( ai_ErrCode )
CASE - 17 //common
ls_errortext = "错误发⽣在⽬的数据库!错误代码:" + String( ai_ErrCode )
CASE - 18 //common
ls_errortext = "⽬标数据库只读!错误代码:" + String( ai_ErrCode )
END CHOOSE
RETURN ls_errortext
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------
四、
Database transaction information not SetTras or SetTransObject function
1、dw控件没有加settransobject。
3、加了settranobject但位置不对;应该写在增删改查之前。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------
五、
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 -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(Text) or Text = '' then
error_text = '数据操作失败!'
else
error_text = Text
end if
END CHOOSE
return MessageBox('错误',error_text,RetrYCancel!,1)
//DBError参数
Buffer 发⽣错误所在的缓冲区
Row 发⽣第⼀笔错误的⾏数
SqlDBCode 数据库错误代码
SqlErrText 数据库错误信息
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------
六、
PowerBuilder运⾏错误提⽰信息
当程序还未完全完成时,运⾏程序常常会出现错误,触发PB的SYSTEM ERROR,如果没有为这些错误编写脚本,就会触发显⽰这样的⼀
个消息框。它的信息包括错误消息的数⽬和⽂本,并告诉我们是哪个对象的哪个的脚本的哪⼀⾏出现了错误。它是调试程序,修改错误的重
要依据,所以我们有必要很好地了解这些错误信息的具体含义。
错误号含义
1被零除
2引⽤NULL对象
3数组越界
4枚举值超出范围
5中遇到负值
6指定的数据窗⼝⾏/列⽆效
7链接引⽤时,出现不可解决的外部引⽤
8引⽤带有NULL下表的数组
9DLL未当前程序中
10DLL不⽀持的参数类型
11对象⽂件已过期,必须转化为当前版本
12数据窗⼝列类型与GETITEM类型不匹配
13不可知的引⽤
14为外部打开错误DLL库
15错误调⽤外部
16超出最⼤字符串的长度
17数据窗⼝控件中引⽤的数据窗⼝对象不存在
18未返回值
19不能将任意变量中NAME转化为NAME
20没有成功地准备好命令
21运⾏时,不正确地引⽤
22不可知的对象类型
23不能将NAME类型的对象赋值为NAME类型的对象
23不能将NAME类型的对象赋值为NAME类型的对象
24调⽤与其定义不匹配
25DOUBLE或REAL表达式溢出
26不⽀持对NAME字段的赋值
27⾮整型指数不能为负
28X错误:NAME
29ANY变量需要⾮整组值
30外部对象不⽀持数据类型:NAME
31不⽀持外部对象数据类型:NAME
32调⽤外部对象NAME时,未找到名字
33调⽤外部对象NAME时,参数类型不合法
34调⽤外部对象NAME时,使⽤不正确的参数数⽬
35错误调⽤外部对象NAME
36访问外部对象NAME时,未找到名称
37访问外部对象NAME时,类型不匹配
38询问外部对象NAME时,下标数⽬不正确
39错误访问外部对象NAME
40与表达式中任意数据类型不匹配
41表达式中有不合法的任意数据类型
42在DLLNAME中,运⾏时所指定的参数类型与所要求的参数类型不
相同
需要注意的是第50号错误会⽴即中断应⽤程序,但是并不触发SYSTEM ERROR。


发布评论