1 / 37

第十四章

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

martha-byrd
Download Presentation

第十四章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第十四章 用ADODC操作資料庫

  2. 資料庫基本概念 • 所謂的資料庫 一個將相關資料組織化的集合 • 資料庫的種類 • 階層式 • 網狀式 • 關聯式 • 常見的關連式資料庫 • SQL Server • Oracle • Informix • DB2 • ……

  3. 關聯式資料庫的基本成員 • 資料錄(Record) • 欄位(Field,可以是不同資料型別)的集合 • 例如:學生的資料卡,代表一組完整的資料 • 欄位(Field) • 資料錄中具有資料型別及長度的儲存空間 • 例如:學生資料卡上的姓名欄位 • 資料表(Table) • 許多資料錄(Record)所形成的集合 • 例如:一個班級學生的資料卡 • 資料庫(Database) • 好幾個資料表(Table)的集合 • 例如:全校各班級的學生資料

  4. UDA架構 • UDA是Universal Data Access的縮寫 • Microsoft以這個架構解決企業透過網際網路、以多層式架構存取各類型資料時的問題 • UDA的組成包含了一組元件,彼此之間透過OLE DB所定義的介面溝通 • OLE DB • 是在處理資料時系統階層的程式設計介面 • OLE DB包含三類元件,分別是: • 資料提供者(Data Provider) • 資料服務元件(Service Components) • 資料使用者(Data Consumers)

  5. OLE DB(1)

  6. OLE DB(2) • 資料提供者 • 所謂的資料提供者,就是存取資料的來源 • 例如:SQL Server、Exchange、或是作業系統中的檔案系統 • 凡是能提供資料給其他應用程式使用的就是資料提供者(Data Provider) • 服務元件及資料的使用者,可以透過OLE DB介面直接與這些資料提供者接觸、存取資料。 • 在傳統的ODBC方面,也有專門處理ODBC資料的OLE DB,讓以前只有透過ODBC才能夠存取的資料,透過OLE DB也可以存取

  7. OLE DB(3) • 資料使用者 • 使用資料提供者所提供資料的應用程式,就是資料使用者(Data Consumer) • 利用ADO所提供的功能就能存取OLE DB的資料;凡是使用ADO功能的應用程式,它們就是OLE DB的資料使用者 • 服務元件 • 在OLE DB中有某些元件是負責處理及傳送資料的,這就是服務元件(Service Components) • 包括查詢處理器(Query Processor)及資料庫指標引擎(Cursor Engine) • ADO不一定要認得資料提供者;只要ADO可以連接這些服務元件,而這些服務元件可以連上資料提供者,於是ADO就可以享用OLE DB的資料

  8. 加入ADODC(1) • 在預設的情況下,Visual Basic整合開發環境所提供的是Data控制項,而不是ADODC • 使用ADODC控制項來存取OLE DB資料的步驟 • 執行功能表項目”專案(P)/設定使用元件(O) • 在螢幕上的”設定使用元件”對話方塊上,找到”Microsoft ADO Data Control 6.0(SP4)(OLEDB)”

  9. 加入ADODC(2) • 核取Microsoft ADO Data Control 6.0(SP4)(OLEDB)這個項目後,按下[套用(A)],再按下[確定]按鈕 • 在工具箱上會出現一個ADODC控制項的圖示 ADODC在表單中的樣子 ADODC在工具箱中的樣子

  10. ADODC的功能 • ADODC的功能在於連接資料庫的資料表(Table)或RecordSet • 再用資料感知元件連接ADODC,將每個欄位資料顯示出來 • ADODC控制項執行大部份的資料存取動作時,並不需要撰寫任何的程式碼 • 當移動ADODC的記錄指標時,與ADODC控制項連結的資料感知控制項(Data Aware)則會自動顯示目前資料錄(Current Record)內容

  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屬性欄配合使用

  12. ADODC常用的屬性(2) • ConnectionTimeOut • 在連線過程中,如果超過這個設定的秒數而未連線成功,則中止連線作業並產生錯誤 • 這個屬性可以設定或傳回一個以秒為單位的等待時間。 • 預設值是15(秒) • ConnectString • 用來建立資料源連接的資訊,例如:資料提供者名稱、伺服器路徑名稱、驅動程式等 • CursorLocation: • 設定或傳回資料指標引擎的位置 • 2     表示使用Server-side指標 • 3     表示使用Client-Side指標

  13. ADODC常用的屬性(3) • CursorType • 設定資料指標類型 • 1-Keyset:索引鍵集 (Keyset) 資料指標從取得的 Recordset無法看到其他使用者新增的資料錄及存取其他使用者刪除的資料錄,但是仍然可以看到其他使用者變更的資料錄 • 2-Dynamic:動態資料指標,可看到其他使用者所做的增加,變更和刪除結果,而且允許在 Recordset 進行所有型態的動作 • 3-Static:靜態資料指標(預設值),一組可讓您用來找尋資料或產生報表的資料錄的靜態複本,但看不到其他使用者所做的增加、變更或刪除結果

  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前,無論如何編輯、改變都不鎖定

  15. ADODC常用的屬性(5) • MAXRecords • 最大傳回資料錄筆數 • 預設值為0,表示無限制 • Password • 登入資料庫時所使用的密碼。必須與User屬性配合 • RecordSource • 必須與CommandType屬性欄配合 • 用來設定資料錄的來源;可以是SQL敘述查詢的結果、Table、Store Procedure • User • 登入資料庫時的使用者帳號 • 並不是所有的資料庫系統都會有確認使用者的功能,通常是較大型、功能完整的資料庫才會具備有這樣的功能,例如SQL Server、Oracle等。

  16. Recordset物件 • 程式會依照ADODC所設定的屬性值來開啟資料庫,將傳回的資料建立為Recordset物件。 • Recordset物件就是資料表(Table)或其他擷取的資料錄集合 • 操作Recordset物件所屬的AddNew、Edit、Delete、Find等方法,就可以對ADODC控制項所連結的資料表(Table)或資料錄集合做新增、修改、刪除、查詢等動作

  17. 資料感知元件(Data-Aware Control) • 可以跟RecordSet連接的控制項,就被稱為資料感知元件(Data-Aware Control) • 常見的Label、TextBox等都屬於資料感知元件 • 像Label、TextBox只能顯示單一資料的資料感知元件,所顯示的資料就是資料庫指標所指的欄位內容 • 要將資料感知元件(例如TextBox)與某個欄位連結,必須定義兩個屬性 • DataSource:設定連結的資料表(或資料錄集合)控制項名稱,例如ADODC的名稱 • DataField:設定資料表(或資料錄集合)中的欄位名稱

  18. ADODC範例實作(1) • 範例(EX14-1~Ex14-7) • 連結資料庫dbBkfile.mdb中的資料表Bkfile(在目錄EX14-1中) • 說明 • 完整的範例程式具有一般的資料庫管理程式所必備的四個基本功能 • 新增 • 修改 • 刪除 • 查詢

  19. ADODC範例實作(2) • 連接資料庫(EX14-1) • 在表單上加入一個ADODC控制項、五個標籤、四個文字框、一個命令鈕

  20. 控 制 項 種 類 名稱(Object Name) 標題(Caption) 表單 FrmLibrary 圖書館 命令鈕 cmdQuit 離開 標籤 lblTitle 圖書館 標籤 lblCode 書號 標籤 lblBkname 書名 標籤 lblAuthor 作者 標籤 lblISBN ISBN 文字框 txtCode (空白) 文字框 txtBkname (空白) 文字框 txtAuthor (空白) 文字框 txtISBN (空白) Adodc控制項 AdodcBook 圖書主檔 ADODC範例實作(3) • 修改各控制項的名稱設定

  21. ADODC範例實作(4) • 在ADODC控制項上按下滑鼠右鍵,開啟快顯功能表,執行快顯功能表上的”ADODC的屬性” • 請在”屬性頁”對話方塊中選擇”使用連線字串”的選項按鈕;接下來請按下[建立(U)…]按鈕

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

  23. ADODC範例實作(6) • 選擇書上作為範例Ch14.mdb資料庫檔案 • 按下[測試連接(T)]按鈕,如果一切正常的話,應該會出現”測試連接成功”的訊息

  24. ADODC範例實作(7) • 按下”資料連結內容”對話方塊上的[確定]按鈕後,回到屬性頁上。切換到資料錄來源 • 在命令類型方面選擇2-adCmdTable。然後在”資料表或預存程序的名稱”處選擇「圖書主檔」。按下[套用(A)]、[確定]按鈕,連線字串就完成了 1.切換至資料錄來源 2.選擇2-adCmdTable 3.選擇圖書主檔 4.按下[套用(A)] 5.按下[確定]

  25. TextBox名稱 DataSource屬性 DataField屬性 說 明 txtCode AdodcBook Bkcode 書號 txtBkName AdodcBook BkName 書名 txtAuthor AdodcBook Author 作者 txtISBN AdodcBook ISBN ISBN號碼 ADODC範例實作(8) • 由於每個TextBox可以代表一個資料表的欄位,而資料表Bkfile中包含有四個欄位:Bkcode、BkName、Author、ISBN,所以請按下表設定DataSource及DataField的值

  26. ADODC範例實作(9) • 在cmdQuit_Click()事件([離開]按鈕)中加入下列程式碼 • 按[F5]執行。現在已經可以按資料控制項中的左、右箭頭來移動資料錄錄指標,瀏覽整個資料表的內容 01.Private Sub cmdQuit_Click() 02. End 03. End Sub 往檔尾移動一筆 往檔頭移動一筆

  27. ADODC範例實作(10) • 加入新增功能(EX14-2) • 先結束程式執行,然後在表單中加入一個新的框架,並在框架上加上一個命令鈕-cmdAdd,標題是“新增” 放入框架及命令鈕

  28. ADODC範例實作(11) • 在CmdAdd_Click事件中,輸入以下程式碼 • 按[F5]開始。輸入完資料後要用滑鼠按ADODC的左箭頭或右箭頭,才能將資料寫入 Private Sub cmdAdd_Click() Dim strMsg As String, intAns As Integer strMsg = "請輸入欲新增的資料,並按左鍵或右鍵存檔" intAns = MsgBox(strMsg, vbOKCancel, "新增") If intAns = vbOK Then txtcode.SetFocus adodcBOOK.Recordset.AddNew End If End Sub

  29. ADODC範例實作(12) • 加入修改功能(EX14-3) • 在表單中加入一個新的命令鈕cmdModify,也就是[修改]命令鈕 加入[修改]命令鈕

  30. ADODC範例實作(13) • 請在[修改]鈕的cmdModify_Click()事件中,加入下面程式碼 這一段程式碼只是刪除了AddNew方法 Private Sub cmdModify_Click() Dim strMsg As String, intAns As Integer strMsg = “請輸入欲修改的資料,並按左鍵或右鍵存檔" intAns = MsgBox(strMsg, vbOKCancel, “修改") If intAns = vbOK Then txtcode.SetFocus End If End Sub

  31. ADODC範例實作(14) • 加入刪除功能(EX14-4) • 在表單中加入一個[刪除]鈕:cmdDelete 加入[刪除]命令鈕

  32. ADODC範例實作(15) • 在[刪除]鈕的cmdDelete_Click()事件中,加入下面這段程式碼 我們使用了兩個新的方法 • Delete方法:它會將這筆記錄刪掉 • MoveNext方法:它會讓資料錄指標往下移動一筆 Private Sub cmdDelete_Click() Dim strMsg As String, intAns As Integer strMsg = "確定要刪除這一筆記錄嗎?" intAns = MsgBox(strMsg, vbOKCancel, "刪除") If intAns = vbOK Then adodcBOOK.Recordset.Delete adodcBOOK.Recordset.MoveNext End If End Sub

  33. ADODC範例實作(16) • 加入查詢功能(EX14-5) • 在表單中加入一個新的命令鈕:cmdQuery,也就是[查詢]鈕 加入[查詢]命令鈕

  34. ADODC範例實作(17) • 在[查詢]鈕的cmdQuery_Click()事件中加入下列程式碼 程式先使用InputBox()函數來擷取使用者輸入的字串,然後再以Find方法搜尋完全符合輸入條件的資料錄。找不到時,指標會跳到EOF的位置。為避免程式產生錯誤,我們使用MoveFirst方法將記錄指標移到第一筆記錄上 Private Sub cmdQuery_Click() Dim strMsg, strSearch As String strMsg = "請輸入完整的書名" strSearch = InputBox(strMsg, "查詢") adodcBOOK.Recordset.Find "Bkname='" & strSearch & "'" If adodcBOOK.Recordset.EOF Then MsgBox (“抱歉!沒有找到您所要的資料“) adodcBOOK.Recordset.MoveFirst End If End Sub

  35. ADODC範例實作(18) • Update方法(EX14-6) • 移動ADODC的資料錄指標會將異動資料寫入資料庫 • Recordset的Update方法也可將異動資料寫入資料庫 • 在Form上放置一個新的按鈕--cmdAddConfirm,並將這個按鈕的Visible屬性設為False 加入[確定]命令鈕,重疊在[新增]按鈕之上

  36. ADODC範例實作(19) • 在CmdAdd_Click()事件程序中將其他沒有用到的控制項Disable或Hide起來。然後再將CmdAddComfirm按鈕顯示(Show)出來 Private Sub cmdAdd_Click() Dim strMsg As String, intAns As integer strMsg = "請輸入欲新增的資料,然後按下[確定]按鈕" intAns = MsgBox(strMsg, vbOKCancel, "新增") If intAns = vbOK Then txtcode.SetFocus adodcBOOK.Recordset.AddNew cmdDelete.Visible = False cmdModify.Visible = False cmdQuery.Visible = False cmdQuit.Visible = False cmdAddConfirm.Visible = True cmdAdd.Visible = False End If 14. End Sub

  37. ADODC範例實作(20) • 在按下[確定]按鈕、執行Update方法後,得將原來Disable或Hide的按鈕回復原狀、並將CmdAddConfirm按鈕Disable或Hide起來,以便讓使用者可以區別輸入或是一般的狀態 01.Private Sub cmdAddConfirm_Click() 02.adodcBOOK.Recordset.Update 03.cmdDelete.Visible = True 04.cmdModify.Visible =True 05.cmdQuery.Visible = True 06.cmdQuit.Visible = True 07.cmdAddConfirm.Visible = False 08.cmdAdd.Visible = True 09.End Sub

More Related