2023年11月27日发(作者:)

pbpowerbuilder)异常及错误

⼀、打开任意⼀个数据窗时,提⽰⼀、打开任意⼀个数据窗时,提⽰“sybase powerbuilder已停⽌⼯作解决⽅法,错误如图所⽰

解决⽅法1

找到注册表(运⾏:regedit)HKEY_USERSS-1-5-21-1060284298-1004336348-839522115-

1003SoftwareSybasePowerBuilder9.0LayoutDefault,然后删除其中的Datawindow项⽬

解决⽅法2

卸载PB 清理注册表,重启电脑,换个路径重新安装。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------

⼆、使⽤return 1 处理报错信息:

DataWindowDBError事件下:写脚本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

1dw控件没有加settransobject

3、加了settranobject但位置不对;应该写在增删改查之前。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------

五、

DWDBError事件

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运⾏错误提⽰信息

当程序还未完全完成时,运⾏程序常常会出现错误,触发PBSYSTEM 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调⽤与其定义不匹配

25DOUBLEREAL表达式溢出

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表达式中有不合法的任意数据类型

42DLLNAME中,运⾏时所指定的参数类型与所要求的参数类型不

相同

需要注意的是第50号错误会⽴即中断应⽤程序,但是并不触发SYSTEM ERROR