?? 124.txt
字號:
用類來編寫數據庫程序
類模塊使VB編程更為簡潔。通過封裝技術將復雜的代碼同程序的其它部分分隔開,
并通過方法和屬性同程序的其它部分對話。對于類的種種好處,相信大家都非常清
楚了。本文主要介紹類在數據庫編程方面的應用。
通過類模塊的封裝,你可以只需要書寫一次那些冗長繁人的SQL查詢語句,并能方
便地同他人分享你的代碼。本文向你介紹如何利用類模塊創建SQL查詢對象。本文
用到Northwind數據庫。數據訪問技術用的是DAO。
工程目的
本工程的目的是要建立一個查詢,該查詢將從Northwind數據庫中返回Beverage供
應商的信息。這些信息包括哪種飲料是由哪些供應商供應的??瓷先ズ芎唵危?得對三個表進行操作,這三個表分別是Suppliers, Categories和Products, 因此
你需要寫一串很長的SQL查詢語句,所以你只希望寫一次就夠了。
設計類模塊
首先確認你已添加了對Microsoft DAO 3.5 Object Library的引用。接下來在工程
中添加一個類模塊。將該類模塊重命名為ClsSQL。
讓我們先為這個類創建兩個新的公共屬性,代碼如下:
Public CompanyName As String 'Object property
Public CategoryName As String 'Object property
添加一個公用變量,名為strMsg。該變量用來保存對象返回給用戶的信息。
Public CompanyName As String 'Object property
Public CategoryName As String 'Object property
Public strMsg As String
現在為這個類編寫RunQuery方法。
Sub RunQuery()
Dim strSQL As String
Dim db As Database
Dim qdfTemp As QueryDef
Dim rsResults As Recordset
'Construct the SQL string
strSQL = "SELECT DISTINCTROW Suppliers.CompanyName, " & _
"Products.ProductName FROM Suppliers INNER JOIN " & _
"(Categories INNER JOIN Products ON Categories.CategoryID = " & _
"Products.CategoryID) " & _
"ON Suppliers.SupplierID = Products.SupplierID " & _
"WHERE (((Suppliers.CompanyName)='" & CompanyName & "') AND " & _
"((Categories.CategoryName)='" & CategoryName & "'))"
Set db = OpenDatabase("C:\MSOffice\Access\Samples\Northwind.mdb")
Set qdfTemp = db.CreateQueryDef("")
qdfTemp.SQL = strSQL
Set rsResults = qdfTemp.OpenRecordset(dbOpenSnapshot)
rsResults.MoveFirst
'Enumerate the recordset
With rsResults
Do While Not .EOF
Debug.Print .Fields(0); " "; .Fields(1)
strMsg = strMsg & .Fields(1) & vbCrLf
.MoveNext
Loop
End With
rsResults.Close
qdfTemp.Close
End Sub
現在讓我們來簡單地分析一下上面的代碼。在上面的代碼中數據庫的路徑是用的絕
對路徑。如果Northwind數據庫的路徑同你機器上的不同,你需要修改這個路徑,
以便程序能找到這個數據庫。
SQL代碼是在Access中建立好然后粘貼到程序中來的。這樣做不僅免去你書寫代碼
的麻煩,而且還不容易出錯。在粘貼完之后,將原來在SQL代碼中的"Bigfoot
Breweries" 和 "Beverages"用公共變量CompanyName和CategoryName替換掉。
在定義了QueryDef之后,程序枚舉記錄集。記錄集的信息不僅在立即窗口中顯示出
來,同時被寫入strMsg變量中。
在結束對類模塊的編碼之前,我們還需要對類模塊的Terminate事件編寫代碼。將
下面的代碼放到該事件中。
Private Sub Class_Terminate()
MsgBox strMsg, Title:="Beverage Results for " & CompanyName, buttons:=
vbExclamation
End Sub
現在我們已結束了對類模塊的編程。接下來在窗體中添加一個命令按鈕。將該命令
按鈕的Caption屬性設置為&Run Query。將下面的代碼放在命令按鈕的鼠標單擊事
件中。
Private Sub Command1_Click()
Dim objSQL As ClsSQL
'Set the object variable
Set objSQL = New ClsSQL
'Set properties of the new object
With objSQL
.CompanyName = "Bigfoot Breweries"
.CategoryName = "Beverages"
End With
'Retrieve the properties
Debug.Print objSQL.CompanyName
Debug.Print objSQL.CategoryName
'Call a method of the object
objSQL.RunQuery
'Destroy the object
Set objSQL = Nothing
End Sub
在上面的語句中,我們首先定義了一個對象變量,接下來將這個對象變量初始化為
我們剛建立的類的一個實例。我們也可以用下面這一條語句來實現。
Dim objSQL As New ClsSQL
緊接著我們設置該對象的屬性。CompanyName = "Bigfoot Breweries"和
CategoryName = "Beverages", 將這兩個值在立即窗口中顯示出來。這樣做僅僅為
了驗證而已。然后調用對象的RunQuery方法。
objSQL.RunQuery
最后釋放該對象,觸發對象的Terminate事件,彈出消息框,顯示查詢結果。
MsgBox strMsg, Title:="Beverage Results for " & CompanyName, buttons:=
vbExclamation
結論
現在你已對用類模塊進行數據庫編程的好處有了初步的認識。當然你也可以用標準
模塊來實現同樣的功能。但是用標準模塊遠不如用類模塊簡潔。用類模塊,你可以
為每個查詢初始化一個新的對象,而復雜的SQL代碼則被封裝在類中。用標準模塊,
你必須將控制權交給模塊。最后,類模塊更易于移植。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -