資料庫程式設計 VB資料庫設計簡介 週次:4 建國科技大學 資管系 饒瑞佶
資料控制項與資料存取物件 資料庫控制項 ( Adodc或DATA ) 提供的功能有限 半自動 方便,使用者不需要額外撰寫程式 功能較完整 需要撰寫程式碼 半自動 完全手動 二者可以交互使用
ADO的子物件 Connection物件:用以連接資料庫 Recordset物件:取得資料來源 Command物件:儲存操作資料庫時用到的命令 Parameter物件:管理查詢或預儲程式 Field物件:儲存欄位資料 Error物件:處理錯誤訊息 Property物件:保存Connection, Command, Recordset 與Field物件屬性的物件
物件間相對關係 Connection Recordset Property (ies) Fields 集合物件 Error Field 物件 Command Parameter(s)
如何存取物件成員? Recordset.Field (1) Recordset Fields Field (0) 使用索引編號 編號從0開始 但是當物件索引編號太多, 誰還記得我要的是第幾個
如何存取物件成員? 除了Recordset.Field (1)的寫法外 也可以使用物件的名稱來存取 Recordset對應的是一個資料表 HOW ? Recordset對應的是一個資料表 Fields對應的是一筆資料 Field對應的是一筆資料中的某個欄位 記欄位名稱一定比記索引編號更容易 所以欄位一定要取有意義的名稱
如何存取物件成員? 除了Recordset.Field (1)的寫法外 也可以使用 Recordset.Field (“書名”)
ADO的功用 移動紀錄 更新紀錄 新增紀錄 刪除紀錄 搜尋紀錄 篩選記錄 排序紀錄 還記得Adodc控制項中也介紹過此些功能嗎 ?
VB中如何引用ADO? 專案 設定引用項目 Microsoft ActiveX Data Objects 2.7
如何建立ADO? 宣告物件變數 (使用物件類別) 將物件型態帶入變數中 (真正建立物件) 物件 類別名稱 Connection ADODB.Connection Error ADODB. Error Command ADODB. Command Parameter ADODB. Parameter Recordset ADODB. Recordset Field ADODB.Field Property ADODB. Property
如何建立ADO? 完成宣告物件變數, 但是還沒有建立 例如要宣告一個Connection物件 Dim Cn As ADODB.Connection 物件變數 物件類別 完成宣告物件變數, 但是還沒有建立
如何建立ADO? 完成物件的建立 要建立一個Connection物件 Dim Cn As ADODB.Connection Set Cn = New ADODB.Connection 物件變數 建立物件 完成物件的建立
其他建立ADO物件的方法 Dim Cn As ADODB.Connection Set Cn = New ADODB.Connection Set Cn = CreatObject(ADODB.Connection) Dim Cn As New ADODB.Connection
使用ADO物件 有了物件之後要做的是希望從資料庫中存取與操作資料 如何做呢 ?? 現在就真的要靠自己了 (懷念adodc控制項嗎?) 第一步應該是要先與資料庫取得聯繫 所以Connection物件就先登場了
Connection物件 建立物件 設定ConnectionString屬性 (還記得在adodc中也是設定此屬性,不過是程式自動產生的) 使用Connection物件的Open方法
ConnectionString屬性 一字串型態的參數 每個關鍵參數以; 號區隔 關鍵參數 說明 Provider 連結資料庫時所提供的OLE DB Provider (JET Engine) Data Source 連結資料庫的完整路徑 Location 連結的伺服器名稱 User ID 連結資料庫或伺服器時的使用者名稱 Password 連結資料庫或伺服器時的使用者密碼 File Name 使用Data Link File連結時 .udl的檔名 DSN 使用ODBC DSN連結時的DSN名稱 Driver ODBC驅動程式的名稱 DBQ 使用ODBC連結時,資料庫的檔名
Provider種類 資料庫種類 Provider名稱 Access Microsoft.Jet.OLEDB.3.51 ODBC MSDASQL SQL Server SQLODEDB Oracle MSDAORA
連結開啟資料庫 Dim Cn as ADODB.Connection 建立物件 Set Cn = New ADODB.Connection Cn.ConnectionString = “Provider=Microsoft.Jet.OLEDB.4.0;”_ & “DATA Source=c:\vb6\db\book.mdb” Cn.open 建立物件 設定ConnectionString屬性 使用Open方法
關閉連結資料庫 使用Close方法 Cn.Close 不過如此只是將佔用的系統資源釋放, 記憶體中 的資料庫資料並不會被移除,可以再使用Cn.Open 來再度開啟連結 Set Cn= nothing 可完全從記憶體釋放 Cn.close
Practice 其中有關Recordset的部分留待下一節再詳述
連結資料庫 Open方法與ConnectionString屬性的合併 Cn.ConnectionString = “Provider=Microsoft.Jet.OLEDB.4.0;”_ & “DATA Source=c:\vb6\db\book.mdb” Cn.open Cn.open “Provider=Microsoft.Jet.OLEDB.4.0;”_ & “DATA Source=c:\vb6\db\book.mdb” 或 Cstr= “Provider=Microsoft.Jet.OLEDB.4.0;”_ & “DATA Source=c:\vb6\db\book.mdb” Cn.open Cstr
使用ODBC DSN連結資料庫 或 Dim Cn as ADODB.Connection Set Cn = New ADODB.Connection Cn.ConnectionString = “DSN=cnBook” Cn.open 或 Cn.open “DSN=cnBook”
使用ODBC連結資料庫 或 Dim Cn as ADODB.Connection Set Cn = New ADODB.Connection Cn.ConnectionString = “Driver=Microsoft Access Driver (*.mdb); DBQ=c:\vb6\db\book.mdb” Cn.open 或 Cn.open “Driver=Microsoft Access Driver (*.mdb); DBQ=c:\vb6\db\book.mdb”
有Username與Password連結資料庫 Dim Cn as ADODB.Connection Set Cn = New ADODB.Connection Cn.ConnectionString =“DSN=cnbook;User ID=sa;Password=xxx” Cn.open 或 Cn.open “DSN=cnbook”,”User ID=sa”, “Password=xxx”
連上資料庫後呢?? 終於可以連結上資料庫了,然後呢?? 應該是要存取與操作資料,所以輪到Recordset物件登場
建立Recordset物件 建立Recordset物件 設定Source與ActiveConnection屬性 使用Open方法 沒錯大部分的物件建立步驟都類似
建立Recordset物件的方法 Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset Dim rs As ADODB. Recordset Set rs = CreatObject(ADODB. Recordset) Dim rs As New ADODB. Recordset
Source與ActiveConnection屬性
Source屬性 Dim rs as ADODB.Recordset Set rs = New ADODB.Recordset Rs.Source = “書籍” 資料表名稱
AvtiveConnection屬性與Open方法 Dim Cn as ADODB.Connection Dim Rs as ADODB.Recordset Set Cn = New ADODB.Connection Cn.ConnectionString = “Provider=Microsoft.Jet.OLEDB.3.51;”_ & “DATA Source=c:\vb6\db\book.mdb” Cn.open Set Rs = New ADODB.Recordset Rs.Source=“書籍” Rs.ActiveConnection=Cn Rs.open
關閉資料表 使用Close方法 Rs.Close 不過如此只是將佔用的系統資源釋放, 記憶體中 的資料庫資料並不會被移除,可以再使用Rs.Open 來再度開啟連結 Set Rs= nothing 可完全從記憶體釋放 Rs.close
Practice
再論Recordset的Open方法 Source與ActiveConnection的設定可以與Open方法合併 Rs.Source=“書籍” Rs.ActiveConnection=Cn == Rs.open “書籍”, Cn Rs.open Recordset.open Source, ActiveConnection, Cursortype, Locktype, Options
Cursortype 種類 值 說明 AdOpenForwardOnly 只可向前移動 AdOpenKeySet 1 可以自由移動 標示如何操作資料表 種類 值 說明 AdOpenForwardOnly 只可向前移動 AdOpenKeySet 1 可以自由移動 AdOpenDynamic 2 可動態更新編輯 AdOpenStatic 3 靜態更新編輯
使用Cursortype Rs.Source=“書籍” Rs.ActiveConnection=Cn Rs.Cursortype=AdOpenDynamic Rs.open 或 Rs.Open “書籍”,Cn, AdOpenDynamic
LockType 標示如何鎖定資料表 種類 值 說明 AdOpenReadOnly 1 唯讀 AdOpenPessimistic 2 悲觀鎖定,取得資料表後所定 AdOpenOptimistic 3 樂觀鎖定,更新時才鎖定 AdOpenBatchOptimistic 4 批次樂觀鎖定,需下UPDATE Batch
使用LockType Rs.Source=“書籍” Rs.ActiveConnection=Cn Rs.Cursortype=AdOpenDynamic Rs.LockType = AdOpenPessimistic Rs.open 或 Rs.Open “書籍”,Cn, AdOpenDynamic, AdOpenPessimistic