VB数据库编程技术.doc
第9章 VB数据库编程技术91数据库设计基础911 VB中的数据访问 VB提供的数据库引擎叫Jet。VB提供了两种与Jet数据库引擎接口的方法:Data控件(Data Control)和数据访问对象(DAO)。Data控件只提供了有限的不需编程就能访问现存数据库的功能,而DAO模型则是全面控制数据库的完整编程接口。这两种方法不是互斥的,实际上,它们可以同时使用。 VB中的数据库编程就是创建数据访问对象,这些数据访问对象对应于被访问的物理数据库的不同部分,如Database(数据库)、Table(表)、Field(字段)和Index(索引)对象。用这些对象的属性和方法来实现对数据库的操作。VB通过DAO和Jet引擎可以识别三类数据库:1. VB数据库:也称为本地数据库,这类数据库文件使用与Microsoft Access相同的格式。Jet引擎直接创建和操作这些数据库并且提供了最大程度的灵活性和速度。 2. 外部数据库:VB可以使用几种比较流行的“索引顺序访问文件方法(ISAM)”数据库,包括:dDase III、dBase IV、FoxPro 2.0和2.5以及Paradox 3.x和4.x。在VB中可以创建和操作所有这些格式的数据库,也可以访问文本文件数据库和Excel或Lotus l-2-3电子表格文件。 3. ODBC数据库:包括符合ODBC标准的客户机服务器数据库,如Microsoft SQL Server。如果要在VB中创建真正的客户机服务器应用程序,可以使用ODBC Direct直接把命令传递给服务器处理。912 VB数据库体系结构VB提供了基于Microsoft Jet数据库引擎的数据访问能力,Jet引擎负责处理存储、检索、更新数据的结构,并提供了功能强大的面向对象的DAO编程接口。1 VB数据库应用程序的组成VB数据库应用程序包含三部分,如图9.1所示。Jet引擎用户界面数据库图9.1 VB数据库应用程序的组成数据库引擎位于程序和物理数据库文件之间。这把用户与正在访问的特定数据库隔离开来,实现“透明”访问。不管这个数据库是本地的VB数据库,还是所支持的其他任何格式的数据库,所使用的数据访问对象和编程技术都是相同的。 (1)用户界面和应用程序代码 用户界面是用户所看见的用于交互的界面,它包括显示数据并允许用户查看或更新数据的窗体。驱动这些窗体的是应用程序的VB代码,包括用来请求数据库服务的数据访问对象和方法,比如添加或删除记录,或执行查询等。 (2)Jet引擎 Jet引擎被包含在一组动态链接库(DLL)文件中。在运行时,这些文件被链接到VB程序。它把应用程序的请求翻译成对.mdb(Access文件后缀)文件或其他数据库的物理操作。它真正读取、写入和修改数据库,并处理所有内部事务,如索引、锁定、安全性和引用完整性。它还包含一个查询处理器,接收并执行SQL查询,实现所需的数据操作。另外,它还包含一个结果处理器,用来管理查询所返回的结果。 (3)数据库 数据库是包含数据库表的一个或多个文件。对于本地VB或Access数据库来说,就是mdb文件。对于ISAM数据库,它可能是包含.dbf(dBASE文件后缀)文件或其他扩展名的文件。或者,应用程序可能会访问保存在几个不同的数据库文件或格式中的数据。但无论在什么情况下,数据库本质上都是被动的,它包含数据但不对数据作任何操作。数据操作是数据库引擎的任务。2数据库应用程序的存放 数据库应用程序的这三个部分可以被分别放置在不同的位置上。可以把它们都放在一台计算机上,供单用户应用程序使用,也可以放置在通过网络连接起来的不同计算机上。例如,数据库可以驻留在中央服务器上,而用户界面(即应用程序)则驻留在几个客户机上,让许多用户访问相同的数据。脱离开应用程序本身,将数据存放在另一台机器上的数据库应用程序,有远程数据库和客户机/服务器数据库两种结构。它们的不同点如图9.2所示。 客户机/服务器 远程数据库数据库引擎数据库服务器数据库引擎数据库用户界面客户机图9.2 客户机/服务器数据库与远程数据库的存放 在客户机/服务器系统中,数据库引擎和数据库一起被放置在服务器上。数据库引擎可以同时对多个客户机的应用程序提供服务、操作数据库并对每个本地应用程序返回所请求的记录。在远程系统中,数据库引擎与用户应用程序在相同的计算机上,只有数据库驻留在远程计算机上。Jet数据库引擎不是客户机服务器引擎,它是驻留在DLL文件中的本地数据库引擎,在运行时被动态地链接到VB应用程序中。如果程序在不同的工作站上有许多备份,那么每个备份都将有它自己的Jet数据库引擎在本地的备份。在VB中,通过连接到ODBC数据源,如Microsoft SQL Server等,可直接把查询传递给服务器数据库引擎,就可以创建客户机/服务器应用程序。92本地数据库设计(ACCESS) VB中创建数据库的途径主要有:(1)可视化数据管理器:使用可视化数据管理器,不需要编程就可以创建Jet数据库。(2)DAO:使用VB的DAO部件可以通过编程的方法创建数据库。(3)Microsoft Access:因为Microsoft Access使用了与VB相同的数据库引擎和格式,所以,用Microsoft Access创建的数据库和直接在VB中创建的数据库是一样的。(4)数据库应用程序:像FoxPro、dBase或ODBC客户机/服务器应用程序这样的产品,可以作为外部数据库,VB可通过ISAM或ODBC驱动程序来访问这些数据库。921可视化数据管理器 数据管理器(Data Manager)是VB的一个传统成员,它可以用于快速地建立数据库结构及数据库内容。VB的数据管理器实际上是一个独立的可单独运行的应用程序 Visdata.exe。它随安装过程放置在VB目录中,可以单独运行,也可以在VB开发环境中启动。凡是VB有关数据库的操作,比如数据库结构的建立、记录的添加及修改以及用ODBC连接到服务器端的数据库如SQL Server,都可以利用此工具来完成。 1启动数据管理器选择“外接程序”菜单下的“可视化数据管理器”项就可以启动数据管理器,打开“VisData”窗口。 2工具栏按钮 VisData 窗口的工具栏提供了三组共9个按钮,为了说明这些按钮所提供的功能,我们利用VB提供的一个例子数据库Biblio.mdb来介绍。Biblio.mdb存放在VB98目录中,单击“文件”菜单中的“打开数据库”级联菜单的“Microsoft Access”项,即可在出现的对话框中看到Biblio.mdb,选中并打开它,打开后的VisData窗口如图9.3所示。我们可以看到,在这个MDI窗口内包含两个子窗口:数据库窗口和SQL语句窗口。数据库窗口显示了数据库的结构,包括表名、列名、索引。SQL语句窗口可用于输入一些SQL命令,针对数据库中的表进行查询操作。图9.3 VisData窗口下面我们对工具栏上的按钮进行简单的说明。(1)类型群组按钮工具栏的第一组按钮,它可以设置记录集的访问方式,具体为: 表类型记录集按钮(最左边的按钮):当以这种方式打开数据库中的数据时,所进行的增、删、改、查等操作都是直接更新数据库中的数据。 动态集类型记录集按钮(中间的按钮):使用这种方式是先将指定的数据打开并读入到内存中,当用户进行数据编辑操作时,不直接影响数据库中的数据。使用这种方式可以加快运行速度。快照类型记录集(最右边的拉钮):以这种类型显示的数据只能读不能修改,适用于只查询的情况。(2)数据群组按钮工具栏的中间一组按钮。用于指定数据表中数据的显示方式。先用鼠标在要显示风格的按钮上单击一下,然后选中某个要显示数据的数据表,单击鼠标右键,在弹出的菜单上选择“打开”,则此表中的数据就以所要求的形式显示出来。(3)事务方式群组按钮工具栏的最后一组按钮用于进行事务处理。922具体实现 1建立数据库对数据管理器的基本功能有了初步的认识后,我们看一下如何利用它来建立数据库。我们这里所建立的数据库student.mdb(学生数据库)中各表如下:基本情况(学号,姓名,性别,专业,出生年月,照片,备注)学生成绩表(学号,课程,成绩,学期) (1)建立数据库结构 单击“文件”菜单中的“新建”命令,在“新建”级联菜单中选择“Microsoft Access”,再选择“版本7.0 MDB”项,在“选择要创建的Microsoft Access数据库”窗口中选定新建数据库的路径并输入数据库名,这里为student.mdb。 这样一个新的数据库就建立好了,下面就要在此数据库中添加数据表了。 (2)添加数据表将鼠标移到数据库窗口区域内,单击鼠标右键,在弹出的菜单中选择“新建表”命令,出现“表结构”对话框,利用对话框我们可以建立数据表的结构。我们首先建立基本情况表。在“表名称”中输入“基本情况”,然后添加基本情况表的字段,单击“添加字段”按钮,出现“添加字段”对话框,在此对话框中填入“学号”字段的信息。 按顺序输入“姓名”、“性别”、“专业”、“出生年月”、“照片”、“备注”字段,然后按“关闭”按钮返回到“表结构”对话框中。(3)建立索引建立了表的结构后就可以建立此表的索引了,这样可以加快检索速度。单击“添加索引”按钮,会出现如图9.4所示的对话框,通过此对话框可以将数据表的某些字段设置为索引。在“名称”字段中输入索引的名称,然后从下边的“索引的字段”列表中选择作为索引的字段,我们这里选择的是“学号”。 图9.4 设置索引对话框 如果需要建立多个索引,则每完成一项索引后,单击“确定”按钮,然后继续下一个索引的设置。设置完毕后,单击“关闭”按钮返回到“表结构”对话框。2录入数据 数据表结构建立好之后,就可以向表中输入数据了,数据管理器提供了简单的数据录入功能。首先在工具栏上选定DBGrid显示风格的按钮,然后在要录入数据的数据表上单击鼠标右键,选择“打开”选项,则出现以网格风格显示数据的窗口,如果此表中已有数据,则此时会显示出此表中的全部数据;若此表中无数据,则会显示出一个空表。如图9.5所示。我们这里是以“基本情况”表为例,并且输入了部分数据后的情况。 图9.5 录入数据3建立查询数据表建立好之后,如果数据表中已经有数据,就可以对表中的数据进行有条件或无条件的查询。VB的数据管理器提供了一个图形化的设置查询条件的窗口查询生成器。选择“实用程序”菜单下的“查询生成器”,或在数据库窗口区域单击鼠标右健,然后在弹出的菜单中选择“新查询”,即可出现“查询生成器”对话框,如图9.6所示。假设我们要查询学号为110002的学生基本情况,可按下述步骤进行:(1)首先选择要进行查询的数据表,单击表列表框中的“基本情况”表。(2)在“字段名称”字段中选定“基本情况.学号”。(3)单击“运算符”列表,选择“=”。(4)单击“列出可能的值”按钮,在“值”字段中输入110002。(5)单击“将And加入条件”按钮,将条件加入“条件”列表框中。(6)在“要显示的字段”列表框中,选定所需显示的字段。注意,这里所选的字段就是我们在查询结果中要看的字段。(7)单击“运行”按钮,在随后出现的VisData对话框中,选择“否”,并进一步选择“运行”,即可看到查询结果。(8)单击“显示“按钮,在随后出现的“SQL Query”窗口中,显示刚建立的查询所对应的SQL语句。图9.6 “查询生成器”对话框93 数据控件 Data控件是Visual Basic访问数据库的一种利器,它能够利用三种Recordset对象来访问数据库中的数据,数据控件提供有限的不需编程而能访问现存数据库的功能,允许将Visual Basic的窗体与数据库方便地进行连接。要利用数据控件返回数据库中记录的集合,应先在窗体上画出控件,再通过它的三个基本属性Connect、DatabaseName和RecordSource设置要访问的数据资源。931 数据控件属性 1Connect属性 Connect属性指定数据控件所要连接的数据库类型,Visual Basic默认的数据库是Access的MDB文件,此外,也可连接DBF、XLS、ODBC等类型的数据库。 2DatabaseName属性 DatabaseName属性指定具体使用的数据库文件名,包括所有的路径名。如果连接的是单表数据库,则DatabaseName属性应设置为数据库文件所在的子目录名,而具体文件名放在RecordSource属性中。 例如,要连接一个Microsoft Access的数据库C:Student.mdb,则设置DatabaseName=”C:Student.mdb",Access数据库的所有表都包含在一个MDB文件中。如果连接一个FoxPro数据库如C:VB6stu_fox.dbf,则DatabaseName=”C:VB6”,RecordSource=”stu_fox.dbf”,stu_fox数据库只含有一个表。 3RecordSource属性RecordSource确定具体可访问的数据,这些数据构成记录集对象Recordset。该属性值可以是数据库中的单个表名,个存储查询,也可以是使用SQL查询语言的一个查询字符串。 例如,要指定Student.mdb数据库中的基本情况表,则RecordSource=”基本情况”。而RecordSource=”Select * From 基本情况Where专业=物理 ”,则表示要访问基本情况表中所有物理系学生的数据。 4RecordType属性 RecordType属性确定记录集类型。 5EofAction和BofAction属性当记录指针指向Recordset对象的开始(第一个记录前)或结束(最后一个记录后)时,数据控件的EofAction和BofAction属性的设置或返回值决定了数据控件要采取的操作。属性的取值如表9.1所示。表9.1 EofAction和BofAction属性属性取值操作BofAction0控件重定位到第个记录1移过记录集开始位,定位到一个无效记录,触发数据控件对第一个记录的无效事件ValidateEofAction0控件重定位到最后个记录1移过记录集结束位,定位到一个无效记录,触发数据 控件对最后一个记录的无效事件Validate 2向记录集加入新的空记录,可以对新记录进行编辑,移动记录指针,新记录写入数据库在Visual Basic中,数据控件本身不能直接显示记录集中的数据,必须通过能与它绑定的控件来实现。可与数据控件绑定的控件对象有文本框、标签、图像框、图形框、列表框、组合框、复选框、网格、DB列表框、DB组合框、DB网格和OLE容器等控件。要使绑定控件能被数据库约束,必需在设计或运行时对这些控件的两个属性进行设置:(1)DataSource属性DataSource属性通过指定个有效的数据控件连接到一个数据库上。(2)DataField属性DataField属性设置数据库有效的字段与绑定控件建立联系。绑定控件、数据控件和数据库三者的关系如图9.7所示。绑定控件数据库数据控件图9.7 绑定控件、数据控件和数据库三者的关系 当上述控件与数据控件绑定后,Visual Basic将当前记录的字段值赋给控件。如果修改了绑定控件内的数据,只要移动记录指针,修改后的数据会自动写入数据库。数据控件在装入数据库时,它把记录集的第一个记录作为当前记录。当数据控件的BofAction属性值设置为2时,当记录指针移过记录集结束位,数据控件会自动向记录集加入新的空记录。例9.1 建立student.mdb数据库,它包含两个表:“基本情况”表和“学生成绩表”。参见表9.2和表9.3。表9.2 学生基本情况表结构字段名类型宽度学号Text6姓名Text10性别Text2专业Text10出生年月Date8照片Binary0表9.3 学生成绩表结构字段名类型宽度学号Text6课程Text10成绩Long4学期Text2用可视化数据管理器建立以上设计的数据库及其表,表中数据可自行录入。例9.2 设计一个窗体用以显示建立的student.mdb数据库中基本情况表的内容。基本情况表包含了6个字段,故需要用6个绑定控件与之对应。这里用一个图形框显示照片和5个文本框显示学号、姓名等数据。本例中不需要编写任何代码,具体操作步骤如下: (1)参考如图9.8所示窗体,在窗体上放置1个数据控件,一个图形框、5个文本框和5个标签控件。5个标签控件分别给出相关的提示说明。图9.8 显示Student.mdb基本情况表的数据(2)将数据控件Data1的Connect属性指定为Access类型,DatabaseName属性连接数据库Student.mdb,RecordSource属性设置为“基本情况”表。(3)图形框和5个文本框控件Text1Text5的DataSource属性都设置成Data1。通过单击这些绑定控件的DataField属性上的“”按钮,将下拉出基本情况表所含的全部字段,分别选择与其对应的字段照片、学号、姓名、性别、专业和出生年月,使之建立约束关系。 运行该工程即可出现图9.8所示效果。5个文本框分别显示基本情况表内的字段:学号、姓名、性别、专业和出生年月的内容,图形框显示每个学生的照片。 使用数据控件对象的4个箭头按钮可遍历整个记录集中的记录。单击最左边的按钮显示第l条记录;单击其旁边的按钮显示上一条记录;单击最右边的按钮显示最后一条记录;单击其旁边的按钮显示下条记录。数据控件除了可以浏览Recordset对象中的记录外,同时还可以编辑数据。如果改变了某个字段的值,只要移动记录,这时所作的改变存入数据库中。 Visual Basic 6.0提供了几个比较复杂的网格控件,几乎不用编写代码就可以实现多条记录数据显示。当把数据网格控件的DataSource属性设置为一个Data控件时,网格控件会被自动地填充,并且其列标题会用Data控件的记录集里的数据自动地设置。例9.3 用数据网格控件MsFlexGrid显示Student.mdb数据库中基本情况表的内容。MsFlexGrid控件不是Visual Basic工具箱内的默认控件,需要在开发环境中选择“工程|部件”菜单命令,并在随即出现的对话框中选择“MicroSoft FlexGrid Control 6.0”选项,将其添加到工具箱中。本例所用控件的属性设置如表9.4所示。请读者自行比较不可卷动列属性FixedCols=0与FixedCols=1的区别。Form启动后自动显示如图9.9所示窗口。 表9.4 控件属性默认控件名其它属性设置Data1DatabaseName=”c:student.mdb”RecordsetType=0RecordSource=”基本情况”MSFlexGrid1DataSource=Data1FixCols=0图9.9使用数据网格控件932数据控件的事件 1Reposition事件 Reposition事件发生在一条记录成为当前记录后,只要改变记录集的指针使其从一条记录移到另一条记录,会产生Reposition事件。通常,可以在这个事件中显示当前指针的位置。例如,在例9.2的Data1_Reposition事件中加入如下代码:Private Sub Data1_Reposition() Data1.Caption = Data1.Recordset.AbsolutePosition + 1End Sub 这里,Recordset为记录集对象,AbsolutePosition属性指示当前指针值(从0开始)。当单击数据控件对象上的箭头按钮时,数据控件的标题区会显示记录的序号。 2.Validate事件当要移动记录指针、修改与删除记录前或卸载含有数据控件的窗体时都触发Validate事件。Validate事件检查被数据控件绑定的控件内的数据是否发生变化。它通过Save参数(True或False)判断是否有数据发生变化,Action参数判断哪种操作触发了Validate事件。参数可为表9.5中的值。表9.5 Validate事件的Action参数Action值描述Action值描述0取消对数据控件的操作6Update1MoveFirst7Delete2MovePrevious8Find3MoveNext9设置Bookmark4MoveLast10Close5AddNew11卸载窗体 一般可用Validate事件来检查数据的有效性。例如,在例9.2中,如果不允许用户在数据浏览时清空性别数据,可使用下列代码:Private Sub Data1_Validate(Action As Integer, Save As Integer) If Save And Len(Trim(Text3) = 0 Then Action = 0 MsgBox " 性别不能为空!"End IfEnd Sub 此代码检查被数据控件绑定的控件Text3内的数据是否被清空。如果Text3内的数据发生变化,则Save参数返回True,若性别对应的文本框Text3被置空,则通过Action=0取消对数据控件的操作。933 数据控件的常用方法 数据控件的内置功能很多,可以在代码中用数据控件的方法访问这些属性。1Refresh方法如果在设计状态没有为打开数据库控件的有关属性全部赋值,或当RecordSource在运行时被改变后,必须使用数据控件的Refresh方法激活这些变化。在多用户环境下,当其他用户同时访问同一数据库和表时,Refresh方法将使各用户对数据库的操作有效。例如:将例9.2的设计参数改用代码实现,使所连接数据库所在的文件夹可随程序而变化:Private Sub Form_Load( ) Dim mpath As String Mpath=App.Path 获取当前路径 If Right(mpath,1)<>”/” Then mpath=mpath+”/” Data1.DatabaseName=mpath+”Student.mdb” 连接数据库 Data1.RecordSource=”基本情况” 构成记录集对象 Data1.Refresh 激活数据控件End Sub2UpdateControls方法UpdateControls方法可以将数据从数据库中重新读到被数据控件绑定的控件内。因而我们可使用UpdateControls方法终止用户对绑定控件内数据的修改。 例如:将代码Data1.UpdateControts放在一个命令按钮的Click事件中,就可以实现对记录修改的功能。 3. UpdateRecord方法当对绑定控件内的数据修改后,数据控件需要移动记录集的指针才能保存修改。如果使用UpdateRecord方法,可强制数据控件将绑定控件内的数据写入到数据库中,而不再触发Validate事件。在代码中可以用该方法来确认修改。934 记录集的属性与方法 由RecordSource确定的具体可访问的数据构成的记录集Recordset也是一个对象,因而,它和其他对象一样具有属性和方法。下面列出记录集常用的属性和方法。1AbsolutePosition属性AbsolutePosition返回当前指针值,如果是第1条记录,其值为0,该属性为只读属性。2Bof和Eof的属性 Bof判定记录指针是否在首记录之前,若Bof为True,则当前位置位于记录集的第1条记录之前。与此类似,Eof判定记录指针是否在末记录之后。3Bookmark属性 Bookmark属性的值采用字符串类型,用于设置或返回当前指针的标签。在程序中可以使用Bookmark属性重定位记录集的指针,但不能使用AbsolutePostion属性。4Nomatch属性 在记录集中进行查找时,如果找到相匹配的记录,则Recordset的NoMatch属性为False,否则为True。该属性常与Bookmark属性一起使用。5RecordCount属性 RecordCount属性对Recordset对象中的记录计数,该属性为只读属性。在多用户环境下,RecordCount属性值可能不准确,为了获得准确值,在读取RecordCount属性值之前,可使用MoveLast方法将记录指针移至最后一条记录上。6Move方法 使用Move方法可代替对数据控件对象的4个箭头按钮的操作遍历整个记录集。5种Move方法是: (1)MoveFirst方法:移至第1条记录。 (2)MoveLast方法:移至最后一条记录。 (3)MoveNext方法:移至下一条记录。(4)MovePrevious方法:移至上一条记录。(5)Move n 方法:向前或向后移n条记录,n为指定的数值。例9.4 在窗体上用4个命令按钮代替例9.2数据控件对象的4个箭头按钮的操作。在例9.2的基础上,窗体上增加4个命令按钮,将数据控件的Visible属性设置为False,如图9.10所示。通过对4个命令按钮的编程代替对数据控件对象的4个箭头按钮的操作。图9.10 用按钮代替数据控件对象的箭头按钮命令按钮Command1_Click事件移至第1条记录,代码如下:Private Sub Command1_Click()Data1.Recordset.MoveFirstEnd Sub命令按钮Command4_Click事件移至最后一条记录,代码如下:Private Sub Command4_Click() Data1.Recordset.MoveLastEnd Sub 另外两个按钮的代码需要考虑Recordset对象的边界的首尾,如果越界,则用MoveFirst方法定位到第1条记录或用MoveLast方法定位到最后一条记录。程序代码如下:Private Sub Command2_Click() Data1.Recordset.MovePrevious If Data1.Recordset.BOF Then Data1.Recordset.MoveFirstEnd SubPrivate Sub Command3_Click() Data1.Recordset.MoveNext If Data1.Recordset.EOF Then Data1.Recordset.MoveLastEnd Sub7Find方法使用Find方法可在指定的Dynaset或Snapshot类型的Recordset对象中查找与指定条件相符的一条记录,并使之成为当前记录。4种Find方法是: (1)FindFirst方法:从记录集的开始查找满足条件的第1条记录。 (2)FindLast方法:从记录集的尾部向前查找满足条件的第l条记录。 (3)FindNext方法:从当前记录开始查找满足条件的下一条记录。 (4)FindPrevious方法:从当前记录开始查找满足条件的上一条记录。4种Find方法的语法格式相同:数据集合.Find方法 条件 搜索条件是一个指定字段与常量关系的字符串表达式。在构造表达式时,除了用普通的关系运算外,还可以用Like运算符。 例如:语句 “Data1.Recordset.FindFirst 专业=物理”表示在由Data1数据控件所连接的数据库Student.mdb的记录集内查找专业为“物理”的第l条记录。这里,“专业”为数据库Student记录集中的字段名,在该字段中存放专业名称信息。要想查找下一条符合条件的记录,可继续使用语句:”Data1.Recordset.FindNext 专业=物理”。 又例如:要在记录集内查找专业名称中带有“建”字的专业: Data1.Recordset.FindFirst 专业 Like ”*建*”字符串“*建*”匹配字段专业中带有“建”字字样的所有专业名称字符串。 需要指出的是Find方法在找不到相匹配的记录时,当前记录保持在查找的始发处,NoMatch属性为True。如果Find方法找到相匹配的记录,则记录定位到该记录,Recordset的NoMatch属性为False。8Seek方法 使用Seek方法必须打开表的索引,它在Table表中查找与指定索引规则相符的第1条记录,并使之成为当前记录。其语法格式为: 数据表对象.seek comparison,keyl,key2 Seek允许接受多个参数,第1个是比较运算符comparison,Seek方法中可用的比较运算符有=、>=、>、<>、<、<=等。 在使用Seek方法定位记录时,必须通过Index属性设置索引。若在记录集中多次使用同样的Seek方法(参数相同),那么找到的总是同一条记录。 例如:假设数据库Student内基本情况表的索引字段为学号,满足学号字段值大于等于110001的第1条记录可使用以下程序代码:Data1.RecordsetType = 0 设置记录集类型为TableData1.RecordSource = "基本情况" 打开基本情况表单Data1.RefreshData1.Recordset.Index = "jbqk_no" 打开名称为jbqk_no的索引Data1.Recordset.Seek ">=", "110001"935 数据库记录的增、删、改操作 Data控件是浏览表格并编辑表格的好工具,但怎么输入新信息或删除现有记录呢?这需要编写几行代码,否则无法在Data控件上完成数据输入。数据库记录的增、删、改操作需要使用AddNew、Delete、Edit、Update和Refresh方法。它们的语法格式为: 数据控件.记录集.方法名1增加记录AddNew方法在记录集中增加新记录。增加记录的步骤为:(1)调用AddNew方法。 (2)给各字段赋值。给字段赋值格式为:Recordset.Fields(”字段名”)=值。 (3)调用Update方法,确定所做的添加,将缓冲区内的数据写入数据库。 注意:如果使用AddNew方法添加新的记录,但是没有使用Update方法而移动到其他记录,或者关闭记录集,那么所做的输入将全部丢失,而且没有任何警告。当调用Update方法写入记录后,记录指针自动返回到添加新记录前的位置上,而不显示新记录。为此,可在调用Update方法后,使用MoveLast方法将记录指针再次移到新记录上。2删除记录要从记录集中删除记录的操作分为三步:(1)定位被删除的记录使之成为当前记录。(2)调用Delete方法。(3)移动记录指针。 注意:在使用Delete方法时,当前记录立即删除,不加任何的警告或者提示。删除一条记录后,被数据库所约束的绑定控件仍旧显示该记录的内容。因此,你必须移动记录指针刷新绑定控件,般采用移至下一记录的处理方法。在移动记录指针后,应该检查Eof属性。3编辑记录 数据控件自动提供了修改现有记录的能力,当直接改变被数据库所约束的绑定控件的内容后,需单击数据控件对象的任一箭头按钮来改变当前记录,确定所做的修改。也可通过程序代码来修改记录,使用程序代码修改当前记录的步骤为: (1)调用Edit方法。 (2)给各字段赋值。 (3)调用Update方法,确定所做的修改。 注意:如果要放弃对数据的所有修改,可用Refresh方法,重读数据库,没有调用Update方法,数据的修改没有写入数据库,所以这样的记录会在刷新记录集时丢失。例9.5 在例9.2的基础上加入“新增”、“删除”、“修改”、“放弃”和“查找”钮,通过对5个按纽的编程建立增、删、改、查功能,如图9.11所示。图9.11 编程建立增、删、改、查功能 Command1_Click事件的功能根据按钮提示文字调用AddNew方法或Update方法,并且控制具他4个按钮的可用性。当按钮提示为“新增”时调用AddNew方法,并将提示文字改为“确认”,同时使“删除”按钮Command2、“修改”按钮Command3和“查找”按钮Command5不可用,而使“放弃”按钮Command4可用。新增记录后,需再次单击Command1调用Update方法确认添加的记录,再将提示文字再改为“新增”,并使“删除”、“修改”和“查找”按钮可用,而使“放弃”按钮不可用。程序中出现的On Error Resume Next语句是Visual Basic提供的错误捕获语句。该语句表示在程序运行时发生错误,忽略错误行,继续执行下一语句。Private Sub Command1_Click() On Error Resume Next Command2.Enabled = Not Command2.Enabled Command3.Enabled = Not Command3.Enabled Command4.Enabled = Not Command4.Enabled Command5.Enabled = Not Command5.Enabled If Command1.Caption = "新增" Then Com