PB報錯處理程序

系統錯誤提示窗口數據庫

軟件有時會由於人爲操做的緣由或程序自己漏洞的緣由或者其它緣由出現錯誤,這時PB的提示信息是英文的,對於咱們使用中文的人來講,這確定會是件很是頭痛的事件,並且會有損良好的人機交互界面……數組

因此接下來先製做一個系統出錯時的提示窗口,這樣在設計和調試程序時有許多錯誤能夠經過提示窗口中文化信息看到。服務器

①首先,先製做一個「數據窗口(DataWindow)」,在「新建窗口」中選擇「DataWindow」項,選擇「FreeForm」,點擊「OK」按鈕,在接下來的窗口中選擇「External」,按「Next」,在下面這個窗口中,須要設計5個變量(以下圖表:)ide

字段變量名函數

變量類型佈局

變量大小測試

中文含義spa

Err_number設計

String調試

10

錯誤號

Err_message

String

255

錯誤信息

Err_where

String

255

出錯窗口/菜單

Err_object

String

255

出錯對象

Err_event

String

255

出錯事件

Err_line

string

255

出錯代碼行

系統錯誤提示窗口製做(轉) - ╳﹏狼狼℡ - 狼狼的博客

在下一個窗口中選擇「BackgroundColor」爲「ButtonFace」,「Text」項的「Border」爲「Raised」,點擊「next」,而後點擊「Finish」,進入數據窗口設計窗口中,調整相應的屬性設置(以下圖:)。

系統錯誤提示窗口製做(轉) - ╳﹏狼狼℡ - 狼狼的博客

調整完成後保存爲「d_system_error」。

②接下來能夠製做「系統錯誤提示窗口」了。

新建一個窗口,設置以下的一些窗口屬性:

Title(標題):系統錯誤提示

WindowType(窗口類型):Response!

而後在窗口上放置以下控件:

⑴1個GroupBox:清空其Text屬性內容

⑵2個StaticText:st_1.Text=「警告:」;

St_2.Text=「系統出現錯誤,請點擊「顯示信息」查看具體錯誤信息,並告知系統管理員!」

⑶1個DataWindow:name屬性=「dw_error」,dw_error.DataObject=「d_system_error」,調整高寬大小,放置位置在GroupBox組框中,不選Border屬性框,並取消Visible選擇框的選擇。

⑷4個CommandButton:

a.Name:cb_showText:「顯示信息」

ClickedEvent:

IFThis.Text='顯示信息'THEN

dw_error.Visible=True

This.Text='隱藏信息'

ELSE

dw_error.Visible=False

This.Text='顯示信息'

ENDIF

b.Name:cb_printText:「打印信息」

ClickedEvent:

//打印錯誤信息

dw_error.print()

c.Name:cb_continueText:「繼續執行」

ClickedEvent:

//關閉提示窗口

Close(Parent)

d.Naem:cb_haltText:「終止系統」

ClickedEvent:

//終止程序執行

HaltClose;

各控件佈局以下圖所示:

系統錯誤提示窗口製做(轉) - ╳﹏狼狼℡ - 狼狼的博客

-----

系統錯誤提示窗口Open事件代碼:

Stringls_ErrMsg

Stringls_log_file,ls_text

Integerli_file_no

IfError.Number=0ThenReturn

ChooseCaseError.Number

Case1

ls_ErrMsg='除數爲零'

Case2

ls_ErrMsg='引用空對象'

Case3

ls_ErrMsg='數組越界'

Case4

ls_ErrMsg='枚舉值超出函數範圍'

Case5

ls_ErrMsg="函數中遇到負值"

Case6

ls_ErrMsg="指定的數據窗口行/列無效"

Case7

ls_ErrMsg="聯接引用時,出現不可解決的外部引用"

Case8

ls_ErrMsg="引用帶有空下標的數組"

Case9

ls_ErrMsg="DLL函數未在當前程序中"

Case10

ls_ErrMsg="DLL函數不支持的參數類型"

Case11

ls_ErrMsg="對象文件已過時,必須轉化爲當前版本"

Case12

ls_ErrMsg="數據窗口列類型與GetItem類型不匹配"

Case13

ls_ErrMsg="不可知的屬性引用"

Case14

ls_ErrMsg="爲外部函數打開錯誤DLL庫"

Case15

ls_ErrMsg="錯誤調用外部函數"

Case16

ls_ErrMsg="超出最大字符串的長度"

Case17

ls_ErrMsg="數據窗口控件中引用的數據窗口對象不存在"

Case18

ls_ErrMsg="函數未返回值"

Case19

ls_ErrMsg="不能將任意變量中NAME轉化爲NAME"

Case20

ls_ErrMsg="沒有成功地準備好數據庫命令"

Case21

ls_ErrMsg="運行時,不正確地引用函數"

Case22

ls_ErrMsg="不可知的對象類型"

Case23

ls_ErrMsg="不能將NAME類型的對象賦值爲NAME類型的對象"

Case24

ls_ErrMsg="函數調用與其定義不匹配"

Case25

ls_ErrMsg="DOUBLE或REAL表達式溢出"

Case26

ls_ErrMsg="不支持對NAME字段的賦值"

Case27

ls_ErrMsg="非整型指數不能爲負"

Case28

ls_ErrMsg="VBX錯誤:NAME"

Case29

ls_ErrMsg="ANY變量須要非整組值"

Case30

ls_ErrMsg="外部對象不支持數據類型:NAME"

Case31

ls_ErrMsg="不支持外部對象數據類型:NAME"

Case32

ls_ErrMsg="調用外部對象函數NAME時,未找到名字"

Case33

ls_ErrMsg="調用外部對象函數NAME時,參數類型不合法"

Case34

ls_ErrMsg="調用外部對象函數NAME時,使用不正確的參數數目"

Case35

ls_ErrMsg="錯誤調用外部對象函數NAME"

Case36

ls_ErrMsg="訪問外部對象屬性NAME時,未找到名稱"

Case37

ls_ErrMsg="訪問外部對象屬性NAME時,類型不匹配"

Case38

ls_ErrMsg="詢問外部對象屬性NAME時,下標數目不正確"

Case39

ls_ErrMsg="錯誤訪問外部對象屬性NAME"

Case40

ls_ErrMsg="與表達式中任意數據類型不匹配"

Case41

ls_ErrMsg="表達式中有不合法的任意數據類型"

Case42

ls_ErrMsg="在DLL函數NAME中,運行時所指定的參數類型與所要求的參數類型不相同"

Case43

ls_ErrMsg="父對象不存在"

Case44

ls_ErrMsg="祖先的函數中具備發生衝突的參數及返回類型"

Case45

ls_ErrMsg="外部表溢出"

Case46

ls_ErrMsg="空的對象引用不能被賦值或傳遞給同類型的變量"

Case47

ls_ErrMsg="變量須要數組值"

Case48

ls_ErrMsg="數組的大小與對象的轉換不匹配"

Case49

ls_ErrMsg="數組的類型與對象的轉換不匹配"

Case50

ls_ErrMsg="分佈服務錯誤"

Case51

ls_ErrMsg="函數或事件的參數不合法"

Case52

ls_ErrMsg="分佈通信錯誤"

Case53

ls_ErrMsg="未激活所需服務器"

Case54

ls_ErrMsg="服務器未接受請求"

Case55

ls_ErrMsg="請求非正常終止"

Case56

ls_ErrMsg="非完整地相應請求"

Case57

ls_ErrMsg="未聯接"

Case58

ls_ErrMsg="對象實例不存在"

Case59

ls_ErrMsg="不合法的列範圍"

Case60

ls_ErrMsg="不合法的行範圍"

Case61

ls_ErrMsg="將NUMBER維數組不合法地轉換成對象"

Case62

ls_ErrMsg="服務器忙"

Case63

ls_ErrMsg="無返回值的函數或事件用於表達式"

Case64

ls_ErrMsg="賦值須要數組對象"

CaseElse

ls_ErrMsg="其餘錯誤"

EndChoose

//將錯誤信息增長到dw_error中

dw_error.InsertRow(0)

dw_error.SetItem(1,'err_number',String(Error.Number))

dw_error.SetItem(1,'err_message',ls_ErrMsg)

dw_error.SetItem(1,'err_where',Error.WindowMenu)

dw_error.SetItem(1,'err_event',Error.ObjectEvent)

dw_error.SetItem(1,'err_object',Error.Object)

dw_error.SetItem(1,'err_line',String(Error.Line))

//如下代碼段將錯誤號和錯誤信息寫進日誌文件syserror.log中

ls_text="~r~n----------------------------------------------------------------"

ls_text+="~r~n"

ls_text+="~r~n出錯時間:"+String(Today(),'yyyy/mm/dd')+""+String(Now())

//ls_text+="~r~n操做員:"+gs_user_name

ls_text+="~r~n錯誤代碼:"+String(Error.Number)

ls_text+="~r~n錯誤信息:"+ls_ErrMsg

ls_text+="~r~n窗口/菜單:"+Error.WindowMenu

ls_text+="~r~n出錯控件:"+Error.Object

ls_text+="~r~n出錯事件:"+Error.ObjectEvent

ls_text+="~r~n出錯行數:"+String(Error.Line)

//打開系統錯誤日誌文件

IfTrim(ls_log_file)=""ORIsNull(ls_log_file)Then

ls_log_file="syserror.log"

EndIf

li_file_no=FileOpen(ls_log_file,LineMode!,Write!,SHARED!,Append!)

Ifli_file_no=0Then

MessageBox("出錯信息","不能打開系統出錯日誌文件!",Exclamation!)

Else

IfFileWrite(li_file_no,ls_text)<0Then

MessageBox("出錯信息","寫系統出錯日誌文件出錯!",Exclamation!)

EndIf

EndIf

將窗口保存爲「w_system_error」。

而後在應用對象mpgl的systemerror事件中加入代碼:Open(w_system_error)便可。

OK!到此爲止,系統錯誤提示窗口設計完成,你們能夠故意設計一些錯誤測試一下。

相關文章
相關標籤/搜索