Upload
martha-byrd
View
24
Download
3
Embed Size (px)
DESCRIPTION
第十四章. 用 ADODC 操作資料庫. 資料庫基本概念. 所謂的資料庫 一個將相關資料組織化的集合 資料庫的種類 階層式 網狀式 關聯式 常見的關連式資料庫 SQL Server Oracle Informix DB2 ……. 關聯式資料庫的基本成員. 資料錄( Record) 欄位( Field, 可以是不同資料型別)的集合 例如:學生的資料卡,代表一組完整的資料 欄位( Field) 資料錄中具有資料型別及長度的儲存空間 例如:學生資料卡上的姓名欄位 資料表( Table) 許多資料錄( Record) 所形成的集合 - PowerPoint PPT Presentation
Citation preview
第十四章
用 ADODC操作資料庫
資料庫基本概念– 所謂的資料庫一個將相關資料組織化的集合
– 資料庫的種類• 階層式• 網狀式• 關聯式
– 常見的關連式資料庫• SQL Server
• Oracle
• Informix
• DB2
• ……
關聯式資料庫的基本成員– (資料錄 Record)
• 欄位 (Field,可以是不同資料型別 )的集合• 例如:學生的資料卡,代表一組完整的資料
– (欄位 Field)
• 資料錄中具有資料型別及長度的儲存空間• 例如:學生資料卡上的姓名欄位
– (資料表 Table)
• 許多資料錄 (Record)所形成的集合• 例如:一個班級學生的資料卡
– (資料庫 Database)
• 好幾個資料表 (Table)的集合• 例如:全校各班級的學生資料
UDA架構• UDA是 Universal Data Access的縮寫• Microsoft以這個架構解決企業透過網際網路、以多層式架構存取各類型資料時的問題
• UDA的組成包含了一組元件,彼此之間透過 OLE DB所定義的介面溝通
– OLE DB• 是在處理資料時系統階層的程式設計介面• OLE DB包含三類元件,分別是:
– 資料提供者 (Data Provider)
– 資料服務元件 (Service Components)
– 資料使用者 (Data Consumers)
OLE DB(1)資料使用者
Visual Basic應用程式 Visual C++應用程式
ASP網頁 應其他用程式
ADO
服務元件資料庫指標引擎 查詢處理器
資料提供者ODBC提供者 簡單資料提供者 OLE DB提供者
ODBC
主機資料 非關聯式資料庫
資料庫資料庫
OLE DB(2)
資料提供者• 所謂的資料提供者,就是存取資料的來源
– 例如: SQL Server 、 Exchange 、或是作業系統中的檔案系統
• 凡是能提供資料給其他應用程式使用的就是資料提供者 (Data Provider)
• 服務元件及資料的使用者,可以透過 OLE DB介面直接與這些資料提供者接觸、存取資料。
• 在傳統的 ODBC方面,也有專門處理 ODBC資料的 OLE DB,讓以前只有透過 ODBC才能夠存取的資料,透過 OLE DB也可以存取
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的資料
加入 ADODC(1)• 在預設的情況下, Visual Basic整合開發環境所提供的是Data控制項,而不是ADODC
• 使用ADODC控制項來存取 OLE DB資料的步驟1. 執行功能表項目”專案 (P)/設定使用元件 (O)
2. 在螢幕上的”設定使用元件”對話方塊上,找到”Microsoft ADO Data Control 6.0(SP4)(OLEDB)”
加入 ADODC(2)3. 核取Microsoft ADO Data Control 6.0(SP4)(OLEDB)這個項目後,按下 [套用 (A)],再按下 [確定 ]按鈕
4. 在工具箱上會出現一個 ADODC控制項的圖示
ADODC 在工具箱中的樣子
ADODC 在表單中的樣子
ADODC的功能• ADODC的功能在於連接資料庫的資料表 (Table)或 RecordSet
• 再用資料感知元件連接 ADODC,將每個欄位資料顯示出來
• ADODC控制項執行大部份的資料存取動作時,並不需要撰寫任何的程式碼
• 當移動 ADODC的記錄指標時,與 ADODC控制項連結的資料感知控制項 (Data Aware) 則會自動顯示目前資料錄 (Current Record)內容
ADODC常用的屬性 (1)• BofAction
– BOF(Begin Of File)屬性值為 True時, ADODC所採取的動作• 0:表示將記錄指標移到記錄中的第一筆 (預設值 )• 1:表示記錄指標會移到資料表的開頭
• CommandTimeOut– 表示在執行指令過程中,如果超過這個設定的秒數而未回應,則中止作業並產生錯誤
– 這個屬性可以設定或傳回一個以秒為單位的等待時間– 預設值是 30( 秒 )
• CommandType– 指定傳入 Command 物件的種類
• 1- SQL查詢敘述• 2- Table名稱• 4- Store Procedure• 8- 不做設定 (預設值 )
– 這個屬性欄設定必須與 RecordSource屬性欄配合使用
ADODC常用的屬性 (2)
• ConnectionTimeOut– 在連線過程中,如果超過這個設定的秒數而未連線成功,則中止連線作業並產生錯誤
– 這個屬性可以設定或傳回一個以秒為單位的等待時間。– 預設值是 15( 秒 )
• ConnectString– 用來建立資料源連接的資訊,例如:資料提供者名稱、
伺服器路徑名稱、驅動程式等• CursorLocation:
– 設定或傳回資料指標引擎的位置• 2 表示使用 Server-side指標• 3 表示使用 Client-Side指標
ADODC常用的屬性 (3)
• CursorType– 設定資料指標類型
• 1-Keyset:索引鍵集 (Keyset) 資料指標從取得的 Recordset 無法看到其他使用者新增的資料錄及存取其他使用者刪除的資料錄,但是仍然可以看到其他使用者變更的資料錄
• 2-Dynamic:動態資料指標,可看到其他使用者所做的增加,變更和刪除結果,而且允許在 Recordset 進行所有型態的動作
• 3-Static:靜態資料指標 (預設值 ),一組可讓您用來找尋資料或產生報表的資料錄的靜態複本,但看不到其他使用者所做的增加、變更或刪除結果
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前,無論如何編輯、改變都不鎖定
ADODC常用的屬性 (5)• MAXRecords
– 最大傳回資料錄筆數– 預設值為 0,表示無限制
• Password– 登入資料庫時所使用的密碼。必須與 User屬性配合
• RecordSource– 必須與 CommandType屬性欄配合– 用來設定資料錄的來源;可以是 SQL 敘述查詢的結果、
Table、 Store Procedure
• User– 登入資料庫時的使用者帳號– 並不是所有的資料庫系統都會有確認使用者的功能,通常是較大型、功能完整的資料庫才會具備有這樣的功能,例如 SQL Server、 Oracle 等。
Recordset 物件• 程式會依照 ADODC所設定的屬性值來開啟資料庫,將傳回的資料建立為 RecordsetRecordset 物件。
• Recordset 物件就是資料表 (Table)或其他擷取的資料錄集合
• 操作 Recordset 物件所屬的AddNewAddNew、 EditEdit、 DeleteDelete、 FindFind 等方法,就可以對ADODC控制項所連結的資料表 (Table)或資料錄集合做新增新增、修改修改、刪除刪除、查詢查詢等動作
資料感知元件 (Data-Aware
Control) • 可以跟 RecordSet連接的控制項,就被稱為資料感知元件 (Data-Aware Control)
• 常見的 Label、 TextBox 等都屬於資料感知元件• 像 Label、 TextBox只能顯示單一資料的資料感知元件,所顯示的資料就是資料庫指標所指的欄位內容
• 要將資料感知元件 (例如 TextBox)與某個欄位連結,必須定義兩個屬性
– DataSourceDataSource:設定連結的資料表 (或資料錄集合 )控制項名稱,例如 ADODC的名稱
– DataFieldDataField:設定資料表 (或資料錄集合 )中的欄位名稱
ADODC 範例實作 (1)– 範例 (EX14-1~Ex14-7)
• 連結資料庫 dbBkfile.mdb中的資料表 Bkfile(在目錄EX14-1中 )
– 說明• 完整的範例程式具有一般的資料庫管理程式所必備的四個基本功能
– 新增– 修改– 刪除– 查詢
ADODC 範例實作 (2) 連接資料庫 (EX14-1)
1. 在表單上加入一個ADODC控制項、五個標籤、四個文字框、一個命令鈕
ADODC 範例實作 (3)2. 修改各控制項的名稱設定
控 制 項 種 類 名稱 (Object Name)
標題 (Caption)
表單 FrmLibrary 圖書館
命令鈕 cmdQuit 離開
標籤 lblTitle 圖書館
標籤 lblCode 書號
標籤 lblBkname 書名
標籤 lblAuthor 作者
標籤 lblISBN ISBN
文字框 txtCode (空白 )
文字框 txtBkname (空白 )
文字框 txtAuthor (空白 )
文字框 txtISBN (空白 )
Adodc控制項 AdodcBook 圖書主檔
ADODC 範例實作 (4)3. 在 ADODC控制項上按下滑鼠右鍵,開啟快顯功能表,執行快顯功能表上的” ADODC的屬性”
4. 請在”屬性頁”對話方塊中選擇”使用連線字串”的選項按鈕;接下來請按下 [ 建立 (U)…]按鈕
ADODC 範例實作 (5)5. 在”資料連結內容”對話方塊上選擇資料庫類型:選用Microsoft Jet 4.0 OLE DB Provider,然後按下 [下一步 (N)>>]
1. 選擇要連接的資料庫類型
2. 按 下 [ 下 一 步(N)>>]
ADODC 範例實作 (6)6. 選擇書上作為範例 Ch14.mdb資料庫檔案7. 按下 [ 測試連接 (T)]按鈕,如果一切正常的話,應
該會出現”測試連接成功”的訊息
ADODC 範例實作 (7)8. 按下”資料連結內容”對話方塊上的 [確定 ]按鈕後,
回到屬性頁上。切換到資料錄來源
9. 在命令類型方面選擇 2-adCmdTable。然後在”資料表或預存程序的名稱”處選擇「圖書主檔」。按下 [套用 (A)]、 [確定 ]按鈕,連線字串就完成了
1. 切 換 至資料錄來源
2. 選 擇 2-adCmdTable
3. 選擇圖書主檔
4. 按下 [ 套用(A)]5. 按下 [ 確
定 ]
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 號碼
ADODC 範例實作 (9)11.在 cmdQuit_Click()事件 ([離開 ]按鈕 )中加入下列程式碼
12.按 [F5]執行。現在已經可以按資料控制項中的左、右箭頭來移動資料錄錄指標,瀏覽整個資料表的內容
01. Private Sub cmdQuit_Click()02. End03. End Sub
往檔尾移動一筆往檔頭移動一筆
ADODC 範例實作 (10) 加入新增功能 (EX14-2)
1. 先結束程式執行,然後在表單中加入一個新的框架,並在框架上加上一個命令鈕 -cmdAdd,標題是“新增”
放入框架及命令鈕
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
ADODC 範例實作 (12) 加入修改功能 (EX14-3)
1. 在表單中加入一個新的命令鈕 cmdModify,也就是 [ 修改 ] 命令鈕
加入 [ 修改 ] 命令鈕
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
ADODC 範例實作 (14) 加入刪除功能 (EX14-4)
1. 在表單中加入一個 [ 刪除 ]鈕: cmdDelete
加入 [ 刪除 ] 命令鈕
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
ADODC 範例實作 (16) 加入查詢功能 (EX14-5)
1. 在表單中加入一個新的命令鈕: cmdQuery,也就是 [查詢 ]鈕
加入 [查詢 ] 命令鈕
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
ADODC 範例實作 (18) Update方法 (EX14-6)
– 移動ADODC的資料錄指標會將異動資料寫入資料庫– Recordset的 UpdateUpdate方法也可將異動資料寫入資料庫
1. 在 Form上放置一個新的按鈕 --cmdAddConfirm,並將這個按鈕的Visible屬性設為 False
加入 [確定 ] 命令鈕,重疊在 [ 新增 ]按鈕之上
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
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