基于VB的桌面系統(tǒng)開發(fā)方案T_第1頁
基于VB的桌面系統(tǒng)開發(fā)方案T_第2頁
基于VB的桌面系統(tǒng)開發(fā)方案T_第3頁
基于VB的桌面系統(tǒng)開發(fā)方案T_第4頁
基于VB的桌面系統(tǒng)開發(fā)方案T_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、1基于基于VB的桌面系統(tǒng)開發(fā)方案的桌面系統(tǒng)開發(fā)方案錯誤處理和類的概念2課題目標課題目標i了解錯誤出現(xiàn)的原因并學會避免它i了解Err 對象的使用及其屬性和方法i學習如何跟蹤錯誤i了解對錯誤的延遲處理和即時處理i學習創(chuàng)建一個公共錯誤處理過程i了解Visual Basic 中的類i學習什么是類模塊i學習通過設置類的屬性、方法和事件來創(chuàng)建一個類3簡要回顧簡要回顧i上一章主要介紹了: 在代碼中使用ActiveX數(shù)據(jù)對象的優(yōu)點:i在把數(shù)據(jù)保存到數(shù)據(jù)庫之前就檢驗其有效性i在多用戶環(huán)境中減少由于鎖住記錄而帶來的沖突i可以通過SQL語句同時對多個記錄進行更新i可以使用帶參數(shù)的存儲過程 三種ADO組件:i連接(C

2、onnection)i記錄集(Recordset)i命令(Command) 游標類型4理解理解“錯誤錯誤”的概念的概念i缺省的錯誤處理可以提供給用戶出現(xiàn)錯誤的編號和對錯誤的一段簡短描述并自動終止應用程序i在自己編寫的代碼中對錯誤進行處理i處理運行錯誤的代碼稱為“錯誤處理程序”5錯誤類型錯誤類型錯誤錯誤說明說明語法錯在輸入的語句不正確時發(fā)生。例如:關鍵字拼寫錯誤、標點符號的缺失或者變量名拼寫錯誤。 例如:在使用If語句時沒有相應的End If進行匹配將導致一個語法錯。Visual Basic會在進行到下一條語句之前對語法錯給出提示。運行錯在一個命令企圖執(zhí)行一個無效的動作時發(fā)生。例如:在企圖把一個

3、字符串賦值給一個數(shù)字類型的變量時發(fā)生運行錯。在運行錯發(fā)生時會激活錯誤處理程序。邏輯錯在程序既沒有語法錯也沒有運行錯的情況下執(zhí)行程序得到的結果卻不是正確的結果時,我們說發(fā)生了邏輯錯。例如:應用程序要求用戶提供口令,可是口令是正確的時候卻不能進入應用程序,這時就說發(fā)生了邏輯錯6運行錯運行錯i下面是一些可能產(chǎn)生運行錯的情況: 向一個不存在文件寫入 企圖向一個已經(jīng)被關閉的表進行查詢 把一個數(shù)字類型的變量賦給一個字符串類型的變量。 兩個用戶保存同一個記錄 除數(shù)為零7運行錯(續(xù))運行錯(續(xù))i通過激活錯誤處理程序可以對運行錯進行處理,在沒有錯誤處理程序時,Visual Basic提供一個帶有錯誤編號和出錯

4、原因的消息框并終止應用程序,直到錯誤得到處理8運行錯(續(xù))運行錯(續(xù))i舉例來說,如果把一個很大的計算結果保存到一個整型變量中,會導致溢出的運行錯iVisual Basic會給出下圖所示的出錯編號為6,原因為“溢出”的對話框9運行錯(續(xù))運行錯(續(xù))錯誤編號錯誤編號原因原因5無效過程調(diào)用6溢出7內(nèi)存不足9下標越界11除數(shù)為零13類型不匹配53文件不存在55文件已經(jīng)打開58文件已經(jīng)存在76路徑不存在423屬性或者方法不存在482打印機錯誤10運行錯(續(xù))運行錯(續(xù))iVisual Basic不支持集中錯誤處理技術i每一個過程或事件都要求有一個錯誤處理程序來解決一個它自己的錯誤i創(chuàng)建一個錯誤處理程

5、序的三個基本步驟: 激活一個錯誤處理程序 編寫對可能發(fā)生的錯誤進行處理的代碼。 繼續(xù)程序的運行11錯誤處理程序錯誤處理程序i通過激活錯誤處理程序來對運行錯進行處理i在過程中使用On Error GoTo語句加一個命名的標號來激活錯誤處理程序i標號 用來指出錯誤發(fā)生時程序轉(zhuǎn)向錯誤處理程序的入口 這部分代碼稱為“錯誤處理程序” 命名和變量的命名一樣 可以以冒號結尾i放在過程的Exit Sub語句之后12錯誤處理程序(續(xù))錯誤處理程序(續(xù))i下面的DataErr錯誤處理程序?qū)崿F(xiàn)對數(shù)據(jù)溢出錯誤的處理:Private Sub Command1_Click() On Error GoTo DataErr

6、Dim num As Integer, var As Integer num = 10 var = num * 10000 Print var Exit SubDataErr: MsgBox 請嘗試乘以一個小一些的整數(shù)End Sub13使用使用Err對象對象i報告錯誤,包含和運行錯相關的信息i可以幫助確定發(fā)生的錯誤類型、原因和錯誤發(fā)生的地方i屬性是由錯誤發(fā)生者設置的i錯誤可能是由Visual Basic或是編程者產(chǎn)生的i在運行錯發(fā)生時,運行錯的屬性就被設置為能唯一標志這個錯誤的信息以及要求的處理14Err對象的屬性對象的屬性屬性屬性說明說明Number返回或設置標識錯誤的編號。它是Err對象的

7、缺省屬性。它可以用來確定是哪一個錯誤發(fā)生了,它的值是錯誤的唯一標識。 語法格式:Object.NumberDescription返回或設置用來對錯誤進行描述的字符串。 語法格式: Object.DescriptionSource返回或設置產(chǎn)生錯誤的應用程序的名字的字符串。當一個意外錯誤發(fā)生時,這個值被自動設置。 語法格式: Object.Source15Err對象的屬性(續(xù))對象的屬性(續(xù))HelpFile返回或設置一個包含指向幫助文件所在位置的路徑的字符串。 語法格式: Object.HelpFileHelpContext返回或設置包含幫助文件中有關主題的上下文ID的字符串。 語法格式: O

8、bject.HelpContext16繼續(xù)執(zhí)行應用程序繼續(xù)執(zhí)行應用程序i用Resume語句來實現(xiàn)繼續(xù)運行程序i三種Resume語句:語句語句說明說明Resume程序從產(chǎn)生錯誤的語句開始接著運行R e s u m e Next程序從產(chǎn)生錯誤的語句的下一條語句接著運行R e s u m e line從Resume line 語句后指定的標號或是行號處開始運行程序,注意標號或是行號指定的語句必須和錯誤處理程序在同一個過程中17繼續(xù)執(zhí)行應用程序(續(xù))繼續(xù)執(zhí)行應用程序(續(xù))i在下面的例子中,使用到了上面提到的三種屬性來處理一個除數(shù)為零的錯誤Private Sub Result_Click() On Er

9、ror GoTo err1 Text3.Text = Text1.Text / Text2.Text Msgbox “Error resolved” Exit Sub err1: MsgBox Err.Number MsgBox Err.Description MsgBox Err.Source If Err.Number = 11 ThenText2.Text = Text2.Text + 1 End If ResumeEnd Sub18Err對象的方法對象的方法方法方法說明說明Clear 方法在錯誤被處理后清除Err對象的所有屬性的值。使用Resume語句或On Error語句之后或是結束

10、一個子程序塊或一個函數(shù)過程之后都會自動調(diào)用這個方法。 語法格式:Object.ClearRaise 方法這個方法用來產(chǎn)生一個錯誤。它是在測試和評估的時候使用的。這樣可以主動地產(chǎn)生錯誤,以便在程序中相應的錯誤處理程序處理它。語法格式: object.Raise number, source, description, helpfile, helpcontext除了number以外的所有參數(shù)都是可選的19Err對象的方法(續(xù))對象的方法(續(xù))Private Sub cmdError_Click Dim num As Integer num=Val(Text1.Text) On Error GoTo

11、 NoErr Err.Raise numExit Sub20Err對象的方法(續(xù))對象的方法(續(xù))NoErr: Select case Err.NumberCase 6MsgBox ”Data Overflow”Text1.SetFocusCase 11MsgBox “Division by zero”Text1.SetFocusCase elseMsgBox “Error not known”Exit SubEnd selectText1.Text=” ”End Sub21捕獲錯誤捕獲錯誤i對程序中發(fā)生的錯誤進行捕獲i當執(zhí)行一個標志著錯誤處理程序開始的On Error語句時就引發(fā)了對錯誤的捕

12、獲i當執(zhí)行到Exit Sub、Exit Function、Exit Property、End Sub、End Function 或End Property語句時就意味著捕獲的結束i可以使用On Error GoTo 0來結束對錯誤的捕獲i考慮用下面兩種捕獲和處理錯誤的方法: 即時處理 延時處理22錯誤的即時處理錯誤的即時處理i在程序錯誤一發(fā)生時就轉(zhuǎn)向錯誤處理程序并馬上進行處理i“On Error GoTo line”語句給出了錯誤處理程序的入口位置i錯誤處理程序一般以一個標號開始,這個標號也就是在On Error GoTo語句中使用到的標號 23錯誤的即時處理(續(xù))錯誤的即時處理(續(xù))i錯誤處

13、理程序采取相應的動作來解決出現(xiàn)的錯誤并從出錯的語句或者出錯語句的下一條語句接著運行程序i需要一條語句在錯誤處理程序完成后結束這個過程Exit Sub24錯誤的延時處理錯誤的延時處理i這種方法中VB忽略發(fā)生的錯誤,但是代碼最后檢測到這個錯誤i用于象除數(shù)為零等這種錯誤i錯誤處理代碼用來重新設置變量的值,使得程序可以繼續(xù)執(zhí)行下去25錯誤的延時處理(續(xù))錯誤的延時處理(續(xù))i缺點: 在可能出錯的地方,都需要編寫錯誤處理代碼 Err對象在一個新的錯誤產(chǎn)生時不保存先前的錯誤信息i可以使用“On Error Resume Next”語句來激發(fā)這種錯誤處理方法i會讓Visual Basic在錯誤已經(jīng)發(fā)生后繼續(xù)

14、執(zhí)行程序26錯誤的延時處理(續(xù))錯誤的延時處理(續(xù))i下 面 的 例 子 就 是 先 查 看 E r r 對 象 的 N u m b e r 屬性,如果該屬性的值大于0,則表明有一個錯誤發(fā)生了Private Sub Command1_Click() On Error Resume Next Text3.Text= Text1.Text / Text2.Text If Err.Number 0 ThenIf Err.Number = 11 ThenText3.Text = 0ElseMsgBox Input not validExit SubEnd If End IfEnd Sub27錯誤的延時

15、處理(續(xù))錯誤的延時處理(續(xù))i“On Error Resume Next”語句標志在此使用的是延遲處理的方法i同時也調(diào)用了Clear方法來清除并設置Err對象的屬性,為下一個出現(xiàn)的錯誤做準備 28創(chuàng)建一個公共錯誤處理過程創(chuàng)建一個公共錯誤處理過程i減少代碼的數(shù)量i下面的代碼就創(chuàng)建了一個函數(shù)Check,它在用戶沒有輸入顧客的名稱時產(chǎn)生一個錯誤:Function check() If Text1.Text = ThenErr.Raise 900, ,No blanks allowed ElseMsgBox Record saved End IfEnd FunctionPrivate Sub Sav

16、e_Click() Call checkEnd Sub29調(diào)試程序調(diào)試程序iBugs 應用程序中的錯誤i調(diào)試 確定應用程序中錯誤的位置和更正錯誤的過程。 Visual Basic提供了好幾個工具在確定錯誤的位置時很有用30類類i所有對象的基礎i代碼的集合形成一個用來創(chuàng)建其它對象的模板。i在類模塊中的代碼描述了從類中創(chuàng)建的對象的屬性和行為31類(續(xù))類(續(xù))i以下是創(chuàng)建對象時必須遵守的三個規(guī)則: 封裝i內(nèi)部數(shù)據(jù)和代碼都是被隱藏起來的 多態(tài)i不同的對象擁有相同名稱的方法,但是方法的實現(xiàn)卻是不一樣的 繼承i子類繼承了它的父類的特征32創(chuàng)建一個類創(chuàng)建一個類i在Visual Basic中創(chuàng)建一個類需要下

17、面四個基本步驟: 添加一個類模塊并設置它的屬性 創(chuàng)建類的屬性 創(chuàng)建類的方法 創(chuàng)建類的事件33類模塊類模塊iVisual Basic中的面向?qū)ο缶幊套罨镜臉嫵墒穷惸Ki類模塊包含一個類的定義,以及這個類的屬性和方法的定義i每個類都保存在一個擴展名為.CLS的文件里i與標準代碼模塊很相似,包括一些可以在應用程序中被其它模塊調(diào)用的函數(shù)34類模塊和標準模塊的區(qū)別類模塊和標準模塊的區(qū)別i兩者數(shù)據(jù)存儲不同,標準模塊的數(shù)據(jù)不能有多個拷貝i從類模塊創(chuàng)建的每個對象都可以擁有一份獨立的自己的數(shù)據(jù)標準模塊中的數(shù)據(jù)的生存時間和應用程序是一樣的i對象中的數(shù)據(jù)則隨著對象的存在而存在,隨著對象的消亡而消亡i標準模塊中的全

18、局變量在應用程序的任何部分都可見,然而類模塊的全局變量只可以通過引用這個對象來訪問35添加類模塊添加類模塊i選擇“工程(Projects)”菜單中的“添加類模塊(Add Class Module)”子菜單 36創(chuàng)建類的屬性創(chuàng)建類的屬性i屬性可以有兩種創(chuàng)建方式: 創(chuàng)建一個公有變量 創(chuàng)建一個屬性過程i公有變量 通過在類模塊的聲明部分使用關鍵字Public來創(chuàng)建公有變量Public Ac_num As IntegerPublic Balance As Integer37創(chuàng)建類的屬性(續(xù))創(chuàng)建類的屬性(續(xù)) 為訪問類的信息提供完全開放的接口。 不能創(chuàng)建在類中經(jīng)常要用到的只讀屬性。 私有變量只能被類模塊

19、內(nèi)部的代碼訪問。Private Ac_num As IntegerPrivate Balance As Integer38創(chuàng)建類的屬性(續(xù))創(chuàng)建類的屬性(續(xù))i屬性過程 增強了數(shù)據(jù)的隱藏性 可以隱藏對象的部分數(shù)據(jù),同時也向外界顯示部分數(shù)據(jù) 三種類型的屬性過程:iProperty SetiProperty LetiProperty Get39創(chuàng)建屬性過程創(chuàng)建屬性過程i屬性過程的創(chuàng)建: 在類模塊的代碼窗口中鍵入代碼 或者 使用“添加過程(Add Procedure)”對話框來創(chuàng)建,在“工具(Tools)”菜單中選擇“添加過程(Add Procedure)”選項就可以顯示“添加過程”對話框40屬性過

20、程對話框?qū)傩赃^程對話框41屬性過程屬性過程i鍵入過程的名稱i在“類型”(type)選項中選中“屬性”(property)i在“范圍”(scope)選項中選中“公有”(public)i單擊“確定”按鈕i如下圖為屬性過程窗口42屬性過程(續(xù))屬性過程(續(xù))43屬性過程(續(xù))屬性過程(續(xù))屬性過屬性過程程說明說明Property Set唯一不能自動由過程對話框創(chuàng)建的過程。該過程設置一個對象引用 Property Let指定一個參數(shù),用來給屬性傳遞值。參數(shù)按值傳遞,以防止過程改變傳遞給過程的變量的值Property Get用來從類返回一個值。如果只創(chuàng)建Get 過程,而不創(chuàng)建Set 和 Let過程的話,

21、就相當于創(chuàng)建了一個只讀的屬性44屬性過程(續(xù))屬性過程(續(xù))i下面的例子生成以大寫方式顯示的屬性:Dim getcap As StringPublic Property Get CapText() As String CapText = getcapEnd PropertyPublic Property Let CapText (ByVal vNewValue As String) getcap = Ucase(vNewValue)End Property45屬性過程(續(xù))屬性過程(續(xù))Private Sub Command1_Click() Dim cs As Class1 Set cs =

22、 New Class1 cs.CapText = Text1.Text Text1.Text = cs.CapText End SubPublic Property Set(newob As Object) Set curr = newobEnd Property46DataSourceBehavior屬性屬性i在讓一個對象作為另外一個對象的數(shù)據(jù)源時使用 。i只能在設計時設置 Object.DataSourceBehavior =numberi參數(shù)“number”用來指定數(shù)據(jù)源的行為方式值值設設置置說明說明vbNone0(缺省)對象不能作為數(shù)據(jù)源。vbDataSource1對象可以作為數(shù)據(jù)源。

23、47DataSourceBehavior屬性(續(xù))屬性(續(xù))i當DataSourceBehavior屬性的值設置為1(vbDataSource)時,GetDataMember事件就會自動加入到對象中 Private Sub object_GetDataMember ( DataMember As String, Data As Object)參數(shù)參數(shù)說明說明DataMember一個包含綁定為數(shù)據(jù)源的數(shù)據(jù)成員名字的字符串Data到一個記錄集對象或一個類的引用48DataSourceBehavior屬性(續(xù))屬性(續(xù))i下面的代碼選擇顧客表作為獲取數(shù)據(jù)的數(shù)據(jù)成員i必須保證連接“cncust”已經(jīng)存

24、在i創(chuàng)建并打開記錄集rscust,接著調(diào)用GetDataMemberDim rcust as ADODB.RecordsetSet rcust = New Recordset rscust.Open Customer, cncustPrivate Sub Class_GetDataMember(DataMember As String, Data As Object)Set Data = rscustEnd Sub49創(chuàng)建類的方法創(chuàng)建類的方法i使用Public Sub和Function過程來為類創(chuàng)建方法i創(chuàng)建Public Sub和Function過程: 使用過程對話框或者 在 類 模 塊 的

25、窗 口 中 直 接 編 寫 代 碼 來 實 現(xiàn) 過 程50創(chuàng)建類的方法(續(xù))創(chuàng)建類的方法(續(xù))i下面的代碼給出了在類模塊中創(chuàng)建一個名字為Name的方法,該方法用來幫助用戶輸入有效的名稱:Public Function Name (ByVal newstr As String) If IsNumeric(newstr) = True Or newstr = Empty ThenMsgBox Enter a valid name End IfEnd Function51創(chuàng)建類的事件創(chuàng)建類的事件iVisual Basic中的類除了屬性和方法外還有事件。i用來告訴應用程序類的某些動作的發(fā)生iIniti

26、alize事件 在類的一個實例被創(chuàng)建時發(fā)生 在任何屬性被設置之前被觸發(fā),用來初始化類使用到的所有數(shù)據(jù) 還用來加載類使用到的所有窗體 語法Private Sub object_Initialize( )52創(chuàng)建類的事件(續(xù))創(chuàng)建類的事件(續(xù))i下面的代碼在一個類的Initialize事件中打開了一個連接和一個記錄集:Private Sub Class_Initialize()Set cnCust = New ADODB.ConnectionData Source=C:Program FilesMicrosoft Visual StudioVB98Nwind.mdbSet rscust = New

27、 ADODB.Recordsetrscust.Open Customers, cnCustEnd Sub53iTerminate事件: 在對象被設置為“Nothing”或者對象引用超出作用范圍時發(fā)生 用來卸載窗體或者完成一些在類終止時要求執(zhí)行的任務 語法:Private Sub object_Terminate( ) 示例:Private Sub Class_Terminate()Unload Form1 End Sub創(chuàng)建類的事件(續(xù))創(chuàng)建類的事件(續(xù))54創(chuàng)建類的事件(續(xù))創(chuàng)建類的事件(續(xù))i創(chuàng)建事件的步驟: 定義事件 編寫代碼來觸發(fā)事件i創(chuàng)建一個事件: 在類模塊的代碼窗口的聲明部分使用關

28、鍵字Event來創(chuàng)建一個含有需要傳遞的任何參數(shù)的事件 或者 使用過程對話框55創(chuàng)建類的事件(續(xù))創(chuàng)建類的事件(續(xù))i在過程對話框中的類型選項中選中“事件”類型i在名稱文本框中輸入事件的名稱56創(chuàng)建類的事件(續(xù))創(chuàng)建類的事件(續(xù))i下面給出了創(chuàng)建和觸發(fā)自定義事件CaseText所需要的全部代碼i為窗體添加一個標簽和一個命令按鈕,再為應用程序添加一個類模塊i在類模塊的代碼窗口中創(chuàng)建并激發(fā)了事件CaseTexti為了支持事件CaseText,使用關鍵字WithEvents聲明了一個對象變量MyObject57創(chuàng)建類的事件(續(xù))創(chuàng)建類的事件(續(xù))i在窗體的load事件中創(chuàng)建了對象MyObject的一個實例i當單擊命令按鈕時就會調(diào)用對象MyObject的Check過程,這樣就激發(fā)了CaseText事件,傳遞了一個字符串“Raising an event”i這個字符串在MyObject對象的事件過程中被賦給標簽的標題屬性58類模塊類模塊 代碼窗口代碼窗口Public Event CaseText(ByVal strval As String)Public Sub Check() RaiseEvent CaseText(Raising an event)End

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論