三、使用Recordset對象
Recordset(記錄集)對象代表你在程序中使用的數(shù)據(jù)。
在上面的程序中,曾使用一個名為RecordsetType(記錄集類型)的數(shù)據(jù)屬性指明數(shù)據(jù)庫信息為一個表。在Visual Basic中,Recordset(記錄集)是一個代表你正在程序中使用的數(shù)據(jù)庫部分的對象。當把數(shù)據(jù)控件的RecordSource屬性設(shè)置為表或查詢的名稱時,就定義了一個新的名為Recordset的對象。Recordset對象有它自己的一套特殊屬性和方法,使你能查找、排序、添加和刪除記錄。
在下面的練習(xí)中,將使用Recordset對象在zgda.mdb數(shù)據(jù)庫中按編號查找項目,并將它們顯示出來。
1、在zgda.mdb中查找數(shù)據(jù)
在修改程序之前,為保護原始程序,請先以新文件名將它存盤。
1) 在文件菜單中,單擊另存為窗體、另存為工程菜單項。以MyFindRec.frm、MyFindRec.vbp為文件名分別保存窗體和工程。
2)在窗體的左下方創(chuàng)建兩個命令按鈕對象,Caption屬性分別設(shè)置為“查找”、“結(jié)束”。
3)添加代碼。
Option Explicit
Dim prompt As String, searchSearchStr As String
Private Sub Command1_Click()
prompt$ = "輸入要查找的編號:"
searchSearchStr$ = InputBox(prompt$, "搜索記錄")
Data1.Recordset.Index = "Primarykey" '使用類名
Data1.Recordset.Seek "=", searchSearchStr '進行搜索。Seek方法可以查找匹配的記錄。
If Data1.Recordset.NoMatch Then '如果不匹配
Data1.Recordset.MoveFirst '則取第1課記錄
End If
End Sub
程序說明:
該事件過程顯示一個查找對話框,以便用戶能輸入編號(SearchStr$)。接下來它使用Seek方法從頭至尾對數(shù)據(jù)庫“編號”字段進行搜索,直至找到匹配項或者搜索到表的結(jié)尾。如果未找到匹配項,Visual Basic將顯示一條信息“No current record”,并且在第一個文本框中顯示Recordset(記錄集)的第一條記錄。該事件過程所使用的Recordset屬性和方法如下表所示:
Recordset屬性或方法
說明
Index 用于定義查找和排序過程中所使用的數(shù)據(jù)庫字段的屬性
Seek 用于查找記錄的方法。除=以外,關(guān)系運算符>=、>、<=和<也可用來將所查找的字符串與數(shù)據(jù)庫中的文本進行比較
NoMatch 該屬性的值為True時表示未查找到匹配項
MoveFirst 使Recordset的第一條記錄成為當前記錄的一個方法
2、向zgda.mdb數(shù)據(jù)庫添加記錄
在向數(shù)據(jù)庫添加新記錄時,應(yīng)在設(shè)計模式下將數(shù)據(jù)對象的ReadOnly(只讀)屬性設(shè)定為False(假),然后使用事件過程中的AddNew(添加新記錄)方法在數(shù)據(jù)庫中添加新記錄。當窗體中出現(xiàn)空白記錄時,用戶就可以在需要的字段中填寫內(nèi)容了,添加完畢后,將當前記錄移動到數(shù)據(jù)庫中的其它記錄即可。用戶移動到不同記錄的較簡單的方法是單擊數(shù)據(jù)對象的一個按鈕。當用戶移動到其它記錄時,新的記錄就按字母順序被插入數(shù)據(jù)庫中了。下面的練習(xí)演示了如何使用ReadOnly屬性和AddNew方法在數(shù)據(jù)庫中插入新記錄。在該過程中,InputBox函數(shù)為用戶提供了一些可視化反饋信息。
注:AddNew方法用來向數(shù)據(jù)庫添加一條新記錄。
讓用戶向數(shù)據(jù)庫中添加記錄在修改程序之前,為保護原始程序,請先以新文件名保存原始程序。
1) 在File(文件)菜單中,單擊Save MyFindRec.frm As(MyFindRec.frm另存為)菜單項。將MyFindRec窗體另存為MyAddRec.frm。使用Save Project As(工程另存為)菜單項將該工程另存為MyAddRec.vbp。
2)將Data1對象的ReadOnly屬性設(shè)定為False。
3)在窗體的Find按鈕右邊再創(chuàng)建一個命令按鈕對象Command3,并設(shè)置“Caption”屬性為“添加”。
4)雙擊“添加”按紐,編寫代碼。
Private Sub Command3_Click()
Dim reply
prompt$ = "Enter the new record, and then click the left arrow button."
reply = MsgBox(prompt$, vbOKCancel, "Add Record")
If reply = vbOK Then 'if the user clicks OK
Text3.SetFocus 'move cursor to Title box
Data1.Recordset.AddNew 'and get new record
End If
End Sub
該過程首先向用戶顯示一個包含數(shù)據(jù)輸入提示的對話框。MsgBox函數(shù)使用vbOKCancel參數(shù)(由Visual Basic定義的數(shù)字型常量)顯示一個含有OK(是)和Cancel(取消)按鈕的對話框。如果用戶單擊OK,AddNew方法將創(chuàng)建一條新記錄。如果用戶單擊Cancel,則操作被取消。該事件過程還使用SetFocus方法使Text3文本框中得到輸入焦點。SetFocus方法可用來激活任何一個可以得到輸入焦點的對象。
現(xiàn)在你就可以使用“添加”按鈕向數(shù)據(jù)庫添加新記錄了。
運行:單擊“添加”按鈕,程序顯示Add Record對話框,單擊OK按鈕,窗體中出現(xiàn)新的空記錄。按順序輸入新記錄信息(按Tab鍵在字段間切換)。你可以使用“添加”銨鈕向zgda.mdb數(shù)據(jù)庫中添加任意條記錄。
Recordset(記錄集)對象代表你在程序中使用的數(shù)據(jù)。
在上面的程序中,曾使用一個名為RecordsetType(記錄集類型)的數(shù)據(jù)屬性指明數(shù)據(jù)庫信息為一個表。在Visual Basic中,Recordset(記錄集)是一個代表你正在程序中使用的數(shù)據(jù)庫部分的對象。當把數(shù)據(jù)控件的RecordSource屬性設(shè)置為表或查詢的名稱時,就定義了一個新的名為Recordset的對象。Recordset對象有它自己的一套特殊屬性和方法,使你能查找、排序、添加和刪除記錄。
在下面的練習(xí)中,將使用Recordset對象在zgda.mdb數(shù)據(jù)庫中按編號查找項目,并將它們顯示出來。
1、在zgda.mdb中查找數(shù)據(jù)
在修改程序之前,為保護原始程序,請先以新文件名將它存盤。
1) 在文件菜單中,單擊另存為窗體、另存為工程菜單項。以MyFindRec.frm、MyFindRec.vbp為文件名分別保存窗體和工程。
2)在窗體的左下方創(chuàng)建兩個命令按鈕對象,Caption屬性分別設(shè)置為“查找”、“結(jié)束”。
3)添加代碼。
Option Explicit
Dim prompt As String, searchSearchStr As String
Private Sub Command1_Click()
prompt$ = "輸入要查找的編號:"
searchSearchStr$ = InputBox(prompt$, "搜索記錄")
Data1.Recordset.Index = "Primarykey" '使用類名
Data1.Recordset.Seek "=", searchSearchStr '進行搜索。Seek方法可以查找匹配的記錄。
If Data1.Recordset.NoMatch Then '如果不匹配
Data1.Recordset.MoveFirst '則取第1課記錄
End If
End Sub
程序說明:
該事件過程顯示一個查找對話框,以便用戶能輸入編號(SearchStr$)。接下來它使用Seek方法從頭至尾對數(shù)據(jù)庫“編號”字段進行搜索,直至找到匹配項或者搜索到表的結(jié)尾。如果未找到匹配項,Visual Basic將顯示一條信息“No current record”,并且在第一個文本框中顯示Recordset(記錄集)的第一條記錄。該事件過程所使用的Recordset屬性和方法如下表所示:
Recordset屬性或方法
說明
Index 用于定義查找和排序過程中所使用的數(shù)據(jù)庫字段的屬性
Seek 用于查找記錄的方法。除=以外,關(guān)系運算符>=、>、<=和<也可用來將所查找的字符串與數(shù)據(jù)庫中的文本進行比較
NoMatch 該屬性的值為True時表示未查找到匹配項
MoveFirst 使Recordset的第一條記錄成為當前記錄的一個方法
2、向zgda.mdb數(shù)據(jù)庫添加記錄
在向數(shù)據(jù)庫添加新記錄時,應(yīng)在設(shè)計模式下將數(shù)據(jù)對象的ReadOnly(只讀)屬性設(shè)定為False(假),然后使用事件過程中的AddNew(添加新記錄)方法在數(shù)據(jù)庫中添加新記錄。當窗體中出現(xiàn)空白記錄時,用戶就可以在需要的字段中填寫內(nèi)容了,添加完畢后,將當前記錄移動到數(shù)據(jù)庫中的其它記錄即可。用戶移動到不同記錄的較簡單的方法是單擊數(shù)據(jù)對象的一個按鈕。當用戶移動到其它記錄時,新的記錄就按字母順序被插入數(shù)據(jù)庫中了。下面的練習(xí)演示了如何使用ReadOnly屬性和AddNew方法在數(shù)據(jù)庫中插入新記錄。在該過程中,InputBox函數(shù)為用戶提供了一些可視化反饋信息。
注:AddNew方法用來向數(shù)據(jù)庫添加一條新記錄。
讓用戶向數(shù)據(jù)庫中添加記錄在修改程序之前,為保護原始程序,請先以新文件名保存原始程序。
1) 在File(文件)菜單中,單擊Save MyFindRec.frm As(MyFindRec.frm另存為)菜單項。將MyFindRec窗體另存為MyAddRec.frm。使用Save Project As(工程另存為)菜單項將該工程另存為MyAddRec.vbp。
2)將Data1對象的ReadOnly屬性設(shè)定為False。
3)在窗體的Find按鈕右邊再創(chuàng)建一個命令按鈕對象Command3,并設(shè)置“Caption”屬性為“添加”。
4)雙擊“添加”按紐,編寫代碼。
Private Sub Command3_Click()
Dim reply
prompt$ = "Enter the new record, and then click the left arrow button."
reply = MsgBox(prompt$, vbOKCancel, "Add Record")
If reply = vbOK Then 'if the user clicks OK
Text3.SetFocus 'move cursor to Title box
Data1.Recordset.AddNew 'and get new record
End If
End Sub
該過程首先向用戶顯示一個包含數(shù)據(jù)輸入提示的對話框。MsgBox函數(shù)使用vbOKCancel參數(shù)(由Visual Basic定義的數(shù)字型常量)顯示一個含有OK(是)和Cancel(取消)按鈕的對話框。如果用戶單擊OK,AddNew方法將創(chuàng)建一條新記錄。如果用戶單擊Cancel,則操作被取消。該事件過程還使用SetFocus方法使Text3文本框中得到輸入焦點。SetFocus方法可用來激活任何一個可以得到輸入焦點的對象。
現(xiàn)在你就可以使用“添加”按鈕向數(shù)據(jù)庫添加新記錄了。
運行:單擊“添加”按鈕,程序顯示Add Record對話框,單擊OK按鈕,窗體中出現(xiàn)新的空記錄。按順序輸入新記錄信息(按Tab鍵在字段間切換)。你可以使用“添加”銨鈕向zgda.mdb數(shù)據(jù)庫中添加任意條記錄。