在VB中常用的資料庫提供者有三種,即DAO、RDO、ADO三種對象模式。三種模式的具體解釋見上篇文章:
DAO/RDO/ADO,ODBC,OLEDB之間的關係
本篇文章我們重點介紹一下ADO的應用。
一:ADO的簡介
ADO(ActiveX Data Object)是由微軟公司開發的最新的資料庫提供者技術,因為ADO技術對OLEDB(Object
Link and Embedding DataBase)進行了封裝並實現了OLEDB所有的功能,所以ADO通過OLEDB可以訪問任何類型的資料來源,並且減少了編程量。ADO訪問資料庫的體系可以概括為:
二:基本流程:
ADO訪問資料庫的目標是訪問、編輯和更新資料來源,因此使用ADO進行資料訪問時,一般需要經過一下步驟:
(1)建立一個資料來源的串連,串連資料庫。
Set objCn = NewConnection
strcn ="provider=microsoft.jet.oledb.4.0;persist security info=false;" &_
"data source=" &App.Path & "\執行個體1.mdb"
objCn.ConnectionString = strcn
objCn.Open
(2)設定一個命令來訪問資料來源的資料。
(3)執行命令。
Set objCmd = New Command
Set objCmd.ActiveConnection = objCn
With objCmd
.CommandText = "select * from 系統使用者where 使用者名稱 like ?" & "and 身份 like ?"
.CommandType = adCmdText
End With
Dim Parm As New Parameter
Set Parm =objCmd.CreateParameter("使用者名稱", adVarChar, adParamInput, 10)
objCmd.Parameters.Append Parm
Set Parm =objCmd.CreateParameter("身份", adVarChar, adParamInput, 10)
objCmd.Parameters.Append Parm
(4)如果命令的執行導致返回資料庫中表的某些行,則將他們儲存在緩衝中,產生相應的資料集對象,以便對其進行操作。
(5)通過資料集對象進行各種操作,包括修改,添加,刪除等。
Private Sub Form_Load()
Set objCn = New Connection
objCn.Open "DSN=執行個體2DSN"
Set objRS = New Recordset
With objRS
.CursorLocation = adUseClient
.CursorType = adOpenDynamic
.LockType = adLockOptimistic
.Open "select * from 系統使用者",objCn
End With
txtUsername =objRS.Fields("使用者名稱").Value
txtPassword =objRS.Fields("口令").Value
txtMsg = objRS.AbsolutePosition &"/" & objRS.RecordCount '直接跳至某條記錄
End Sub
(6)更新資料來源,即將修改的結果返回資料來源。
objRS.Update
(7)結束串連
Set objRS = Nothing
objCn.Close
Set objCn = Nothing
以上是ADO串連資料庫的大概步驟,而實際應用時應根據具體情況靈活應用,有時可能只需執行部分步驟即可達到要求。
三:具體方法
在VB中,使用ADO訪問資料庫主要有兩種方式:一種是使用ADO
Date控制項,通過對控制項的綁定來訪問資料庫中的資料。一種是使用ADO物件模型,即編程訪問方式(上面的舉得例子就是這種方式)
1.使用ADO
Data控制項
可以快速建立資料繫結控制項和資料提供者之間的串連。
在實現資料訪問時,只需設定好ADO Data控制項的資料相關的屬性,無需編寫程式碼或者只需少量的代碼就可以實現資料訪問,同時也可以結合DataGrid控制項來實現資料的顯示和修改。
具體步驟不在呈現!
2.使用ADO物件模型訪問資料庫
如,ADO物件模型共包括七個對象,三個主要對象和四個依賴於主要對象的對象集合,他們的關係可以概括為:
下面我們舉一個簡單的例子,訪問資料庫並執行一個簡單的查詢命令:
聲明變數:
Dim objRS AsRecordset
'用於儲存資料來源記錄集
Dim objCn AsConnection
'用於建立資料來源串連
Dim isNeedSave AsBoolean
'用於標識是否需要執行儲存操作
Private SubForm_Load()
建立資料庫連接:
Set objCn = New Connection '執行個體化Connection對象
strcn ="Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\資料庫\db1.mdb"
objCn.Open strcn '建立資料庫連接
'建立用戶端的記錄集
Set objRS = New Recordset
With objRS
.CursorLocation = adUseClient '指定遊標位置
.CursorType = adOpenStatic '指定使用鍵集遊標
.LockType = adLockOptimistic '指定鎖定類型
.Open "SELECT * FROM 系統使用者",objCn
End With
'顯示第一個記錄資料
txtUserName =objRS.Fields("使用者名稱").Value
txtPassword =objRS.Fields("口令").Value
txtMsg = objRS.AbsolutePosition &"/" & objRS.RecordCount
End Sub
’善後工作:
Private SubForm_Unload(Cancel As Integer)
Set objRS = Nothing '釋放記錄集對象
objCn.Close '釋放資料庫連接
Set objCn = Nothing '釋放連線物件
End Sub
兩種ADO資料庫訪問方式的特點:
(1)使用ADO控制項幾乎封裝了相應代碼的所有功能,簡化編程。但是也造成了它的靈活性較差,一般一個ADO
Data控制項只能在同一個資料來源上開啟一個記錄集或者執行一個查詢命令。而使用ADO物件模型就要靈活的多,可以建立獨立的連線物件,可以在同一個資料來源上開啟多了記錄集或執行多個命令。可動態指定資料庫的來源地。
(2)使用ADO Data控制項可以簡化操作過程,但功能上有所限制,很多功能都是靜態,在運行時很難改變。而使用ADO物件模型能夠自由的控制各種操作。
(3)使用ADO Data控制項在資料表記錄的瀏覽、添加。修改上提供了簡化操作,但如果資料庫過大的話,就會造成效率低下。
也就是說:ADO控制項最大的優點就是操作簡單,但是靈活性和功能以及效率上沒有ADO物件模型好。在使用時我們應該根據具體情況而定,用ADO
Data控制項訪問小型的資料庫應用程式,而大型的資料庫應用程式的開發採用ADO物件模型來實現。
只是學習了一些皮毛,不對的地方歡迎大家指正!