資料庫程式設計 VB資料庫設計簡介 週次:5 建國科技大學 資管系 饒瑞佶
資料控制項與資料存取物件 資料庫控制項 ( Adodc或DATA ) 提供的功能有限 半自動 方便,使用者不需要額外撰寫程式 功能較完整 需要撰寫程式碼 半自動 完全手動 二者可以交互使用
資料控制項與資料存取物件 資料庫控制項 ( Adodc) 直接設定ConnectionString與RecordSource屬性 設定ADO物件後將Recordset物件指定給資料庫控制項(Adodc)
範例5-4 設定DataSource與 DataField屬性 Command1_click
範例5-4 Private Sub Command1_Click() '連結資料庫 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.Open "書籍", cn, adOpenStatic ' 設定ADO物件取得資料集 Set adoBook.Recordset = rs End Sub
資料控制項與資料存取物件 範例5-4 顯示元件 如TEXT ADO物件 設定產生Connection與 Recordset物件 範例5-6
範例5-6 設定Datasource與 DataField屬性 Command1_click
範例5-6 Private Sub Command1_Click() '連結資料庫 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.Open "書籍", cn, adOpenStatic ' 設定連結控制項的屬性 Set Text1.DataSource = rs Text1.DataField = "書名" Set Text2.DataSource = rs Text2.DataField = "作者" Set Text3.DataSource = rs Text3.DataField = "分類" Set Text4.DataSource = rs Text4.DataField = "出版社“ End Sub
設定產生ConnectionString與 資料控制項與資料存取物件 ADO物件 顯示元件 如TEXT 設定產生Connection與 Recordset物件 範例5-4 範例5-6 ADO物件 顯示元件 如TEXT 設定產生ConnectionString與 RecordSource屬性 範例5-7
範例5-7 Private rs As ADODB.Recordset Private Sub Command1_Click() Set rs = adoBook.Recordset ' 顯示RecordSet 物件的內容 For i = 0 To 4 Picture1.Print rs!書名 rs.MoveNext Next i End Sub
ADO物件對資料庫的操作 操作項目: 資料錄的移動 資料錄的編輯 新增資料錄 刪除資料錄 搜尋資料錄 篩選資料錄 資料排序 對象都是目前紀錄(Current Record)
資料的移動 目前紀錄在資料庫中的移動範圍:BOF~EOF 資料庫最上方 BOF 第一筆 第二筆 .. 最後一筆 資料庫最下方 EOF
資料的移動 使用Move方法 語法:Recordset.Move skipRecords, Start +表示向最後一筆資料方向移動 -表示向第一筆資料方向移動 Start:移動的起始位置,預設為目前紀錄 adBookmarkFirst,以第一筆紀錄為起始點 adBookmarkLast,以最後一筆紀錄為起始點 注意移動過程可能會有超過BOF或EOF的錯誤狀況產生
克服超過BOF或EOF的錯誤 如果超過BOF則將目前紀錄指向最後一筆 如果超過EOF則將目前紀錄指向第一筆 如何指向?
克服超過BOF或EOF的錯誤 移動紀錄了使用Move方法外,還可以使用: MoveFirst:移動指向到第一筆紀錄 MovePrevious:移動指向到前一筆紀錄 MoveNext:移動指向到下一筆紀錄 MoveLast:移動指向到最後一筆紀錄 所以當BOF發生時就使用MoveLast 當EOF發生時就使用MoveFirst 注意CursorType的設定
範例6-2
範例6-2 Private Sub Form_Load() ' 連結資料庫 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.Open "書籍 ", cn, adOpenStatic ' DataGrid控制項取得資料集以顯示記錄 Set DataGrid1.DataSource = rs End Sub
範例6-2 ' .......Click 按鈕:前一筆 時所觸發的事件程序 Private Sub cmdPrevious_Click() rs.MovePrevious ' 若已移動到檔案的開頭 If rs.BOF = True Then rs.MoveFirst End If End Sub ' .......Click 按鈕:下一筆 時所觸發的事件程序 Private Sub cmdNext_Click() rs.MoveNext ' 若已移動到檔案的結尾 If rs.EOF = True Then rs.MoveLast End If End Sub
資料的移動 Bookmark屬性 Do Until rs.EOF 印出目前紀錄的內容 rs.Movenext Loop 可以列出所有資料的內容
編輯紀錄 Supports方法 判斷目前的資料庫(Recordset物件)是否可以編輯 語法: Boolean=recordset.Supports(CursorOptions) 其中CursorOptions可以是 adUpdate:更新 adAddnew:新增 adDelete:刪除 adMovePrevious:向前移動 adBookmark:標定Bookmark
範例6-5 If rs.supports(adUpdate) then ret=msgbox(“可以進行更新作業”,49,“更新訊息”) Else ret=msgbox(“不可以進行更新作業”,49,“更新訊息”) End if
資料更新 Update方法 可以對資料庫(Recordset物件)進行資料更新 語法: recordset.Update [欄位名稱],[新欄位值] 注意欄位名稱的寫法與資料型態p.6-20
範例6-6 更改book.mdb資料庫中書籍資料表中目前紀錄的 書名欄位值 rs.Update “書名”, Text1.text 欄位值 欄位名 欄位值
新增資料 Addnew方法 可以對資料庫(Recordset物件)進行資料新增作業 語法: recordset.Addnew [欄位名稱],[新欄位值] 注意欄位名稱的寫法與資料型態p.6-20
範例6-7 在book.mdb資料庫中的書籍資料表中新增一筆紀錄 (只新增一個欄位) rs.Addnew “書名”, Text1.text 新增空紀錄(沒有任何欄位資料的紀錄) rs.Addnew rs.Update
範例6-8 在book.mdb資料庫中的書籍資料表中新增一筆紀錄 (新增多個欄位) rs.Addnew rs!書碼=Text1.text ….. rs.Update
刪除資料 Delete方法 可以對資料庫(Recordset物件)進行資料刪除作業 刪除目前紀錄 語法: Recordset.Delete
範例6-9 rs.Delete rs.Movenext If rs.eof then rs.movelast End if 目前紀錄會消失 目前紀錄再度出現 Do Until rs.eof rs.Delete rs.Movenext Loop 刪除所有紀錄
搜尋作業 從資料庫中找到符合條件的資料 Find方法 找出資料庫(Recordset物件)中符合條件的第一筆記錄 語法: Recordset.Find 條件,[Skiprows],[SearchDirection],[start] 找不到資料時會變成EOF或BOF狀態,所以可以藉此 判定是否有找到資料
搜尋作業 語法: Recordset.Find 條件,[Skiprows],[SearchDirection],[start] 其中條件是由欄位,比較運算子與條件值所組成 例如:書名=‘資料庫程式設計’ 文字型態 書碼=1 數字型態 日期=#2003/10/17# 日期時間型態
範例6-11 比較運算子 搜尋相似的而不是完全正確的 使用Like運算子,配合?,*等萬用字元 rs.Find “書名 Like ‘?Basic*’” 範例6-11
搜尋作業 找到符合條件的第一筆記錄後如何找尋其他也符合的 資料? 方法: 設定Skiprows=1 省略start 範例6-12
搜尋後取代 將搜尋(Find方法)與更新(Update方法)結合 範例6-14
篩選作業 從資料庫中找到符合條件的資料 Filter屬性 找出資料庫(Recordset物件)中符合條件的所有記錄 語法: Recordset.Filter 條件 找不到資料時Recordcount會變成0,所以可以藉此 判定是否有找到資料
範例6-16 篩選作業 可以使用複合條件式 And, Or, Not 書名=‘資料庫程式設計’ and日期=#2003/10/17# Rs.Filter=adFilterNone 解除Filter屬性 範例6-16
範例6-19 排序作業 cursorLocation屬性 =3 可以排序 =2 不可以排序 語法: =3 可以排序 =2 不可以排序 語法: Recordset.Sort [sortorder] Sortorder由欄位名及關鍵字組成 Rs.Sort “書名 ASC” Rs.Sort “書名 DESC” 範例6-19