《资料控制项与资料存取物件.ppt》由会员分享,可在线阅读,更多相关《资料控制项与资料存取物件.ppt(37页珍藏版)》请在三一办公上搜索。
1、資料控制項與資料存取物件,資料庫控制項(Adodc)提供的功能有限方便,使用者不需要額外撰寫程式資料存取物件(ADO)功能較完整需要撰寫程式碼,二者可以交互使用,半自動,完全手動,ADO的子物件,Connection物件:用以連接資料庫Recordset物件:取得資料來源Command物件:儲存操作資料庫時用到的命令Parameter物件:管理查詢或預儲程式Field物件:儲存欄位資料Error物件:處理錯誤訊息Property物件:保存Connection,Command,Recordset 與Field物件屬性的物件,物件間相對關係,Connection,Recordset,Fields,
2、Field,Command,Error,Property,Property,Property,Parameter(s),物件,集合物件,如何存取物件成員?,Recordset,Fields,Field(0),Field(1),Field(2),Field(3),Field(4),使用索引編號編號從0開始,Recordset.Field(1),但是當物件索引編號太多,誰還記得我要的是第幾個,如何存取物件成員?,除了Recordset.Field(1)的寫法外也可以使用物件的名稱來存取,HOW?,Recordset對應的是一個資料表Fields對應的是一筆資料Field對應的是一筆資料中的某個欄位
3、,記欄位名稱一定比記索引編號更容易所以欄位一定要取有意義的名稱,如何存取物件成員?,除了Recordset.Field(1)的寫法外也可以使用Recordset.Field(“書名”)Recordset(“書名”)Recordset.Field!書名Recordset!書名,ADO的功用,移動紀錄更新紀錄新增紀錄刪除紀錄搜尋紀錄篩選記錄排序紀錄,還記得Adodc控制項中也介紹過此些功能嗎?,VB中如何引用ADO?,專案 設定引用項目 Microsoft ActiveX Data Objects 2.8,如何建立ADO?,宣告物件變數(使用物件類別)將物件型態帶入變數中(真正建立物件),如何建立
4、ADO?,例如要宣告一個Connection物件Dim Cn As ADODB.Connection,完成宣告物件變數,但是還沒有建立,如何建立ADO?,要建立一個Connection物件Dim Cn As ADODB.ConnectionSet Cn=New ADODB.Connection,完成物件的建立,其他建立ADO物件的方法,Dim Cn As ADODB.ConnectionSet Cn=New ADODB.Connection,Dim Cn As ADODB.ConnectionSet Cn=CreatObject(ADODB.Connection),Dim Cn As New
5、ADODB.Connection,使用ADO物件,有了物件之後要做的是希望從資料庫中存取與操作資料,如何做呢?現在就真的要靠自己了(懷念adodc控制項嗎?),第一步應該是要先與資料庫取得聯繫,所以Connection物件就先登場了,Connection物件,建立物件設定ConnectionString屬性(還記得在adodc中也是設定此屬性,不過是程式自動產生的)使用Connection物件的Open方法,ConnectionString屬性,一字串型態的參數每個關鍵參數以;號區隔,Provider種類,連結開啟資料庫,Dim Cn as ADODB.ConnectionSet Cn=New
6、 ADODB.ConnectionCn.ConnectionString=“Provider=Microsoft.Jet.OLEDB.4.0;”_&“DATA Source=c:vb6dbbook.mdb”Cn.open,建立物件,設定ConnectionString屬性,使用Open方法,關閉連結資料庫,使用Close方法 Cn.Close不過如此只是將佔用的系統資源釋放,記憶體中的資料庫資料並不會被移除,可以再使用Cn.Open來再度開啟連結Set Cn=nothing 可完全從記憶體釋放Cn.close,連結資料庫,Open方法與ConnectionString屬性的合併Cn.Conne
7、ctionString=“Provider=Microsoft.Jet.OLEDB.4.0;”_&“DATA Source=c:vb6dbbook.mdb”Cn.open,Cn.open“Provider=Microsoft.Jet.OLEDB.4.0;”_”_&“DATA Source=c:vb6dbbook.mdb”Cn.open Cstr,使用ODBC DSN連結資料庫,Dim Cn as ADODB.ConnectionSet Cn=New ADODB.ConnectionCn.ConnectionString=“DSN=cnBook”Cn.open 或Dim Cn as ADODB.
8、ConnectionSet Cn=New ADODB.ConnectionCn.open“DSN=cnBook”,有Username與Password連結資料庫,Dim Cn as ADODB.ConnectionSet Cn=New ADODB.ConnectionCn.ConnectionString=“DSN=cnbook;User ID=sa;Password=xxx”Cn.open 或Dim Cn as ADODB.ConnectionSet Cn=New ADODB.ConnectionCn.open“DSN=cnbook”,”User ID=sa”,“Password=xxx”,
9、Practice,其中有關Recordset的部分留待下一節再詳述,連上資料庫後呢?,終於可以連結上資料庫了,然後呢?,應該是要存取與操作資料,所以輪到Recordset物件登場,建立Recordset物件,建立Recordset物件設定Source與ActiveConnection屬性 使用Open方法,是不是與Connection物件的步驟類似?沒錯大部分的物件建立步驟都類似,建立Recordset物件的方法,Dim rs As ADODB.RecordsetSet rs=New ADODB.Recordset,Dim rs As ADODB.RecordsetSet rs=CreatOb
10、ject(ADODB.Recordset),Dim rs As New ADODB.Recordset,Source與ActiveConnection屬性,Source:表示要連結的資料表ActiveConnection:表示連結的資料庫(即Connection物件),Source屬性,Dim rs as ADODB.RecordsetSet rs=New ADODB.RecordsetRs.Source=“書籍”,AvtiveConnection屬性與Open方法,Dim Cn as ADODB.ConnectionDim Rs as ADODB.RecordsetSet Cn=New AD
11、ODB.ConnectionCn.ConnectionString=“Provider=Microsoft.Jet.OLEDB.3.51;”_&“DATA Source=c:vb6dbbook.mdb”Cn.openSet Rs=New ADODB.RecordsetRs.Source=“書籍”Rs.ActiveConnection=CnRs.open,關閉資料表,使用Close方法 Rs.Close不過如此只是將佔用的系統資源釋放,記憶體中的資料庫資料並不會被移除,可以再使用Rs.Open來再度開啟連結Set Rs=nothing 可完全從記憶體釋放Rs.close,Practice,再論R
12、ecordset的Open方法,Source與ActiveConnection的設定可以與Open方法合併Rs.Source=“書籍”Rs.ActiveConnection=Cn=Rs.open“書籍”,CnRs.open,Recordset.open Source,ActiveConnection,Cursortype,Locktype,Options,Cursortype,標示如何操作資料表,CursorType,Dynamic:adOpenDynamicFully updateable recordset All actions made by other users while the
13、 recordset is open are visibleAll types of movement(up and down)Keyset:adOpenKeysetUpdateable recordsetIt prevents access to records that other users add after it was createdAll types of movementStatic:adOpenStaticStatic non-updateable recordset(retrieve data)Changes made by other users while the re
14、cordset is open arent visibleAll types of movementForward-only:adOpenForwardOnly(default)Static non-updateable recordset Only Scroll forward through the records(MoveNext,GetRows),Actions:Insert,Update&Delete,使用Cursortype,Rs.Source=“書籍”Rs.ActiveConnection=Cn Rs.Cursortype=AdOpenDynamicRs.open或Rs.Open
15、“書籍”,Cn,AdOpenDynamic,LockType,標示如何鎖定資料表,LockType,adLockReadOnlyCannot alter the data(no updates,inserts,or deletions)adLockPessimistic(better at the databases integrity)Record lock during editingLock out everyone else from the record youre editingLock from the time of first change until call the Up
16、date methodadLockOptimisticNo lock during editing Lock the record only during the call to UpdateadLockBatchOptimisticNo lock during editing(modify,insert,delete)Batch update:Lock the records only during the call to UpdateBatch,使用LockType,Rs.Source=“書籍”Rs.ActiveConnection=Cn Rs.Cursortype=AdOpenDynamicRs.LockType=AdOpenPessimisticRs.open或Rs.Open“書籍”,Cn,AdOpenDynamic,AdOpenPessimistic,