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 事件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM