系統錯誤提示窗口數據庫
軟件有時會由於人爲操做的緣由或程序自己漏洞的緣由或者其它緣由出現錯誤,這時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!到此爲止,系統錯誤提示窗口設計完成,你們能夠故意設計一些錯誤測試一下。