第10章 VB与数据库 227 对话框。在“窗体名称(不带扩展名)”框中输入“stud”,在“记录源”组合框中选择“学生表”,这时“可用的字段”列表框中列出学生表的所有字段,单击“>>”按钮将其全部移到“包括的字段”列表框中。
(3)单击“生成窗体”按钮,当所有字段消失后,数据窗体被加入到当前的工程中。 (4)单击“关闭”按钮,关闭“数据窗体设计器”对话框。此时在工程中生成的数据窗体如图10.9所示。以“frmstud”文件名保存该窗体。该窗体如图10.9所示。
图10.9 自动生成的窗体
实际上,该窗体是VB自动生成的,其中包括5个标签(分别为对应字段的字段名)、5个文本框(分别用于输入各字段的值)、5个命令按钮(标题分别为“添加”、“删除”、“刷新”、“更新”和“关闭”,对应的命令按钮名字分别是cmdAdd,cmdDelete,cmdRefresh,cmdUpdate和cmdClose)和一个Data控件(名字为Data1,Data控件在下节中介绍)。在这些命令按钮上分别设计以下Click事件过程:
Private Sub cmdAdd_Click() Data1.Recordset.AddNew End Sub
Private Sub cmdDelete_Click()
'如果删除记录集的最后一条记录 '记录或记录集中唯一的记录 Data1.Recordset.Delete Data1.Recordset.MoveNext End Sub
Private Sub cmdRefresh_Click()
'这仅对多用户应用程序才是需要的 Data1.Refresh End Sub
Private Sub cmdUpdate_Click() Data1.UpdateRecord
Data1.Recordset.Bookmark = Data1.Recordset.LastModified End Sub
Private Sub cmdClose_Click()
228 Unload Me End Sub
Visual Basic程序设计导学 在阅读后面的Data控件后,读者可回过程理解“数据窗体设计器”自动生成窗体的原理。
(5)单击“工程”菜单中的“工程1属性”菜单项,出现“工程属性”对话框。在“启动对象”组合框中选择“frmstud”,然后运行工程。这时窗体如图10.10所示,可以通过命令按钮执行相应的数据表操作。
图10.10 运行后的数据窗体
我们可以对生成的窗体进行修改,使之更美观,操作更方便,如图10.11所示,是对上面自动生成的窗体进行修改的结果,其中将“性别”文本框和“民族”文本框改为组合框,便于数据输入。
图10.11 改进后的数据窗体
10.3 Data控件
Data控件是VB中访问数据库的重要控件,它支持大多数与数据库有关的操作,通过使用Data控件可以开发非常复杂的数据库应用程序。
Data控件可以不使用代码完成以下功能:
· 完成对本地和远程数据库的链接。
· 打开指定的数据库表,或者是基于SQL的查询集。
· 将表中的字段传至数据绑定控件,并针对数据绑定控件中的修改来更新数据库。
第10章 VB与数据库 229 · 关闭数据库。
10.3.1 Data控件的属性
Data控件有许多属性,其中如Name、Left等属性与数据库的访问无关,另一些属性与数据库访问密切相关,我们重点介绍如下。
(1)Connect属性
设置连接的数据库的类型。VB提供了7种可访问的数据库类型,其中比较常用的有Microsoft Access,dBASE和FoxPro等。可以在属性窗口中单击Connect属性右边的按钮,在出现的一个公用对话框中选择相应的数据库类型;也可以在运行时利用语句进行设置。
? 注意:如果处理的是Access格式的数据库,不需要设置这个属性。
(2)DatabaseName属性
设置被访问的数据库的名字和路径。可以在属性窗口中单击DatabaseName属性右边的按钮,在出现的一个公用对话框中选择相应的数据库,也可以在运行时利用语句进行设置。
(3)Exclusive属性
设置是单用户(独占)方式还是多用户方式打开指定的数据库。设置为True时是单用户方式;为False(缺省值)是多用户方式。
(4)ReadOnly属性
设置是否以只读方式打开指定的数据库。设置为True是只读方式;为False(缺省值)是读写方式。
(5)RecordSource属性
设置数据源,为底层表、SQL语句或QueryDef对象。 (6)Recordset属性
返回一个指定数据源中的记录集或运行一次查询所得的记录的结果集合。 (7)RecordsetType属性
设置创建的Recordset对象的类型,其取值如下:
· dbOpenTable:表记录集类型,一个记录集,代表能用来添加、更新或删除的单个
数据库表。
· dbOpenDynaset:动态集类型,一个动态记录集,代表一个数据库表或包含从一个
或多个表取出的字段的查询结果。可从Dynaset类型的记录集中添加、更新或删除记录,并且任何改变都将反映在基本表上。
· dbOpenSnapshot:快照类型,一个记录集的静态副本,可用于查找数据或生成报告。
一个快照类型的Recordset能包含从一个或多个在同一数据库中的表里取出的字段,但字段不能更改。 (8)BOFAction属性
设置当BOF为True时,即记录集移动到第一个记录的上头时,Data控件的动作。 (9)EOFAction属性
230 Visual Basic程序设计导学 设置当EOF为True时,即记录集移动到最后一个记录的下头时,Data控件的动作。
10.3.2 Data控件的方法
Data控件的常用方法如下:
(1)Refresh方法
在Data控件打开或重新打开数据库的内容时,该方法可以更新Data控件的数据设置。
?
注意:如果在程序运行时设置了Data控件的某些属性,如Connect,RecordSource或Exclusive等属性,则必须在设置完属性后使用Refresh方法使之生效。
(2)UpdateRecord方法
把当前的内容保存到数据库中,但不触发Validate事件。 (3)UpdateControls方法
将Data控件记录集中的当前记录填充到某个数据绑定控件。
10.3.3 Data控件的事件
Data控件的常用事件如下:
(1)Error事件
当Data控件产生执行错误时触发。使用语法如下:
Private Sub Data1_Error(DataErr As Integer, Response As Integer)
其中Data1是Data控件名字;DataErr为返回的错误号;Response设置执行的动作,为0时表示继续执行,为1时显示错误信息。
(2)Reposition事件
当某一个记录成为当前记录后触发。通常是利用该事件进行以当前记录内容为基础的操作,如进行计算等。
(3)Validate事件
在记录改变之前,和使用删除、更新或关闭操作之前触发。
10.3.4 Recordset对象
Recordset是由Data控件返回的代表选定记录集的一个对象,它还是一个属性也是一个对象,并且具有自己的方法和属性。
1. Recordset的方法
(1)MoveFirst,MoveNext,MovePrevious和MoveLast方法
这些方法的功能分别是将记录定位在记录集的首记录、下一个记录、上一个记录和最后一个记录上。
第10章 VB与数据库 231 (2)FindFirst,FindLast,FindNext和FindPrevious方法
这些方法的功能分别是自首记录开始向下查询匹配的第一个记录、自尾记录开始向上查询匹配的第一个记录、自当前记录开始向下查询匹配的第一个记录和自当前记录开始向上查询匹配的第一个记录。
?
注意:这些查找方法只适用于动态集类型和快照集类型的记录集,对于表记录集类型则使用另一种方法Seek进行查找操作。
(3)Seek方法
该方法只用于对表记录集类型的记录集中的记录查找。
?
注意:该方法必须和一个活动的索引一起使用,而且活动索引指定的字段必须是已经设置为索引的才能使用。Recordset的NoMatch属性可以作为是否符合条件的记录的判断依据,如果该属性值为True,表明没有找到符合条件的记录。
(4)AddNew,Edit,Delete和Update方法 AddNew方法用于添加一个新记录。实际上该方法只是清除拷贝缓冲区允许输入新的记录,但并没有把新记录添加到记录集中。要想真正增加记录,应当使用Update方法。
Edit方法将当前记录放入拷贝缓冲区,以改变信息,进行编辑记录的操作,和AddNew方法一样,如果不使用Update方法,所有的编辑结果将不会改变记录。
Delete方法用于删除一个记录,一旦使用了该方法,记录就永远消失不可恢复。 Update方法进行记录集中的记录更新。
?
注意:如果使用AddNew和Edit方法之后,没有立即使用Update方法,而是重新使用Edit,AddNew等操作移动了记录指针,拷贝缓冲区将被清空,则原来输入的信息将会全部丢失,不会存入记录集中。
(5)Close方法
该方法关闭指定的记录集。 2. Recordset的属性 Recordset的常用属性如下:
(1)Bookmark属性
这是书签属性。和我们在阅读时使用的书签一样,用于标识记录集中的记录,以便在需要时快速地将记录指针指向一个记录。
? 注意:存储书签的变量必须是Variant类型。
(2)AbsolutePosition属性 该属性指示当前记录的位置。