常用属性、方法和事件
Data控件的属性有些可用于其他控件,有些则是Data控件所特有的。如表9.4所示,列出了Date控件的一些常用属性。
表9.4 Data控件的常用属性
|---------------|--------------------------------|
| 属 性 | 说 明 |
| DatabaseName | 用于确定数据控件使用的数据库的完整路径 |
| Connect | 指定链接的数据库的类型,默认值为Access |
| RecordSource | 指定数据控件所链接的记录来源,可以是数据表名,也可以是查询名 |
| RecordsetType | 指定数据控件存放记录集的类型,默认为Dynaset |
| BOFAction | 当移动到记录开始时程序将执行的操作 |
| EOFAction | 当移动到记录结尾时程序将执行的操作 |
1.Data控件和Recordset对象的方法
(1) AddNew方法:用于添加一个新记录,新记录的每个字段如果有默认值,将以默认值表示,如果没有则为空白。例如,给Data1的记录集添加新记录:
Data1.Recordset.AddNew
(2) Delete方法:用于删除当前记录的内容,在删除后应将当前记录移到下一个记录。例如,删除数据库中的当前记录:
Data1.Recordset.Delete
(3) Find方法:用于在记录集中查找符合条件的记录。如果条件符合,则记录指针将定位在找到的记录上。Find方法包括:
- FindFirst方法:查找符合条件的第一条记录。
- FindLast方法:查找符合条件的最后一条记录。
- FindPrevious方法:查找符合条件的上一条记录。
- FindNext方法:查找符合条件的下一条记录。
例如,在学生基本情况表中查找政治面貌为党员的第一条记录:
Data1.Recordset.FindFirst "政治面貌='党员'"
当在数据表类型记录集进行查找时,还可以使用Seek方法。如果找不到符合条件的记录,应显示相关信息以提示用户,这可通过判断NoMatch属性来实现,如:
If Data1.Recordset.NoMatch Then MsgBox "找不到符合条件的记录"
(4) Move方法:可以使不同的记录成为当前记录,常用于浏览数据库中的数据。Move方法包括:Move,MoveFirst,MoveLast,MovePrevious和MoveNext方法。
如果Data控件定位在记录集的最后一条记录上,这时继续向后移动记录,就会使得记录集的EOF属性值变为True,不能再使用MoveNext方法向下移动记录,否则会产生错误。从而在使用MoveNext方法移动记录时应该先检测一下记录集的EOF属性:
If Data1.Recordset.EOF = False Then
Data1.Recordset.MoveNext
...... '处理当前记录
Else
Data1.Recordset.MoveLast
End If
使用MovePrevious方法移动当前记录同样会出现与MoveNext方法类似的问题。因此,在使用MovePrevious方法时也应该先检测一下记录集的BOF属性。
(5) Refresh方法:主要用来建立或重新显示与Data控件相连接的数据库记录集。如果在程序运行过程中修改了数据控件的DatabaseName,ReadOnly,Exclusive或Connect属性的设置值,就必须用该方法来刷新记录集:
Data1.Refresh
(6) Update方法:用于将修改的记录内容保存到数据库中。例如,在编辑完当前记录后,可用Update方法保存最新的修改:
Data1.Recordset.Update
(7) UpdateContronls方法:可以从数据控件的记录集中再取回原先的记录内容,即恢复原先的值,取消修改。其格式为:
Data1.UpdateControls
2.Data控件的事件
除具有标准控件所具有事件之外,Data控件还具有几个与数据库访问有关的特有事件:Reposition事件和Validate事件。
(1) Reposition事件:当用户单击Data控件上某个箭头按钮,或者在应用程序中使用了某个Move或Find方法时,一个新记录成为当前记录,均会触发Reposition事件。例如,用这个事件来显示当前记录指针的位置的代码为:
Private Sub Data1_Reposition()
Data1.Caption = Data1.Recordset.AbsolutePosition + 1
End Sub
(2) Validate事件:当某一记录成为当前记录之前,或是在Update,Delete,Unload或Close操作之前触发该事件。Validate事件的格式为:
Private Sub Data1_Validate(Action As Integer, Save As Integer)
其中,Action用来指示引发这种事件的操作,Save用来指定被连接的数据是否进行了修改。例如,在Validate事件触发时确定记录内容是否修改,如果不修改则恢复:
If Save = True Then
mb = MsgBox("要保存修改吗?", vbYesNo)
If mb = vbNo Then
Save = False
Data1.UpdateControls
End If
End If
9.2.2 与控件绑定
Data控件本身只能进行数据库中数据的操作,不能独立进行数据的浏览,所以需要把具有数据绑定功能的控件同Data控件结合起来使用,共同完成数据的显示、查询等。VB中常用的PictureBox,Label,TextBox,CheckBox,Image,ListBox和ComBox控件都能和Data控件绑定,与Data控件绑定的控件也称为数据感知控件。
数据感知控件的DataSource属性用于指定数据控件名,DataField属性用于在下拉列表中选择要显示的字段名称。在设置了DataSource和DataField属性之后,当用户用该控件来在Recordset中访问记录时,就会自动显示出指定字段的内容。
【例9.1】 创建一个学生基本情况录入界面,如图9.10所示。

图9.10 学生基本情况表
首先在窗体上增加一个数据控件Data1,并将其Align属性设为2-AlignBottom,使之位于窗体的下端,DatabaseName属性设为Stu.mdb,RecordSource属性为"学生基本情况"数据表。然后在窗体上增加一个命令按钮数组Edit(0)~Edit(3),一个标签控件组Label1,一个文本框控件数组Text1(0)~text1(5),并将Text1(0)~text1(5)的DataSource属性均设为Data1,DataField属性分别为:学号、姓名、性别、出生年月、政治面貌和所在系部。
编写程序代码如下:
Private Sub Data1_Reposition()
Data1.Caption = "记录" & Data1.Recordset.AbsolutePosition + 1
End Sub
Private Sub Data1_Validate(Action As Integer, Save As Integer)
If Save = True Then
mb = MsgBox("要保存吗?", vbYesNo, "保存记录")
If mb = vbNo Then
Save = False
Data1.UpdateControls
End If
End If
End Sub
Private Sub Edit_Click(Index As Integer)
Select Case Index
Case 0 '添加记录
Data1.Recordset.AddNew
Case 1 '删除记录
mb = MsgBox("要删除吗?", vbYesNo, "删除记录")
If mb = vbYes Then
Data1.Recordset.Delete
Data1.Recordset.MoveLast
End If
Case 2 '更新记录
Data1.UpdateRecord
Data1.Recordset.Bookmark = Data1.Recordset.LastModified
Case 3 '退出
Unload Me
End Select
End Sub