Visual Basic 语 言 程 序 设 计第 13章 Visual Basic与数据库
随着信息管理系统的大量推广应用,数据库技术已经成为计算机应用技术中的一个重要组成部分,使用数据库来存储管理大量数据,比通过文件来存储管理有更高的效率。
VB提供了强大的数据库管理功能,包含的内容很多,限于篇幅,本章在内容上侧重于实际应用。首先介绍数据库的基本概念和使用 VB自带的可视化数据库管理器建立数据库;
介绍使用 Data控件和数据绑定控件来访问数据库;再介绍结构化查询语言 SQL的基本知识以及怎样利用它来操作数据库;最后介绍 ADO数据控件的使用。通过本章的学习,
读者将有能力开发一个满足自己工作和学习需要的数据库应用程序。
Visual Basic 语 言 程 序 设 计
13.1 数据库概念
13.1.1 数据库
– 数据库 (DataBase简称 DB),是指存储在计算机内、有组织的、可共享的相关数据的集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和扩展性,并可为多用户共享。
– 数据库中的数据是高度结构化的,可以存储大量的数据,并且能够方便地进行数据的查询,另外,数据库还具有较好的保护数据安全、维护数据一致性的措施,
并能方便地实现数据的共享。
Visual Basic 语 言 程 序 设 计
13.1.2 数据库管理系统
数据库管理系统 (DataBase Management System简称 DBMS)
是在操作系统支持下,为数据库的建立、使用和维护而配置的软件系统,例如,Microsoft SQL Server或
Microsoft Access等。数据库管理系统是位于用户与操作系统之间一层数据管理软件,它在操作系统的基础上,对数据库进行管理和控制,利用数据库系统提供的一系列命令,用户能够方便地建立数据库和操作数据,比如,建表、
向表添加或删除记录等。用户使用的各种数据库命令以及数据应用程序的运行,都要通过数据库管理系统来实现。
另外,数据库管理系统还要保证数据的安全性、完整性、
多用户对数据的并发使用及发生故障后的系统恢复等任务。
Visual Basic 语 言 程 序 设 计
13.1.3 数据库应用程序
数据库应用程序是指用 VB或 Delphi等开发工具开发的程序,用来实现某种具体功能的应用程序,例如,财务软件管理系统,
各种信息管理系统等。数据库应用程序是在操作系统和数据库管理系统的支持下开发和运行的,它利用数据库管理系统提供的各种手段访问一个或多个数据库及其数据。
Visual Basic 语 言 程 序 设 计
13.1.4 数据库系统
数据库系统 (DataBase System简称 DBS)是指由计算机硬件、操作系统、数据库管理系统及其开发工具和在此支持下建立起来的数据库、应用程序以及用户、数据库管理人员组成的一个整体。对于大型数据库系统来说,例如,Microsoft SQL Server
数据库的建立、使用和维护工作,需要有专门的人员来完成,称为数据库管理员
(DataBase Administrator,简称 DBA)。
Visual Basic 语 言 程 序 设 计
13.1.5 关系数据库
关系数据库以关系模型为基础,建立在严格的数学概念的基础上,概念简单、清晰,并且功能强大,易于应用理解和使用。
关系数据库是根据表、记录和字段之间的关系进行组织和访问,以行和列组织的二维表的形式存储数据,并且通过关系将这些表联系在一起的。
关系数据库分为两类:一类是桌面数据库,例如,Access和 FoxPro等,
另一类是客户/服务器数据库,例如,SQL Server,Oracle等。一般而言,桌面数据库用于小型的、单机的应用程序,它不需要网络和服务器,实现起来比较方便,但它只提供数据的存取功能。客户/服务器数据库主要适用于大型的、多用户的数据库管理系统,应用程序包括两部分:一部分驻留在客户机上,用于向用户显示信息及实现与用户的交互;另一部分驻留在服务器中,主要用来实现对数据库的操作和对数据的计算处理。
Visual Basic 语 言 程 序 设 计
1.表
关系数据库的表是采用二维表格来存储数据的,是一种按行与列排列的具有相关信息的逻辑组,它类似于工作表单。一个数据库可以包含任意多个数据表。如表 13.1
和表 13.2就是两个二维表,一个用于存储学生基本情况的数据,一个用于存储学生成绩的数据。
Visual Basic 语 言 程 序 设 计
2.字段
数据表中的每一列对应一个字段,表是由它所包含的各种字段定义的,每个字段描述了它所含有的数据的意义,数据表的设计实际上就是对字段的设计。创建数据表时,为每个字段分配一个数据类型,定义了他们的数据长度和其他属性。字段可以包括各种字符、数字甚至图形。例如,表
13.1包含了 9个字段:学号、姓名、性别、班级、
出生年月、专业、住址、电话和照片,而表 13.2
包含了 10个字段:学号、姓名、数学、物理、英语,VB、网络、哲学、总分和平均分。各个字段包含了不同的数据类型。
Visual Basic 语 言 程 序 设 计
3.记录
数据库表中,每一行被称为一个记录,一般来说,数据库表中的任意两行都不能相同,例如,表 13.1为一张学生基本情况表,
表中每一行是一个记录,它包含了特定学生的基本情况信息,而每个记录则包含了相同类型和数量的字段,如学号、姓名、
性别、出生年月、专业等。
Visual Basic 语 言 程 序 设 计
4.关键字
关键字是用来确保表中记录的惟一性的,
它可以是一个字段或多个字段,它被用作一个表的索引字段。每个表都应有一个主关键字,主关键字可以是表的一个字段或字段的组合,且对表中的每一行都惟一,
他们为快速检索而被索引。在学生成绩表中,学号是表的主关键字,因为学号惟一地标识了一个且只有一个学生。
Visual Basic 语 言 程 序 设 计
5.索引
– 利用索引可以更快地访问数据,索引是数据表中单列或多列数据的排序列表,每个索引指向其相关的数据表的某一行。索引提供了一个指向存储在表中特定列的数据的指针,然后根据所指定的排序顺序排列这些指针。如果对,学号,进行查询,则可以建立,学号,字段的索引,这样能更快地得到信息。
Visual Basic 语 言 程 序 设 计
6.表间关系
在实际应用中,一个数据库往往包含多个表,不同类别的数据存放在不同的表中。表间关系把各个表联接起来,将来自不同表的数据组合在一起。表与表之间的关系是通过各个表中的某一个关键字段建立起来的,建立表关系所用的关键字段应具有相同的数据类型。
表与表之间存在三种关系:
– (1)一对一关系
第 1个表中的一条记录数据与第 2个表中一条记录的数据相对应,例如表 13.1
和表 13.2就是一对一关系。
– (2)一对多关系
一个学生可以有多门课程的成绩,即学生成绩档案表,如表 13.3所示。存在一对多关系,在一对多关系中,第 1个表中的一条记录数据与第 2个表中多条记录的数据对应,但第 2个表中的一条记录只能与第 1个表的一条记录的数据对应。例如。表 13.2学生成绩表与表 13.3学生成绩档案表是一对多关系。
Visual Basic 语 言 程 序 设 计
6.表间关系
(3)多对多关系
– 第 1个表的一条记录的数据内容可与第 2个表的多条记录的数据对应,反之亦然,这样的表间关系类型叫做多对多关系。
– 例如,表 13.1学生基本情况表与表 13.3学生成绩档案表是多对多关系。因为一个学生有多门课程的成绩,而一门课程又有多个学生学习。
– 多对多关系可以通过创建第 3个表分别与两个表产生独立的一对多关系来定义。
Visual Basic 语 言 程 序 设 计
13.1.6 记录集类型
在 VB中由于数据库内的表不允许直接访问,
而只能通过记录集对象进行记录的操作和浏览,因此,记录集是一种浏览数据库的工具。用户可根据需要,通过使用记录集对象选择数据。记录集对象提供了 24种方法和 26种属性,利用他们可以对数据库中的记录进行各种处理。记录集有三种类型:
表、动态集和快照。他们之间存在明显的区别。
Visual Basic 语 言 程 序 设 计
1.表类型
表 (Table)类型的 Recordset对象是可直接显示数据。但只能对单个的表打开表类型的记录集,而不能对联接或者联合查询打开。如果使用基本表创建索引,就可以对表类型的 Recordset对象进行索引。 Table
比其他记录集类型处理速度都快,但它需要大量的内存资源。
Visual Basic 语 言 程 序 设 计
2.动态集类型
动态集 (DynaSet)类型的 Recordset对象可以修改和显示数据。它实际上是对一个或者几个表中的记录的一系列引用,
如果该记录集从表 13.1中选取了学号、姓名、专业,从表
13.3中选取了课程和成绩,通过关键字,学号,建立表间关系。可用动态集从多个表中提取和更新数据,其中包括链接其他数据库中的表。动态集和产生动态集的基本表可以互相更新。如果动态集中的记录发生改变,同样的变化也将在基本表中反映出来。在打开动态集的时候,如果其他的用户修改了基本表,那么动态集中也将反映出被修改过的记录。动态集类型是最灵活的 Recordset类型,也是功能最强的。不过,它的搜索速度与其他操作的速度不如
Table。
Visual Basic 语 言 程 序 设 计
3.快照类型
快照 (SnapShot)类型的 Recordset对象是静态的显示数据 (只读 )。它包含的数据是固定的,记录集为只读状态,它反映了在产生快照的一瞬间的数据库的状态。 SnapShot是最缺少灵活性的记录集,但它所需要的内存开销最少。如果只是浏览记录,可以用 SnapShot类型。具体使用什么记录集,取决于需要完成的任务,即要更改数据,还是简单地查看数据。另外,如果必须对数据进行排序或者使用索引,可以使用表类型。因为表类型的 Recordset对象是做了索引的,它定位数据的速度是最快的。如果希望能够对查询选定的一系列记录进行更新,
可以使用动态集类型。如果在特殊的情况下不能使用表类型的记录集,
而且只需对记录进行扫描,那么使用快照类型可能会快一些。一般来说,尽可能地使用表类型的 Recordset对象,它的性能通常总是最好的。
Visual Basic 语 言 程 序 设 计
13.1.7 设计数据库的步骤
1.创建数据库
– 数据库开发者需要明确希望从数据库中得到什么信息,首先必须和使用数据库的人员进行交流,磋商需要解决的问题,并描述需要数据库生成的报表,收集当前用于记录数据的表格。
2.确定数据库中需要的表
– 确定表是数据库设计中最主要的步骤。在设计表时,应该按以下原则对信息进行分类:
(1)表间不能有重复信息,每条信息只能保存在一个表中,这样只需在一处进行更新,效率高,同时也消除了包含不同信息的重复项的可能性。
(2)每个表应该包含关于一个主题的信息,这样可以
Visual Basic 语 言 程 序 设 计
13.1.7 设计数据库的步骤
3.确定表结构
– 每个表中都包含关于同一个主题的信息,并且表中的每个字段包含关于该主题的各个组成部分。例如,学生基本情况表可以包含学号、姓名、性别、出生年月、专业等字段,每个字段结构主要包括:字段名、字段类型、字段宽度。
4.确定索引字段
– 数据库中的每个表必须包含表中可以惟一确定每个记录的单个字段或多个字段,也就是确定索引字段。
5.确定表之间关系
– 建立表间关系,将相关信息组合起来,以便查询使用。
6.输入表中的记录内容
– 当表的结构设计完成后,就可以向表中添加记录了。
Visual Basic 语 言 程 序 设 计
13.1.8 数据库引擎
数据库引擎 Microsoft JET(Joint
Engineering Technologe)是应用程序和数据库之间的一种接口。它把与数据库相关的内存管理、游标管理和错误处理等具体而复杂的细节问题抽象为一个既高度一致又简化的编程接口。对所支持的不同类型的数据库提供统一的外部接口,将对记录集的操作转化成对数据库的物理操作。
Visual Basic 语 言 程 序 设 计
13.2 数据库管理器
VB所支持的不同类型的数据库可以通过相关的数据管理系统来建立,例如在 FoxPro数据库管理系统中可以建立 DBC
结构的数据库,也可以使用 VB的数据库管理器来管理数据库。在 VB开发环境内单击,外接程序,菜单中的,可视化数据管理器,命令或在操作系统桌面上进行 VB系统目录中的 Visdata.exe,都可打开可视数据管理器,它的主屏幕如图 13.1所示。数据管理器,文件,菜单中的命令及功能描述如表 13.4所示。数据管理器,实用程序,菜单中的命令功能描述如表 13.5所示。
【 例 13.1】 建立一个学生基本情况表,来说明使用数据管理器建立 Student.mdb数据库的过程。
Visual Basic 语 言 程 序 设 计
13.3 数据控件
数据 (Data)控件是 VB访问数据库的一种工具,它通过 Microsoft JET数据库引擎接口实现数据访问。
数据控件能够利用三种 Recordset对象来访问数据库中的数据,数据控件提供有限的不需编程而能访问现存数据库的功能,允许将 VB的窗体与数据库方便地进行连接。要利用数据控件返回数据库中记录的集合,应该先在窗体上添加控件,再通过它的三个基本属性 Connect,DatabaseName和
RecordSource的设置,才能访问数据资源。
Visual Basic 语 言 程 序 设 计
13.3.1 数据控件属性
1.Connect属性
– 该属性指定数据控件所要连接的数据库类型,VB可识别的数据库类型如下,
– (1)Microsoft Access的 MDB文件 (缺省值 );
– (2)Borland dBASE,Microsoft FoxPro的 DBF文件 (文件内只包含一张表 );
– (3)Borland Paradox的 DB文件 (文件内只包含一张表 );
– (4)Novell Btrieve的 DDF文件;
– (5)Miscrosoft Excel的 XLS文件;
– (6)Lotus的 WKS文件;
– (7)Open DataBase Connectivity(ODBC)数据库。
Visual Basic 语 言 程 序 设 计
2.DatabaseName属性
该属性指定具体使用的数据库文件名,包括所有的路径名。
如果连接的是单表数据库,则 DatabaseName属性应设置为数据库文件所在的子目录名,而具体文件名放在
RecordSource属性中。 Access数据库的所有表都包含在一个 MDB文件中。
例如,如果要连接一个 Microsoft Access的数据库,D:\
VB1\ Student.mdb,则:设置 DatabaseName="D:\ VB1\
Student.mdb"
例如,如果要连接一个 FoxPro数据库 (数据库名为,教工,DBC‖,表名为,ZGDA.DBF‖),位置在 D:\ VFP1文件夹下,
则:设置 DatabaseName="D:\ VFP1\教工,DBC",RecordSource="zgda.dbf"
Visual Basic 语 言 程 序 设 计
3.RecordSource属性
该属性确定具体可访问的数据表,这些数据构成记录集对象 Recordset。该属性值可以是数据库中的单个表名,或者是一个存储查询,也可以是使用 SQL查询语言的一个查询字符串。
例如,如果要指定 Student.mdb数据库中的,基本情况表,,则:设置 RecordSource="基本情况 "
例如,如果要访问,基本情况表,中所有物理系学生的数据,则:设置
RecordSource="Select*From 基本情况表 Where
专业 ='物理 ' "
Visual Basic 语 言 程 序 设 计
4.RecordsetType属性
该属性确定记录集类型。如果使用
Microsoft Access的 MDB数据库,则应选择
Table类型;如果正在使用其他任何一种类型的数据库,则 RecordsetType属性的记录类型应选择 Dynaset
类型;如果只需要读数据而不更新它,则应选择 SnapShot类型。
Visual Basic 语 言 程 序 设 计
5.ReadOnly属性
该属性用于控制能否对记录集进行写操作。
当 ReadOnly属性设置为 True时,不能对记录集进行写操作。
Visual Basic 语 言 程 序 设 计
6.Exclusive 属性
该属性用于控制被打开的数据库是否允许被其他应用程序共享。如果 Exclusive属性设置为 True,表示该数据库被独占,其他应用程序将不能再打开该数据库。
Visual Basic 语 言 程 序 设 计
7.BofAction和 EofAction属性
当记录指针指向 Recordset对象的开始 (第一个记录前 )或结束 (最后一个记录后 )时,数据控件的 EofAction和
BofAction属性的设置或返回值决定了数据控件要采取的操作。其属性的取值如表 13.8所示。
在 VB中,数据控件本身不能直接显示记录集中的数据,必须通过能与它绑定的控件来实现。可与数据控件绑定的控件对象有文本框、标签、图像框、图形框、列表框、组合框、复选框、网络,DB列表框,DB组合框,DB网格、
DataReport控件和 OLE容器等控件。
要使绑定控件能被数据库约束,必须在设计或运行时对这些控件的两个属性进行设置。
Visual Basic 语 言 程 序 设 计
8.DataSource属性
该属性通过指定一个有效的数据控件连接到一个数据库上。
Visual Basic 语 言 程 序 设 计
9.DataField属性
该属性设置数据库有效的字段与绑定控件建立联系。
当上述控件与数据控件绑定后,VB将当前记录的字段值赋给控件。如果修改了绑定控件内的数据,只要移动记录指针,修改后的数据会自动写入数据库的表中。数据控件在装入数据库时,它把记录集的第一个记录作为当前记录。
当数据控件的 BofAction属性值设置为 2时,记录指针移过记录集末尾,数据控件会自动向记录集加入新的空记录。
【 例 13.2】 设计一个窗体,显示 Student.mdb数据库中基本情况表的内容。
Visual Basic 语 言 程 序 设 计
13.3.2 数据网格控件
VB 6.0提供了几个数据网格控件 (DBGrid)、
(MsFlexGrid)和 (DataGrid)等,可以同时在窗体上显示多个记录,几乎不用编写代码就可以实现多个记录集数据显示。现介绍数据网格控件 (DBGrid)和 (MsFlexGrid)
的使用方法,由于数据网格控件 DataGrid
适合 ADO控件,因此在后面介绍。
Visual Basic 语 言 程 序 设 计
1.数据网格控件 (DBGrid)
DBGrid控件可增强程序的功能和灵活性,它还具有编辑功能:可以进行添加、修改、删除记录等操作。
当把数据网格控件 DBGrid的 DataSource属性设置为一个
Data控件时,网格控件会被自动地填充并且其列标题会用
Data控件记录集里的数据自动地设置。给用户进行浏览和编辑数据库表提供了非常方便的操作方法。
DBGrid控件是一个 ActiveX控件,在,部件,对话框中,
选择添加,Microsoft Data Bound Grid Control‖选项,
即可将该控件添加到工具箱中。
Visual Basic 语 言 程 序 设 计
1.数据网格控件 (DBGrid)
(1)DataSource属性
– 该属性用来设置所要绑定的 Data控件。
(2)AllowAddNew,AllowDelete和 AllowUpdate属性
– AllowAddNew属性,设置为 True,可以添加记录。默认为 False。
– AllowDelete属性,设置为 True,可以删除记录。默认为 False。
– AllowUpdate属性,设置为 True,可以修改记录。默认为 True。
– 说明:
Data控件和 DBGrid控件一起使用,才能构造一个用于访问数据库表的用户界面。
– 【 例 13.3】 用一个数据网格控件 DBGrid,显示 Student.mdb数据库中,成绩表,的内容。
Visual Basic 语 言 程 序 设 计
2.数据网格控件 (MsFlexGrid)
网格控件 (MsFlexGrid)可以实现多个记录集数据显示。当把数据网格控件的 DataSource属性设置为一个 Data控件时,网格控件会被自动地填充并且其列标题会用 Data控件的记录集里的数据自动地设置。为用户进行浏览和编辑数据库表提供了非常方便的操作方法。
MsFlexGrid控件是一个 ActiveX控件,在,部件,
对话框中,选择添加,Microsoft FlexGrid
Control‖选项,即可将该控件添加到工具箱中。
【 例 13.4】 用一个数据网格控件 MsFlexGrid,显示 Student.mdb数据库中基本情况表的内容。
Visual Basic 语 言 程 序 设 计
13.3.3 数据控件的事件
1.Reposition事件
– Reposition事件发生在一条记录成为当前记录后。只要改变记录集的指针使其从一条记录移到另一条记录,会产生 Repostion事件。
通常,可以在这个事件中显示当前指针的位置。
– 例如,在 【 例 13.2】 的 Data1_Reposition事件中加入如下代码,
Private Sub Data1_Reposition()
Data1.Caption=Data1.Recordset.AbsolutePosition+1
End Sub
这里,Recordset为记录集对象,AbsolutePosition属性指示当前指针值 (从 0开始 )。当单击数据控件对象上的箭头时,数据控件的标题区会显示记录的序号,如图 13.12所示。
说明:记录集属性 RecordsetType=1-Dynaset是动态集类型。
Visual Basic 语 言 程 序 设 计
2.Validate事件
当要移动记录指针前、修改与删除记录前或卸载含有数据控件的窗体时触发 Validate事件。
Validate事件检查被数据控件绑定的控件内的数据是否发生变化。它通过 Save参数 (True或 False)
判断是否有数据发生变化,Action参数判断哪一种操作触发了 Validate事件。 Action参数如表
13.12中所示。
一般可用 Validate事件来检查数据的有效性。在
【 例 13.2】 中,如果不允许用户在数据浏览时清空性别数据,可使用下列代码,
Visual Basic 语 言 程 序 设 计
13.3.4 数据控件的常用方法
数据控件的内置功能很多,可以在代码中用数据控件的方法访问这些属性。
– 1.Refresh方法
Refresh方法激活数据控件。如果在设计状态没有为打开数据库控件的有关属性全部赋值,或当 RecordSource属性在运行时被改变后,必须使用激活数据控件的 Refresh方法激活这些变化。在多用户环境下,当其他用户同时访问同一数据库和表时,Refresh方法将使各用户对数据库的操作有效。例如可将
【 例 13.2】 中数据控件的设计参数改用代码实现,
– Private Sub Form_Load()
– Data1.DatabaseName=D:\ VB1\ Student.mdb '连接数据库
– Data1.RecordSource="基本情况表 " '绑定记录集对象
– Data1.Refresh '激活数据控件
2.UpdateControls方法
– UpdateControls方法可以将数据从数据库中重新读到被数据控件绑定的控件内。因而可使用 UpdateControls方法终止用户对绑定控件内数据的修改。
– 例如将代码 Data1.UpdateControls放在一个命令按钮的 Click事件中,就可实现放弃对记录修改的功能。
Visual Basic 语 言 程 序 设 计
3.UpdateRecord方法
使用 UpdateRecord方法可强制数据控件将绑定控件内的数据写入到数据库中而不再触发 Validate事件。当对绑定控件内的数据修改后,数据控件需要移动记录集的指针才能保存修改。在代码中可以用该方法来确认修改。
Visual Basic 语 言 程 序 设 计
13.3.5 记录集的属性与方法
由 RecordSource属性确定的具体可访问的数据构成的记录集 Recordset也是一个对象,因此,它和其他对象一样具有属性和方法。下面列出记录集常用的属性和方法。
– 1.AbsolutePostion属性
AbsolutePostion返回当前指针值,如果是第 1条记录,其值为
0,该属性为只读属性。
– 2.Bof和 Eof的属性
Bof判定是否在首记录之前,若 Bof为 True,则当前位置位于记录集的第 1条记录之前。与此类似,Eof判定是否在末记录之后。
Bof和 Eof属性具有以下特点,
Visual Basic 语 言 程 序 设 计
Bof和 Eof属性具有以下特点,
(1)如果记录集中没有记录,则 Bof和 Eof的值都是
True。
(2)当 Bof或 Eof的值成为 True之后,只有将记录指针移动到实际存在的记录上,Bof或 Eof属性值才会变为 False。
(3)若 Bof或 Eof为 False,而且记录集中惟一的记录被删除掉,那么属性将保持 False,直到试图移到另一个记录为止,这时 Bof和 Eof属性都将变为
True。
(4)当创建或打开至少含有一个记录的记录集时,
第 1条记录将成为当前记录,而且 Bof和 Eof属性均为 False。
Visual Basic 语 言 程 序 设 计
3.Bookmark属性
Bookmark属性的值采用字符串类型,用于设置或返回当前指针的标签。在程序中可以使用 Bookmark属性重定位记录集的指针,
但不能使用 AbsolutePostion属性。
Visual Basic 语 言 程 序 设 计
4.Nomarch属性
在记录集中进行查找时,如果找到相匹配的记录,则 Recordset的 NoMarch属性为
False,否则为 True。该属性常与 Bookmark
属性一起使用。
Visual Basic 语 言 程 序 设 计
5.RecordCount属性
RecordCount属性对 Recordset对象中的记录计数,该属性为只读属性。在多用户环境下,RecordCount属性值可能不准确,为了获得准确值,在读取 RecordCount属性值之前,可使用 MoveLast方法将记录指针移至最后一条记录上。
Visual Basic 语 言 程 序 设 计
6.Move方法
使用 Move方法可代替对数据控件对象的 4个箭头的操作,
可以浏览整个记录集中的记录。 5种 Move方法是,
– (1)MoveFirst方法:移至第 1条记录。
– (2)MoveLast方法:移至最后一条记录。
– (3)MoveNext方法:移至下一条记录。
– (4)MovePrevious方法:移至上一条记录。
– (5)Move[ n]方法:向前或向后移 n条记录,n为指定的数值。
– 对于表类型、动态集类型和快照类型的 Recordset对象,可以使用上述所有的方法。对于仅向前类型的记录集,只能使用 MoveNext
和 Move方法。若要对仅向前类型的记录集使用 Move方法,那么指定移动行数的参数必须为正整数。
– 【 例 13.5】 在窗体上用 4个命令按钮代替
– 【 例 13.2】 数据控件对象的 4个箭头的操作。
Visual Basic 语 言 程 序 设 计
7.Find方法
使用 Find方法可在指定的 Dynaset或 SnapShot类型的 Recordset对象中查找与指定条件相符的一条记录,并使之成为当前记录。 4种 Find方法是,
– (1)FindFirst方法:从记录集中查找满足条件的第 1条记录。
– (2)FindLast方法:从记录集中查找满足条件的最后一条记录。
– (3)FindNext方法:从当前记录开始查找满足条件的下一条记录。
– (4)FrindPrevious方法:从当前记录开始查找满足条件的上一条记录。
Visual Basic 语 言 程 序 设 计
4种 Find方法的语法格式相同,
格式:数据集合,Find 方法条件
功能:从记录集中查找满足条件的记录。
说明:
– 如果 Find方法找到相匹配的记录,则记录定位到该记录,
Recordset的 NoMatch属性为 False,如果 Find方法找不到相匹配的记录,NoMatch属性为 True,并且当前记录还保持在 Find方法使用前的那条记录上。
– 若 Recordset包括多条与条件相匹配的记录,FindFirst定位于满足条件记录中的第 1条记录,FindNext定位于下一条满足条件的记录,以此类推。可以在 Find操作后跟 Move操作,例如 MoveNext,
它将移到下一条记录,而不管是否满足匹配条件。
– 搜索条件是指定字段值与常量关系的字符串表达式,除了可用普通的关系运算符构成外,还可以用 Like运算符构成。查找条件常有以下几种形式:
Visual Basic 语 言 程 序 设 计查找条件常有以下几种形式:
(1)如果在由 Data1数据控件所连接的数据库 Student.mdb
的记录集内查找专业为,物理,的第 1条记录。,专业,
为数据库 Student记录集中的字段名。
Data1.Recordset.FindFirst "专业 ='物理 '"
(2)查查找下一条符合条件的记录,可用下面的语句,
– Data1.Recordset.FindNext "专业 ='物理 '"
(3)条件部分也可以用已赋值的字符型变量。
– A1="专业 ='物理 '"
– Datal.Recordset.FindNext A1
– 如果条件部分的常数来自变量,例如,A2="物理 ",则条件表达式必须写成如下形式:
A1="专业 =" & " ' " & A2 & " ' "
这里,符号 &为字符串连接运算符,它的两侧必须加空格。
Visual Basic 语 言 程 序 设 计查找条件常有以下几种形式:
(4)如果在数据库 Student.mdb的记录集内查找姓名中带有,刘,字的,则条件表达式必须写成如下形式:
– Data1.Recordset.FindFirst "姓名 Like '刘 *'
"
(5)Find方法进行的查找在缺省情况下是与大小写无关的。要改变缺省查找方法,可以在窗体的专用声明部分或声明模块中使有下列语句,
– Option Compare Test '与大小写无关
– Option Compare Binary '与大小写相关
Visual Basic 语 言 程 序 设 计
8.Seek方法
格式:数据表对象,Seek 比较运算符,key1,key2…
功能:在索引文件中查找记录。在 Table表中查找与指定索引规则相符的第 1条记录,并使之成为当前记录。
说明:
– (1)使用 Seek方法必须打开表的索引。
– (2)比较运算符确定比较的类型。
– 表 13.13列出了 Seek方法中可用的比较运算符。当比较运算符为 =、
>=,>,<>时,Seek方法从索引开始处出发向后查找。当比较运算符为 <,<=时,Seek方法从索引尾部出发向前查找。
Visual Basic 语 言 程 序 设 计表 13.13 Seek方法中可用的运算符
– 运算符 描 述
– = 等于指定的键值
– >= 大于或等于指定的键值
– > 大于指定的键值
– <> 不等于指定的键值
– <= 小于或等于指定的键值
– < 小于指定的键值
Visual Basic 语 言 程 序 设 计说明:
(3)keyn参数可以是一个或者多个值,分别对应于记录集当前索引中的字段值。 Microsoft Jet用这些值与 Recordset对象的记录进行比较。
(4)在使用 Seek方法定位记录时,必须通过 Index属性设置索引。若在同一个记录集中多次使用同样的 Seek方法 (参数相同 ),那么找到的总是同一条记录。
例如,假设数据库 Student内,基本情况表,的索引字段为学号,索引名称 No,则查找表中满足学号字段值大于 031102的第 1条记录可使用以下代码:
– Data1.RecordsetType=0 '设置记录集类型为
Table
– Data1.RecordSource="基本情况表 " '打开基本情况表
– Data1.Refresh '激活数据控件
– Data1.Recordse.Index="No" '打开名为 No的索引
– Data1.Recordset.Seek ">",030201 '设置记录集类型为
Table
Visual Basic 语 言 程 序 设 计
13.3.6 数据库记录的增删改操作
Data控件只是浏览表和编辑表。记录的增加、删除或修改操作,必须使用
AddNew,Delete,Edit,Update,Refresh
方法。
– 格式:数据控件,记录集,方法名
– 功能:引用数据控件中记录集的记录的
AddNew,Delete,Edit,Update,Refresh方法。
Visual Basic 语 言 程 序 设 计例如:
– Data1.Recordset.AddNew '引用追加记录方法
– Data1.Recordset.Delete '引用删除记录方法
– Data1.Recordset.Edit '引用编辑记录方法
– Data1.Recordset.Update '引用更新记录方法
– Data1.Recordset.Refresh '引用刷新记录集方法
Visual Basic 语 言 程 序 设 计
1.增加记录
AddNew方法将记录添加到数据表中,添加记录的操作分为三步,
– (1)调用 AddNew方法。
– (2)给各字段赋值。
格式,Recordset.Fields("字段名 ")=值。
– (3)调用 Update方法,确定所做的操作,将缓冲区内的数据写入数据库表中。
如果使用 AddNew方法添加新的记录,但是没有使用 Update方法而移动到其他记录,或者关闭了记录集,那么所做的输入将全部丢失,而且没有任何警告。
Visual Basic 语 言 程 序 设 计
2.删除记录
从记录集中删除记录的操作分为三步,
– (1)定位被删除的记录使之成为当前记录。
– (2)调用 Delete方法。
– (3)移动记录指针。
在使用 Delete方法时,当前记录立即删除,不加任何的警告或者提示。删除一条记录后,它还是当前记录,被数据库所约束的控件仍旧显示该记录的字段。因此,必须移至记录集的另一记录上,
一般移至下一记录。如果被删除的记录为最后一条记录,应该检查 Eof属性。
Visual Basic 语 言 程 序 设 计
3.编辑记录
数据控件自动提供了修改现有记录的能力,在直接改变被数据库所约束控件的内容后,需要单击数据控件对象的任一箭头来改变当前记录,确定所做的修改。也可通过程序代码来修改记录,使用程序代码来修改记录集中当前记录的操作分为四步,
– (1)定位要修改的记录使之成为当前记录。
– (2)调用 Edit方法。
– (3)给各字段赋值。
– (4)调用 Update方法,确定所做的修改。
– 如果要放弃对数据的所有修改,可用 Refresh方法,重读数据库表,
刷新记录集。由于没有调用 Update方法,修改的数据没有写入数据库表中,所以这样的记录会在刷新记录集时丢失。
Visual Basic 语 言 程 序 设 计
4.输入照片
数据表中的照片输入的方法较为简单,在窗体中添加一个图像框、一个通用对话框和一个命令按钮。命令按钮的单击事件过程代码如下:
– Private Sub ComPicture_Click()
– CMDialog1.Action=1
– Image1.Picture=LoadPicture(CMDialog1.FileName)
– End Sub
– 【 例 13.6】 在 【 例 13.2】 的基础上增加 5个按钮,追加、
删除、修改、放弃和查找,如图 13.14所示。 5个命令按钮属性设置如表 13.14所示。
Visual Basic 语 言 程 序 设 计
13.4 结构化查询语言 (SQL)
结构化查询语言 SQL是 Structure Query Language
的缩写,它是操作数据库的标准语言。 SQL语言是一种声明语言,而 Basic是过程语言,在声明语言中,指定要做什么而不是怎么做。不需要告诉 SQL
如何访问数据库,只要告诉 SQL需要数据库做什么。
利用 SQL可以确切指定想要检索的记录以及按什么顺序检索。可以在设计或运行时对数据控件使用
SQL语句。用户提出一个查询,数据库返回所有与该查询匹配的记录。
Visual Basic 语 言 程 序 设 计
13.4.1 SQL的常用命令
下面介绍最常用的 SQL命令和关键字。表 13.15列出了常用的 SQL命令。
表 13.15 常用的 SQL命令
– 命 令 功 能
– Create 创建新的表、字段和索引
– Delete 在数据库表中删除记录
– Insert 在数据库表中添加新的数据行
– Select 在数据库中选择满足特定条件的记录
– UpDate 更新数据库表中的数据
– SQL命令中的子句是用来修改条件的,这些条件被用来定义要选定或要操作的数据。表 13.16列出了可用的子句。
Visual Basic 语 言 程 序 设 计表 13.16 常用的 SQL命令子句
– 子 句 功 能 举例
– Select 查询数据库数据 Select 字段表
– From 为从其中选定记录的表命名 From 表清单
– Where 指定所选记录必须满足的条件 Where 查询条件
– Group By 把选定的记录分组 Group By 分组字段
– Having 进行分组过滤处理 Having 分组条件
– Order By 对查找出来的记录进行排序 Order By 字段
[ ASC|DESC]
– 在 SQL中,最常使用的是从数据库中获取数据。从数据库中获取数据称为查询数据库,查询数据库通过使用
Select语句来实现。
Visual Basic 语 言 程 序 设 计
13.4.2 Select语句格式与功能
格式,Select〈 字段表 〉 From 〈 表清单 〉 Where〈 查询条件 〉
功能:在指定的表中,按查询条件,来查询满足条件的记录。
说明:
– (1)字段表:包含了查询结果要显示的字段清单,字段之间用逗号分开。
如果要选择表中所有字段,可用星号 (*)代替字段表。如果所选定的字段要更名,可在该字段后用 AS[新名]实现。如果所选定的字段或表名中含有空格,则要将名称用方括号括起来。
– (2)From子句:用于指定一个或多个表,如果所选择的字段来自不同的表,
则字段名前应加表名前缀。
– (3)表清单:表示一个或多个数据表。
– (4)Where子句:限制记录的选择。构造查询条件可使用大多数的 VB内部函数和运算符,以及下列 SQL特有的运算符构成表达式。
Visual Basic 语 言 程 序 设 计
SQL特有的运算符构成表达式,
① 字段名 Between 值 1 AND 值 2
– 返回字段名的值在值 1和值 2之间的行。
②字段名 IN(值 1,值 2,… )
– 返回字段名的值为括号所列的数值之一的行。
③ #date#
– 指定一个日期表达式。
④ Like
– 通过样式字符串选择行。用 Like进行匹配时,可使用表 13.17所示的字符。
可在 Select子句内使用合计函数对记录进行操作,它返回一组记录的单一值。例如,AVG函数可以返回记录集的特定字段中所有值的平均值。表 13.18列出了合计函数。
Visual Basic 语 言 程 序 设 计表 13.18 合计函数
– 函数 功 能
– Avg 获得特定字段中的值的平均数
– Count 返回选定记录的个数
– Sum 返回特定字段中所有值的总和
– Max 返回指定字段中的最大值
– Min 返回指定字段中的最小值
Visual Basic 语 言 程 序 设 计
13.4.3 使用 SQL
1.使用 Select语句查询
– 例如,从,基本情况表,中筛选数据。
– (1)控件 Text1中输入了某一专业,显示所有的字段内容。
"Select * From 基本情况表,Where专业 ='" & Text1 & "'"
注意,字符类型的变量要用单引号将变量值括起来。
– (2)选择姓名为,于小天,的记录,显示所有字段内容。
"Select * From 基本情况表,Where(姓名 ='于小天 ')"
– (3)选择姓名为,孙,的所有记录,显示姓名和性别字段内容。
"Select 姓名,性别 From 基本情况表,Where(姓名 Like '孙
*')"
在 Select语句中较常用 Order By子句和 Top谓词。
Visual Basic 语 言 程 序 设 计
2.Order By子句
该子句用来查找出来多个记录的排列顺序。
在 Order By子句中,可以指定多个字段进行排序,各字段之间用逗号隔开。 Order
By子句中的 ASC选项表示升序排列,DESC选项表示降序排列。
例如:查找所有姓,王,的记录,并且以数学成绩升序排列。
– Select * From 成绩表 Where(姓名 Like
'王 *') Order By 数学 ASC
Visual Basic 语 言 程 序 设 计
3.Top谓词
在使用 Select语句选择记录时,满足条件的记录可能有多个,使用 Top谓词可以返回指定数量的记录。且这些记录位于 Order By子句指定的范围的前面或后面,可使用 TOP谓词。
例如:在查找所有姓,王,的记录,并且以数学成绩升序排列,只返回前两个满足条件的记录。
– Select Top 2 * From 基本情况表 Where(姓名
Like '王 *') Order By 数学 ASC
– 如果不使用 Order By子句对记录排序,则从所有满足条件的记录中随机返回两个记录。
Visual Basic 语 言 程 序 设 计
4.使用 SQL操作数据库
使用 ADO控件和数据网格 DataGrid,必须设置 RecordSource属性,基操作步骤如下:
– (1)在属性窗口中,选择,RecordSource‖,单击,…‖ 按钮,屏幕出现
,属性页,的对话框,如图 13.15所示。
– (2)在,命令类型,框中,选择,8—adCmdanknown‖。
– (3)在,表或存储过程名称,框中,选择 Student.mdb数据库中的,成绩表,。
– (4)在,命令文本,框中,输入,Select * From 成绩表,。
– (5)单击,确定,按钮,关闭记录源属性页。
– 使用 ADO控件连接数据库的具体步骤,请参见下一节。
– 【 例 13.7】 设计一个程序,使用 SQL在学生数据库 Student的,成绩表,
中查询,(1)按学号询查记录; (2)查询数学成绩大于 80分的记录,并按数学成绩升序排序。
– 【 例 13.8】 将 【 例 13.6】 中的查找功能改用 SQL语句处理,显示某专业的学生记录。
Visual Basic 语 言 程 序 设 计
13.5 ADO数据控件
ADO是 ActiveX Data Object的缩写。 ADO是微软公司数据库应用程序开发的新接口,
是微软公司新的数据访问技术,是建立在
OLE DB之上的的高层数据库访问技术。 OLE
DB是一个低层的数据访问接口,用它可以访问各种数据源,包括传统的关系数据库等。
Visual Basic 语 言 程 序 设 计
13.5.1 ADO对象模型
ADO对象模型定义了一个可编程的分层对象集合,主要由三个对象成员 Connection、
Command和 Recordset,以及几个集合对象
Errors,Parameters和 Fields等所组成。
图 13.20示意了这些对象彼此之间的关系。
表 13.19是这些对象的分工描述。
Visual Basic 语 言 程 序 设 计表 13.19 ADO对象描述
– 对象名 描 述
– Connection 连接数据来源
– Command 从数据源获取所需数据的命令信息
– Recordset 所获取的一组记录组成的记录集
– Error 在访问数据时,由数据源所返回的错误信息
– Parameter 与命令对象相关的参数
– Field 包含了记录集中某个字段的信息
要想在程序中使用 ADO对象,必须先为当前工程引用 ADO的对象库。引用方法是执行工程菜单的引用命令,启动引用对话框,在清单中选取
,Microsoft ActiveX Data Object 2.0 Library‖
项目。
Visual Basic 语 言 程 序 设 计
13.5.2 ADO控件的常用属性
在使用 ADO数据控件前,必须先通过,工程
/部件,菜单命令选择,Microsoft ADO
Data Control 6.0(OLE DB)‖选项,将 ADO数据控件添加到工具箱。 ADO数据控件与 VB的内部数据控件很相似,它允许使用 ADO数据控件的基本属性快速地创建与数据库的连接。
– 1.ConnectionString属性
ConnectionString属性包含了用于与数据源建立连接的相关信息。 ConnectionString属性带有 4个参数如表 13.20所示。
Visual Basic 语 言 程 序 设 计表 13.20 ConnectionString属性参数
– 参数 功 能
– Provide 指定数据源的名称
– FileName 指定数据源所对应的文件名
– RemoteProvide 在远程数据服务器打开一个客户端时所用的数据源名称
– RemoteServer 在远程数据服务器打开一个主机端时所用的数据源名称
Visual Basic 语 言 程 序 设 计
13.5.2 ADO控件的常用属性
2.RecordSource属性
– RecordSource确定具体可访问的数据,这些数据构成记录集对象 Recordset。该属性值可以是数据库中的单个表名,一个存储查询,也可以是使用 SQL查询语言的一个查询字符串。
3.ConnectionTimeout属性
– 用于数据连接的超时设定,若在指定时间内连接不成功显示超时信息。
4.MaxRecords属性
– 定义从一个查询中最多能返回的记录数。
Visual Basic 语 言 程 序 设 计
13.5.3 ADO控件连接数据库
下面通过使用 ADO数据控件连接
Student.mdb来说明 ADO数据控件的使用。
– (1)在窗体上放置 ADO数据控件,控件名采用默认名,Adodc1‖
– (2)选择,Adodc1‖控件,单击属性窗口中的
ConnectionString属性右边的,…‖ 按钮,屏幕弹出,属性页,对话框,如图 13.21所示。
Visual Basic 语 言 程 序 设 计
―Adodc1‖控件,
① ―使用 Data Link文件,,表示通过一个连接文件来完成。在 Windows桌面上创建数据连接文件的过程为,·用鼠标右键单击桌面,在弹出的快捷菜单中,选择,新建,子菜单的,Microsoft数据链接,命令;
– ·桌面上产生一个数据链接文件图标,命名链接文件名;
– ·用鼠标右键单击图标,执行快捷菜单中的,属性,命令;
– ·在打开的属性对话框中,通过提供者与链接选项卡链接指定的数据库。
Visual Basic 语 言 程 序 设 计
―Adodc1‖控件,
② ―使用 ODBC数据资源名称,,可以通过下拉菜单选择某个创建好的数据源名称 (DSN)作为数据来源。
③,使用链接字符串,只需要单击,生成,按钮,通过选项设置自动产生连接字符串的内容。
(3)采用,使用链接字符串,方式连接数据源。单击,生成,按钮,打开数据连接属性窗体,如图 13.22所示。在,提供者,选项卡内,选择一个合适的
OLE DB数据源,由于用 Student.mdb 是 Access数据库,故选择 Microsoft
Jet 3.51 OLE DB Provider。然后单击,下一步,,屏幕显示,连接,选项卡,在,选择或输入数据库名称,框下,选择或输入数据库文件名,这里选择 Student.mdb。为保证连接有效,可单击右下方的,测试连接,按钮,如果测试成功,单击,确定,按钮,则关闭 ConnectionString属性页对话框。
(4)单击属性窗口的 RecordSource属性右边的,…‖ 按钮,屏幕弹出,属性页,
对话框,如图 13.23所示。
– 在,命令类型,下拉列表中,选择,2-adCmdTable‖选项,在,表或存储过程名称,
下拉列表中,选择 Student.mdb数据库中的,基本情况表,,单击,确定,按钮,
关闭,记录源,的,属性页,。此时,已完成了 ADO数据控件的连接工作。
– 由于 ADO数据控件是一个 ActiveX控件,也可以用鼠标右键单击 ADO数据控件,在弹出的快捷菜单中,选择,ADODC属性,菜单命令,打开 ADO数据控件属性页窗口,
如图 13.24所示,一次完成 (1)~ (4)的全部设置。
Visual Basic 语 言 程 序 设 计
13.5.4 ADO控件上新增绑定控件
随着 ADO对象模型的引入,VB 6.0除了保留以往的一些数据连接控件外,又提供了一些新的成员来连接不同数据类型的数据。这些新成员主要有 DataGrid、
DataCombo,DataList,DataReport,MSHFlexGrid和 MonthView等控件。
在绑定控件上不仅对 DataSource和 DataField属性在连接功能上作了改进,又增加了 DataMember与 DataFormat属性使数据访问的队形更加完整。
DataMember属性允许处理多个数据集,DataFormat属性用于指定数据内容的显示格式。
【 例 13.9】 用 ADO数据控件和网格控件 DataGrid,显示学生数据库 Student的
,基本情况表,的内容。如图 13.25所示。所用控件的属性设置如表 13.21所示。
【 例 13.10】 将 【 例 13.6】 用 ADO数据控件,显示学生数据库 Student的,基本情况表,。 13.5.5 数据窗体向导
VB 6.0提供了一个功能强大的数据窗体向导,通过几个交互过程,便能建立一个访问数据的窗口。数据窗体向导属于外接程序,在使用前必须执行,外接程序,菜单的,外接程序管理器,命令,按图 13.27所示的选项,装入
,VB6数据窗体向导,到,外接程序,菜单中。以 Student.mdb数据库的,基本情况表,作为数据源来说明数据访问窗口建立的过程。
Visual Basic 语 言 程 序 设 计数据访问窗口建立的过程,
(1)配置文件。执行,外接程序,菜单中的,数据窗体向导,命令,屏幕进入,数据窗体向导 —介绍,窗体,如图 13.28所示,可以利用先前建立的数据窗体信息配置文件,创建外观相似的数据访问窗体,
选择,无,,将不使用现有的配置文件。
(2)选择数据库类型。单击,下一步,,屏幕进入,数据窗体向导 —
数据库类型,窗体,可以选择任何版本的 Access(Jet)数据库或任何
ODBC兼容的数据库 (用于远程访问 )。本例中选择 Access。
(3)选择数据库。单击,下一步,,屏幕进入,数据窗体向导 —数据库,窗体,选择具体的数据库文件。例如,选择,D:\ vb1\Student.mdb‖。
(4)选择窗体的形式。单击,下一步,,屏幕进入,数据窗体向导 —
Form‖窗体,设置应用窗体的工作特性。如图 13.29所示。
,窗体名称,栏:用于输入将要创建的窗体名。
Visual Basic 语 言 程 序 设 计
―窗体布局,栏:
指定窗口内数据显示的类型:
– ①,单条记录,,一页显示一个记录;
– ②,网格 (数据表 )‖:同时显示多条记录;
– ③,主表/细表,,数据网格形式,显示父子表的记录;
– ④,MS HFlexGrid‖:数据网格形式,同时显示多条记录;
– ⑤,MS Chart‖:以图表形式显示数据。
Visual Basic 语 言 程 序 设 计
―绑定类型,框:
用于选择连接数据来源的方式:
– ①,ADO数据控件,,可以使用 ADODC数据控件访问数据;
– ②,ADO代码,,可以使用 ADO对象程序代码访问数据;
– ③,类,,可以使用 ADO对象类访问数据。
例如,选择,单条记录,形式,使用,ADO数据控件,访问数据。
– (5)选择数据表和可用字段。单击,下一步,,屏幕进入,数据窗体向导 —记录源,窗体,可以选择所需要的数据表和可用字段,如图 13.30所示。
,记录源,栏:选择数据库中的数据表。
,可用字段,栏:选择所需要的字段。可以用窗口中间的 4个按钮,选定字段。
,列排序按,栏:用于选择排序依据。
Visual Basic 语 言 程 序 设 计
(6)选择操作按钮
单击,下一步,,屏幕进入,数据窗体向导 —控件选择,窗体,如图 13.31所示,选择所创建的数据访问窗体需要提供哪些操作按钮。
Visual Basic 语 言 程 序 设 计
(7)向导完成
单击,下一步,,屏幕进入,数据窗体向导 —已完成 !‖窗体,如图
13.32所示,可以将整个操作过程保存到一个向导配置文件 (.rwp)中。
单击,完成,按钮,结束数据窗体向导的交互,此时向导将自动产生数据访问窗体的画面及代码。
【 例 13.12】 在向导的 Form窗体中,选择,网格 (数据表 )‖,同时显示多条记录,建立数据网格形式数据访问窗体,如图 13.34所示。
【 例 13.13】 在向导的 Form窗体中,选择,主表/细表,形式,以
,基本情况表,作为主表,学生,成绩表档案表,为细表,建立数据访问窗体,图 13.35所示。
【 例 13.14】 在向导的 Form窗体中,选择,MS HFlexGrid(数据网格 )‖,
同时显示多条记录,建立 MS HFlexGrid数据网格形式数据访问窗体,
如图 13.36所示。
【 例 13.15】 利用 ADO控件和数据网格控件 DataGrid,显示数据库
(Student.Mdb)的,成绩表,,单击,计算,按钮,将计算总分和平均分,单击,清除,按钮,将清除总分和平均分。如图 13.37所示。