37
第第第第 第 ADODC 第第第第第

第十四章

Embed Size (px)

DESCRIPTION

第十四章. 用 ADODC 操作資料庫. 資料庫基本概念. 所謂的資料庫 一個將相關資料組織化的集合 資料庫的種類 階層式 網狀式 關聯式 常見的關連式資料庫 SQL Server Oracle Informix DB2 ……. 關聯式資料庫的基本成員. 資料錄( Record) 欄位( Field, 可以是不同資料型別)的集合 例如:學生的資料卡,代表一組完整的資料 欄位( Field) 資料錄中具有資料型別及長度的儲存空間 例如:學生資料卡上的姓名欄位 資料表( Table) 許多資料錄( Record) 所形成的集合 - PowerPoint PPT Presentation

Citation preview

Page 1: 第十四章

第十四章

用 ADODC操作資料庫

Page 2: 第十四章

資料庫基本概念– 所謂的資料庫一個將相關資料組織化的集合

– 資料庫的種類• 階層式• 網狀式• 關聯式

– 常見的關連式資料庫• SQL Server

• Oracle

• Informix

• DB2

• ……

Page 3: 第十四章

關聯式資料庫的基本成員– (資料錄 Record)

• 欄位 (Field,可以是不同資料型別 )的集合• 例如:學生的資料卡,代表一組完整的資料

– (欄位 Field)

• 資料錄中具有資料型別及長度的儲存空間• 例如:學生資料卡上的姓名欄位

– (資料表 Table)

• 許多資料錄 (Record)所形成的集合• 例如:一個班級學生的資料卡

– (資料庫 Database)

• 好幾個資料表 (Table)的集合• 例如:全校各班級的學生資料

Page 4: 第十四章

UDA架構• UDA是 Universal Data Access的縮寫• Microsoft以這個架構解決企業透過網際網路、以多層式架構存取各類型資料時的問題

• UDA的組成包含了一組元件,彼此之間透過 OLE DB所定義的介面溝通

– OLE DB• 是在處理資料時系統階層的程式設計介面• OLE DB包含三類元件,分別是:

– 資料提供者 (Data Provider)

– 資料服務元件 (Service Components)

– 資料使用者 (Data Consumers)

Page 5: 第十四章

OLE DB(1)資料使用者

Visual Basic應用程式 Visual C++應用程式

ASP網頁 應其他用程式

ADO

服務元件資料庫指標引擎 查詢處理器

資料提供者ODBC提供者 簡單資料提供者 OLE DB提供者

ODBC

主機資料 非關聯式資料庫

資料庫資料庫

Page 6: 第十四章

OLE DB(2)

資料提供者• 所謂的資料提供者,就是存取資料的來源

– 例如: SQL Server 、 Exchange 、或是作業系統中的檔案系統

• 凡是能提供資料給其他應用程式使用的就是資料提供者 (Data Provider)

• 服務元件及資料的使用者,可以透過 OLE DB介面直接與這些資料提供者接觸、存取資料。

• 在傳統的 ODBC方面,也有專門處理 ODBC資料的 OLE DB,讓以前只有透過 ODBC才能夠存取的資料,透過 OLE DB也可以存取

Page 7: 第十四章

OLE DB(3)

資料使用者• 使用資料提供者所提供資料的應用程式,就是資料使用者資料使用者

((Data Consumer)Data Consumer)

• 利用 ADO所提供的功能就能存取 OLE DB的資料;凡是使用ADO功能的應用程式,它們就是 OLE DB的資料使用者

服務元件• 在 OLE DB中有某些元件是負責處理及傳送資料的,這就是服服務元件務元件 ((Service Components)Service Components)

• 包括查詢處理器 (Query Processor)及資料庫指標引擎 (Cursor Engine)

• ADO不一定要認得資料提供者;只要 ADO可以連接這些服務元件,而這些服務元件可以連上資料提供者,於是 ADO就可以享用 OLE DB的資料

Page 8: 第十四章

加入 ADODC(1)• 在預設的情況下, Visual Basic整合開發環境所提供的是Data控制項,而不是ADODC

• 使用ADODC控制項來存取 OLE DB資料的步驟1. 執行功能表項目”專案 (P)/設定使用元件 (O)

2. 在螢幕上的”設定使用元件”對話方塊上,找到”Microsoft ADO Data Control 6.0(SP4)(OLEDB)”

Page 9: 第十四章

加入 ADODC(2)3. 核取Microsoft ADO Data Control 6.0(SP4)(OLEDB)這個項目後,按下 [套用 (A)],再按下 [確定 ]按鈕

4. 在工具箱上會出現一個 ADODC控制項的圖示

ADODC 在工具箱中的樣子

ADODC 在表單中的樣子

Page 10: 第十四章

ADODC的功能• ADODC的功能在於連接資料庫的資料表 (Table)或 RecordSet

• 再用資料感知元件連接 ADODC,將每個欄位資料顯示出來

• ADODC控制項執行大部份的資料存取動作時,並不需要撰寫任何的程式碼

• 當移動 ADODC的記錄指標時,與 ADODC控制項連結的資料感知控制項 (Data Aware) 則會自動顯示目前資料錄 (Current Record)內容

Page 11: 第十四章

ADODC常用的屬性 (1)• BofAction

– BOF(Begin Of File)屬性值為 True時, ADODC所採取的動作• 0:表示將記錄指標移到記錄中的第一筆 (預設值 )• 1:表示記錄指標會移到資料表的開頭

• CommandTimeOut– 表示在執行指令過程中,如果超過這個設定的秒數而未回應,則中止作業並產生錯誤

– 這個屬性可以設定或傳回一個以秒為單位的等待時間– 預設值是 30( 秒 )

• CommandType– 指定傳入 Command 物件的種類

• 1-   SQL查詢敘述• 2-   Table名稱• 4-   Store Procedure• 8-   不做設定 (預設值 )

– 這個屬性欄設定必須與 RecordSource屬性欄配合使用

Page 12: 第十四章

ADODC常用的屬性 (2)

• ConnectionTimeOut– 在連線過程中,如果超過這個設定的秒數而未連線成功,則中止連線作業並產生錯誤

– 這個屬性可以設定或傳回一個以秒為單位的等待時間。– 預設值是 15( 秒 )

• ConnectString– 用來建立資料源連接的資訊,例如:資料提供者名稱、

伺服器路徑名稱、驅動程式等• CursorLocation:

– 設定或傳回資料指標引擎的位置• 2     表示使用 Server-side指標• 3     表示使用 Client-Side指標

Page 13: 第十四章

ADODC常用的屬性 (3)

• CursorType– 設定資料指標類型

• 1-Keyset:索引鍵集 (Keyset) 資料指標從取得的 Recordset 無法看到其他使用者新增的資料錄及存取其他使用者刪除的資料錄,但是仍然可以看到其他使用者變更的資料錄

• 2-Dynamic:動態資料指標,可看到其他使用者所做的增加,變更和刪除結果,而且允許在 Recordset 進行所有型態的動作

• 3-Static:靜態資料指標 (預設值 ),一組可讓您用來找尋資料或產生報表的資料錄的靜態複本,但看不到其他使用者所做的增加、變更或刪除結果

Page 14: 第十四章

ADODC常用的屬性 (4)• EofAction

– EOF(End Of File) 為 True時, ADODC所採取的動作• 0表示將記錄指標移回到最後一筆 (預設值 )• 1表示移到結尾 (EOF = True)• 2表示新增一筆記錄

• LockType– 設定開啟資料庫的鎖定狀態

• -1-adLockUnspecified:不指定• 1-adLockReadOnly:預設值。唯讀 • 2-adLockPessimistic:悲觀鎖定。在編輯時鎖定資料錄, Update後才解除鎖定

• 3-adLockOptimistic:樂觀鎖定。呼叫 Update方法時才鎖定

• 4-adLockBatchOptimistic:批次樂觀鎖定。批次更新模式時需要。在呼叫 UpdateBatch前,無論如何編輯、改變都不鎖定

Page 15: 第十四章

ADODC常用的屬性 (5)• MAXRecords

– 最大傳回資料錄筆數– 預設值為 0,表示無限制

• Password– 登入資料庫時所使用的密碼。必須與 User屬性配合

• RecordSource– 必須與 CommandType屬性欄配合– 用來設定資料錄的來源;可以是 SQL 敘述查詢的結果、

Table、 Store Procedure

• User– 登入資料庫時的使用者帳號– 並不是所有的資料庫系統都會有確認使用者的功能,通常是較大型、功能完整的資料庫才會具備有這樣的功能,例如 SQL Server、 Oracle 等。

Page 16: 第十四章

Recordset 物件• 程式會依照 ADODC所設定的屬性值來開啟資料庫,將傳回的資料建立為 RecordsetRecordset 物件。

• Recordset 物件就是資料表 (Table)或其他擷取的資料錄集合

• 操作 Recordset 物件所屬的AddNewAddNew、 EditEdit、 DeleteDelete、 FindFind 等方法,就可以對ADODC控制項所連結的資料表 (Table)或資料錄集合做新增新增、修改修改、刪除刪除、查詢查詢等動作

Page 17: 第十四章

資料感知元件 (Data-Aware

Control) • 可以跟 RecordSet連接的控制項,就被稱為資料感知元件 (Data-Aware Control)

• 常見的 Label、 TextBox 等都屬於資料感知元件• 像 Label、 TextBox只能顯示單一資料的資料感知元件,所顯示的資料就是資料庫指標所指的欄位內容

• 要將資料感知元件 (例如 TextBox)與某個欄位連結,必須定義兩個屬性

– DataSourceDataSource:設定連結的資料表 (或資料錄集合 )控制項名稱,例如 ADODC的名稱

– DataFieldDataField:設定資料表 (或資料錄集合 )中的欄位名稱

Page 18: 第十四章

ADODC 範例實作 (1)– 範例 (EX14-1~Ex14-7)

• 連結資料庫 dbBkfile.mdb中的資料表 Bkfile(在目錄EX14-1中 )

– 說明• 完整的範例程式具有一般的資料庫管理程式所必備的四個基本功能

– 新增– 修改– 刪除– 查詢

Page 19: 第十四章

ADODC 範例實作 (2) 連接資料庫 (EX14-1)

1. 在表單上加入一個ADODC控制項、五個標籤、四個文字框、一個命令鈕

Page 20: 第十四章

ADODC 範例實作 (3)2. 修改各控制項的名稱設定

控 制 項 種 類 名稱 (Object Name)

標題 (Caption)

表單 FrmLibrary 圖書館

命令鈕 cmdQuit 離開

標籤 lblTitle 圖書館

標籤 lblCode 書號

標籤 lblBkname 書名

標籤 lblAuthor 作者

標籤 lblISBN ISBN

文字框 txtCode (空白 )

文字框 txtBkname (空白 )

文字框 txtAuthor (空白 )

文字框 txtISBN (空白 )

Adodc控制項 AdodcBook 圖書主檔

Page 21: 第十四章

ADODC 範例實作 (4)3. 在 ADODC控制項上按下滑鼠右鍵,開啟快顯功能表,執行快顯功能表上的” ADODC的屬性”

4. 請在”屬性頁”對話方塊中選擇”使用連線字串”的選項按鈕;接下來請按下 [ 建立 (U)…]按鈕

Page 22: 第十四章

ADODC 範例實作 (5)5. 在”資料連結內容”對話方塊上選擇資料庫類型:選用Microsoft Jet 4.0 OLE DB Provider,然後按下 [下一步 (N)>>]

1. 選擇要連接的資料庫類型

2. 按 下 [ 下 一 步(N)>>]

Page 23: 第十四章

ADODC 範例實作 (6)6. 選擇書上作為範例 Ch14.mdb資料庫檔案7. 按下 [ 測試連接 (T)]按鈕,如果一切正常的話,應

該會出現”測試連接成功”的訊息

Page 24: 第十四章

ADODC 範例實作 (7)8. 按下”資料連結內容”對話方塊上的 [確定 ]按鈕後,

回到屬性頁上。切換到資料錄來源

9. 在命令類型方面選擇 2-adCmdTable。然後在”資料表或預存程序的名稱”處選擇「圖書主檔」。按下 [套用 (A)]、 [確定 ]按鈕,連線字串就完成了

1. 切 換 至資料錄來源

2. 選 擇 2-adCmdTable

3. 選擇圖書主檔

4. 按下 [ 套用(A)]5. 按下 [ 確

定 ]

Page 25: 第十四章

ADODC 範例實作 (8)10.由於每個 TextBox可以代表一個資料表的欄位,而資料表 Bkfile中包含有四個欄位:Bkcode、 BkName、 Author、 ISBN,所以請按下表設定DataSource及DataField的值

TextBox名稱 DataSource屬性 DataField屬性 說 明

txtCode AdodcBook Bkcode 書號

txtBkName AdodcBook BkName 書名

txtAuthor AdodcBook Author 作者

txtISBN AdodcBook ISBN ISBN 號碼

Page 26: 第十四章

ADODC 範例實作 (9)11.在 cmdQuit_Click()事件 ([離開 ]按鈕 )中加入下列程式碼

12.按 [F5]執行。現在已經可以按資料控制項中的左、右箭頭來移動資料錄錄指標,瀏覽整個資料表的內容

01. Private Sub cmdQuit_Click()02. End03. End Sub

往檔尾移動一筆往檔頭移動一筆

Page 27: 第十四章

ADODC 範例實作 (10) 加入新增功能 (EX14-2)

1. 先結束程式執行,然後在表單中加入一個新的框架,並在框架上加上一個命令鈕 -cmdAdd,標題是“新增”

放入框架及命令鈕

Page 28: 第十四章

ADODC 範例實作 (11)2. 在CmdAdd_Click 事件中,輸入以下程式碼

3. 按 [F5]開始。輸入完資料後要用滑鼠按ADODC的左箭頭或右箭頭,才能將資料寫入

Private Sub cmdAdd_Click()Dim strMsg As String, intAns As IntegerstrMsg = " 請輸入欲新增的資料,並按左鍵或右鍵存檔

"intAns = MsgBox(strMsg, vbOKCancel, " 新增 ")If intAns = vbOK Then txtcode.SetFocus adodcBOOK.Recordset.AddNewadodcBOOK.Recordset.AddNewEnd IfEnd Sub

Page 29: 第十四章

ADODC 範例實作 (12) 加入修改功能 (EX14-3)

1. 在表單中加入一個新的命令鈕 cmdModify,也就是 [ 修改 ] 命令鈕

加入 [ 修改 ] 命令鈕

Page 30: 第十四章

ADODC 範例實作 (13)2. 請在 [ 修改 ]鈕的 cmdModify_Click() 事件中,加入下面程式碼

這一段程式碼只是刪除了AddNew方法

Private Sub cmdModify_Click()Dim strMsg As String, intAns As IntegerstrMsg = “ 請輸入欲修改的資料,並按左鍵或右鍵存檔 "intAns = MsgBox(strMsg, vbOKCancel, “ 修改 ")If intAns = vbOK Then txtcode.SetFocusEnd If

End Sub

Page 31: 第十四章

ADODC 範例實作 (14) 加入刪除功能 (EX14-4)

1. 在表單中加入一個 [ 刪除 ]鈕: cmdDelete

加入 [ 刪除 ] 命令鈕

Page 32: 第十四章

ADODC 範例實作 (15)2. 在 [ 刪除 ]鈕的 cmdDelete_Click() 事件中,加入下面這

段程式碼

我們使用了兩個新的方法• Delete方法:它會將這筆記錄刪掉• MoveNext方法:它會讓資料錄指標往下移動一筆

Private Sub cmdDelete_Click()Dim strMsg As String, intAns As IntegerstrMsg = "確定要刪除這一筆記錄嗎? "intAns = MsgBox(strMsg, vbOKCancel, " 刪除 ")If intAns = vbOK Then adodcBOOK.Recordset.DeleteadodcBOOK.Recordset.Delete adodcBOOK.Recordset.MoveNextadodcBOOK.Recordset.MoveNextEnd IfEnd Sub

Page 33: 第十四章

ADODC 範例實作 (16) 加入查詢功能 (EX14-5)

1. 在表單中加入一個新的命令鈕: cmdQuery,也就是 [查詢 ]鈕

加入 [查詢 ] 命令鈕

Page 34: 第十四章

ADODC 範例實作 (17)2. 在 [查詢 ]鈕的 cmdQuery_Click() 事件中加入下列程式碼

程式先使用 InputBox() 函數來擷取使用者輸入的字串,然後再以 FindFind方法搜尋完全符合輸入條件的資料錄。找不到時,指標會跳到 EOF的位置。為避免程式產生錯誤,我們使用MoveFirstMoveFirst方法將記錄指標移到第一筆記錄上

Private Sub cmdQuery_Click()Dim strMsg, strSearch As StringstrMsg = " 請輸入完整的書名 "strSearch = InputBox(strMsg, "查詢 ")adodcBOOK.Recordset.Find "Bkname='" & strSearch & "'"adodcBOOK.Recordset.Find "Bkname='" & strSearch & "'"If adodcBOOK.Recordset.EOFadodcBOOK.Recordset.EOF Then MsgBox (“ 抱歉!沒有找到您所要的資料“ ) adodcBOOK.Recordset.MoveFirstadodcBOOK.Recordset.MoveFirstEnd IfEnd Sub

Page 35: 第十四章

ADODC 範例實作 (18) Update方法 (EX14-6)

– 移動ADODC的資料錄指標會將異動資料寫入資料庫– Recordset的 UpdateUpdate方法也可將異動資料寫入資料庫

1. 在 Form上放置一個新的按鈕 --cmdAddConfirm,並將這個按鈕的Visible屬性設為 False

加入 [確定 ] 命令鈕,重疊在 [ 新增 ]按鈕之上

Page 36: 第十四章

ADODC 範例實作 (19)2. 在 CmdAdd_Click() 事件程序中將其他沒有用到的控制項 Disable或 Hide 起來。然後再將CmdAddComfirm按鈕顯示 (Show)出來

Private Sub cmdAdd_Click()Dim strMsg As String, intAns As integerstrMsg = " 請輸入欲新增的資料,然後按下 [確定 ]按鈕 "intAns = MsgBox(strMsg, vbOKCancel, " 新增 ")If intAns = vbOK Then txtcode.SetFocus adodcBOOK.Recordset.AddNew cmdDelete.Visible = FalsecmdDelete.Visible = False cmdModify.Visible = FalsecmdModify.Visible = False cmdQuery.Visible = FalsecmdQuery.Visible = False cmdQuit.Visible = FalsecmdQuit.Visible = False cmdAddConfirm.Visible = TruecmdAddConfirm.Visible = True cmdAdd.Visible = FalsecmdAdd.Visible = FalseEnd If

14. End Sub

Page 37: 第十四章

ADODC 範例實作 (20)3. 在按下 [確定 ]按鈕、執行Update方法後,得將原來

Disable或Hide的按鈕回復原狀、並將CmdAddConfirm按鈕Disable或Hide 起來,以便讓使用者可以區別輸入或是一般的狀態

01. Private Sub cmdAddConfirm_Click()02. adodcBOOK.Recordset.UpdateadodcBOOK.Recordset.Update03. cmdDelete.Visible = TruecmdDelete.Visible = True04. cmdModify.Visible =cmdModify.Visible = TrueTrue05. cmdQuery.Visible = TruecmdQuery.Visible = True06. cmdQuit.Visible = TruecmdQuit.Visible = True07. cmdAddConfirm.Visible = FalsecmdAddConfirm.Visible = False08. cmdAdd.Visible = TruecmdAdd.Visible = True09. End Sub