pb(powerbuilder)异常及错误
一、打开任意一个数据窗时,提示“sybase powerbuilder已停止工作”解决方法,错误如图所示
解决方法1:
找到注册表(运行:regedit)中HKEY_USERS\S-1-5-21-1060284298-1004336348-839522115-1003\Software\Sybase\PowerBuilder\9.0\Layout\Default,然后删除其中的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——不显示出错信息,拒绝输入信息,允许移走焦点;
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
三、数据管道 pipelineobject.Start 错误列表
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
ls_errortext = "传递了空参数!"
RETURN ''
END IF
CHOOSE CASE ai_ErrCode
CASE - 1
ls_errortext = "数据管道打开错误!请检查所有的对象是否有效.错误代码:" + String( ai_ErrCode )
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 available.Call 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 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 数据库错误信息
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
六、PowerBuilder运行错误提示信息
当程序还未完全完成时,运行程序常常会出现错误,触发PB的SYSTEM ERROR事件,如果没有为这些错误事件编写脚本,就会触发显示这样的一个消息框。它的信息包括错误消息的数目和文本,并告诉我们是哪个对象的哪个事件的脚本的哪一行出现了错误。它是调试程序,修改错误的重要依据,所以我们有必要很好地了解这些错误信息的具体含义。
错误号 |
含义 |
1 |
被零除 |
2 |
引用NULL对象 |
3 |
数组越界 |
4 |
枚举值超出函数范围 |
5 |
函数中遇到负值 |
6 |
指定的数据窗口行/列无效 |
7 |
链接引用时,出现不可解决的外部引用 |
8 |
引用带有NULL下表的数组 |
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变量需要非整组值 |
30 |
外部对象不支持数据类型:NAME |
31 |
不支持外部对象数据类型:NAME |
32 |
调用外部对象函数NAME时,未找到名字 |
33 |
调用外部对象函数NAME时,参数类型不合法 |
34 |
调用外部对象函数NAME时,使用不正确的参数数目 |
35 |
错误调用外部对象函数NAME |
36 |
访问外部对象属性NAME时,未找到名称 |
37 |
访问外部对象属性NAME时,类型不匹配 |
38 |
询问外部对象属性NAME时,下标数目不正确 |
39 |
错误访问外部对象属性NAME |
40 |
与表达式中任意数据类型不匹配 |
41 |
表达式中有不合法的任意数据类型 |
42 |
在DLL函数NAME中,运行时所指定的参数类型与所要求的参数类型不相同 |
43 |
父对象不存在 |
44 |
祖先的函数中具有发生冲突的参数及返回类型 |
45 |
外部表溢出 |
46 |
空的对象引用不能被赋值或传递给同类型的变量 |
47 |
变量需要数组值 |
48 |
数组的大小与对象的转换不匹配 |
49 |
数组的类型与对象的转换不匹配 |
50 |
分布服务错误 |
51 |
函数或事件的参数不合法 |
52 |
分布通讯错误 |
53 |
未激活所需服务器 |
54 |
服务器未接受请求 |
55 |
请求非正常终止 |
56 |
非完整地相应请求 |
57 |
未连接 |
58 |
对象实例不存在 |
59 |
不合法的列范围 |
60 |
不合法的行范围 |
61 |
将NUMBER维数组不合法地转换成对象 |
62 |
服务器忙 |
63 |
无返回值的函数或事件用于表达式 |
64 |
赋值需要数组对象 |