使用ADO控件可以方便的在VB6中訪問ODBC數據庫,但是通過直接放置ADODS控件來獲得ADO的數據連接比較麻煩,我們可以在VB工程中創建一個公共數據模塊,將ADO控件的初始化、建立連接、關閉連接等操作都寫到函數中,這樣就可以在工程的其他模塊中共享調用這個ADO連接。
一次完整的ADO調用操作分為如下幾個步驟:
1.打開ADO到數據庫的連接,初始化ADO RECORDSET集。
2.通過寫入SQL語句執行查詢并返回查詢結果RECORDSET集;或者可以通過寫入SQL語句執行相應數據庫操作。
3.釋放RECORDSET集,關閉數據庫連接。
需要注意的是,每個動態創建的ADO同時只能被一個過程調用,如果需要進行多表并行操作,可能需要在公共數據模塊中建立多個動態ADO。
下面是相關的代碼:
'-----------------------------------------------------------------
'如下代碼保存在名為my.bas的工程模塊中
Public CONN As Adodb.Connection '定義ADO CONNECTION對象
Public RS As Adodb.Recordset '定義ADO RECORDSET對象
'****************************
'打開數據庫連接
'****************************
Function ConnOpen()
Dim ASTR As String
Set CONN = New Adodb.Connection
ASTR = GetDatabasePath 'MDB文件數據庫路徑
CONN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ASTR & ";Persist Security Info=False"
'本例的ODBC連接為JET4.0的直接到MDB文件的連接,如果使用ODBC數據源可以使用如下CONNECTION串:
'Provider=MSDASQL.1;Password="";Persist Security Info=True;Data Source=數據源名稱;Initial Catalog=數據表庫名稱
CONN.Open
Set RS = New Adodb.Recordset
With RS Do
ActiveConnection = CONN
CursorType = adOpenDynamic
LockType = adLockOptimistic
End With
End Function
'****************************
'關閉數據庫
'****************************
Function ConnClose()
Set RS = Nothing
CONN.Close
Set CONN = Nothing
End Function
'**********************************************************
' 獲得數據庫路徑
' 本例數據庫保存在程序目錄下的DBS子目錄中,名為db1.mdb
'**********************************************************
Public Function GetDatabasePath() As String
Dim sPath As String
If Right$(App.Path, 1) = "\" Then
sPath = App.Path + "dbs\"
Else
sPath = App.Path + "\dbs\"
End If
GetDatabasePath = sPath + "db1.mdb"
End Function
'End of my.bas
'-----------------------------------------------------------------
如下示例代碼為my.bas的使用方法:
'-----------------------------------------------------------------
'使用RS對象執行SELECT語句
'TableName和FieldName分別為表名和字段名
'查詢結果保存在數組s中
Private Sub RunSelectCommand()
Dim s(99) as String
Dim i as Integer
i=0
Call my.ConnOpen
my.RS.Open "SELECT * FROM TableName"
While Not RS.EOF
i=i+1
If Not isNull(my.RS!FieldName) Then s(i)=Cstr(my.RS!FieldName)
RS.MoveNext
Wend
Call my.ConnClose
End Sub
'使用CONN對象執行UPDATE/DELETE/INSERT語句
'SQL語句放在變量sSQL中
Private Sub RunSqlCommand()
Dim sSQL as String
Call my.ConnOpen
my.CONN.Execute sSQL
Call my.ConnClose
End sub
'對于DATAGRID和DATAREPORT這些需要DATASOURCE的控件可以做如下操作
'使用SELECT語句打開RS的數據集
Set OBJ.Datasource=my.RS
'---------------------------------------------------------------------
這個方法對于開發簡單小型的MIS系統很實用,也可以在報表和數據表中使用,缺點是在多表操作和函數嵌套調用時,一個動態ADO對象不能同時執行兩個工作,后一個寫入的SQL語句會覆蓋先寫入的SQL語句,當在回到前一個過程時,會因為字段找不到而出錯。因此如果可能需要進行多表操作,可以嘗試多定義幾個CONN 和RS對象。
posted on 2008-11-26 07:24
大鳥 閱讀(362)
評論(0) 編輯 收藏