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

赋值需要数组对象

 
需要注意的是第50号错误会立即中断应用程序,但是并不触发SYSTEM ERROR事件
posted @ 2020-08-03 15:48  水兮云间  阅读(3411)  评论(1编辑  收藏  举报