第 十 二 章 数 据 库 技 术
本 章 主 要 内 容
?数据库基础
?结构化查询语言 SQL
?数据管理器
?Data控件
?ADO数据控件
?数据报表
?数据库应用实例
12.1 数据库基础
? 数据库的概念
数据库 ( Database),是指按一定组织方式存储在一起的、相互有
关的若干个数据的集合。
数据库管理系统 ( Database Management System),是一种操纵
和管理数据库的大型软件,简称 DBMS,例如 Access或 Microsoft
SQL Server等。
数据库类型, 按数据的组织方式不同,可以分为网状数据库、层次数
据库和关系型数据库。其中应用最普遍的是关系型数据库。
数据库应用程序, 数据库应用程序是指以数据库为基础,用 VB或其他
开发工具开发的、实现某种具体功能的程序。数据库应用程序利用数
据库管理系统提供的各种手段来访问数据库及其中的数据。
12.1 数据库基础
? 关系型数据库
关系型数据库是支持关系模型的数据库系统,是根据表、记录和字段之间
的关系进行组织和访问的一种数据库,它通过若干个二维表( Table)来
存储数据,并且通过关系( Relation)将这些表联系在一起。
表 ( Table),将相关的数据按行和列的形式组织成二维表格的形式
即为表。关系数据库包含一个或多个表,表是数据的集合。表是一种
数据对象,它可以有许多属性,这些属性构成了表的结构。表 12-1 出
版社基本信息表
字段 ( Field),数据库表中的每一列称为字段。字段是标记实体属性
的符号集。表是由其包含的各个字段定义的,字段规定了数据的特征。
创建一个数据库表时,要设臵每个字段的数据类型、最大长度和其他
一些属性。字段可以包含各种字符、数字或图形。
12.1 数据库基础
记录 ( Record),对于关系型数据库,表中的每一行称为记录,记录是
多个字段的集合。记录是一组用于存储数据的相关字段的有序集合。
关键字,如果表中的某个字段或多个字段的组合能够唯一地确定一个记
录,则称该字段或多个字段组合为候选关键字。例如,在“出版社基本
信息表”中的“出版社代码”可以作为候选关键字,因为对于每个出版
社来讲,出版社代码是唯一的。一个数据库表中可以有多个候选关键字,
但只能有一个候选关键字作为主关键字。主关键字必须有一个唯一的值,
且不能为空值。
表间的关系,关系就是定义两个表如何相互联系的方式。数据库可以由
多个表组成,表与表之间可以用不同的方式相互关联。
索引,索引就是关键字的值到记录位臵的一张转换表。查找数据时,数
据库管理系统先从索引文件上找到信息的位臵,再根据指针从表中读取
数据。这种方法可以快速地找到有关的信息。
12.2 结构化查询语言 SQL
? SQL语句简介
SQL语句是由命令、子句、运算符和合计函数构成,这些元素结合起来组成语
句,用来创建、更新和操作数据库。
SQL命令, 任何 SQL命令都是以 SELECT,CREATE,DROPO,ALTER、
INSERT,DELETE或 UPDATE几种命令开头。
SELECT命令, 用于在数据库中查找满足特定条件的记录,它是所有 SQL命
令中最常用的一个命令。
CREATE,DROP和 ALTER命令, 用于操纵整个表。其中 CREATE命令用于创建
新的表、字段和索引,DROP命令用来删除数据库中的表和索引,ALTER命令
通过添加字段或改变字段定义来修改表。
INSERT,DELETE和 UPDATE命令, 主要适用于单个记录。其中 INSERT命令用于
在数据库中用单一的操作添加一个记录,DELETE命令用于删除数据库表中已
经存在的一个记录,UPDATE命令用来修改特定记录或字段的值。
12.2 结构化查询语言 SQL
SQL子句:子句是用来指定条件的,这些条件被用来定义要选定或要操
作的数据。
FROM,指定从其中选定记录的表的名称
WHERE,指定所选记录必须满足的条件
GROUP BY,把选定的记录分成特定的组
HAVING,说明每个组需要满足的条件
ORDER BY,按特定的次序将记录排序
12.2 结构化查询语言 SQL
合计函数:在 SELECT子句中使用合计函数可以对一组数值进行各种不同的
统计,它返回应用于一组记录的单一值。
AVG,获得特定字段中的值的平均数
COUNT,返回选定记录的个数
SUM,返回选定字段中所有值的总和
MAX,返回指定字段中的最大值
MIN,返回指定字段中的最小值
12.2 结构化查询语言 SQL
? 常用的 SQL语句
SELECT语句,从数据库中获取符合条件的数据称为查询,是数据库应用程序中最
常用的操作,在 SQL中查询是由 SELECT语句来实现的,其格式为,
SELECT [ALL/DISTINCT] 选定项 FROM 表名 [WHERE 条件表达式 ]
[GROUP BY 分组字段 ] [HAVING 分组条件 ] [ORDER BY 排序字段 [ASC/DESC]]
– 选定项,指定在查询结果中生成的字段,是 FROM子句所含表中的字段名称,多个
字段之间用逗号分开。若选择所有字段,可用 ( *) 代替。如果字段来自不同表,
则字段名前应加表名前缀,并用逗号分隔。
– ALL,选择符合 SQL语句中条件的全部记录。
– DISTINCT,省略选择字段中包含重复数据的记录。
– FROM子句,于指定一个或多个表,以确定字段的来源。
– WHERE子句,用于所选定记录满足的条件。
– GROUP BY 和 HAVING子句,用于对记录分组,使用指定的条件对某些字段的值
相同的记录进行分类,并把在指定字段列表中有相同值的记录合并成一条记录。
– HAVING子句要和 GROUP BY子句一起使用 。当后者完成了记录分组后,前者句
就显示出由 GROUP BY子句分组并且满足 HAVING子句条件的所有记录。
– ORDER BY子句,按一个或多个(最多 16个)字段排序查询的结果,可以是升序
( ASC)或降序( DESC),默认是升序。
– 在上述 SQL语句中,SELECT子句和 FROM子句是必须的。
12.2 结构化查询语言 SQL
? 例 12-1:查询每个出版社的图书出版情况
出版社信息存放在, 出版社基本信息表, 中,图书出版情况存放在, 图书信息
表, 中,所以本查询实际上涉及, 出版社基本信息表, 与, 图书信息表, 两个
表。这两个表之间的联系是通过公共属性, 出版社代码, 实现的。
命令,
SELECT 出版社基本信息表,出版社名称,图书信息表,图书名称,图书信息表,定价
FROM 图书信息表,出版社基本信息表
WHERE 图书信息表,出版社代码 =出版社基本信息表,出版社代码
12.2 结构化查询语言 SQL
? 例 12-2:计算所有图书的平均价格。
SELECT AVG(定价)
FROM 图书信息表
? 例 12-3,按定价从低到高列出电子工业
出版社出版的所有图书的图书名称及定价。
SELECT 图书名称,定价
FROM 图书信息表
WHERE 出版社代码 =”0001”
ORDER BY 定价
12.2 结构化查询语言 SQL
DELETE语句
可以使用 SQL语句中的 DELETE命令创建删除查询来删除表中的记录,其语法如下,
DELETE FROM 表名 [WHERE 条件 ]
当要删除许多记录时,DELETE 语句是非常有用的。一旦用删除了记录,就无法
再恢复了。为了防止误删除,应先使用相同条件的选择查询,进行检查确认后,
再实施删除操作。
?例 12-4,删除图书信息表中所有定价高于 40元的图书。
DELETE
FROM 图书信息表
WHERE 定价 >40
12.2 结构化查询语言 SQL
UPDATE语句
可以更改表中一个或多个记录的字段的值。其语如下,
UPDATE 表名
SET 字段 =表达式 [,字段 =表达式 ]……
[WHERE 条件 ]
?例 12-5,将清华大学出版社出版的所有图书定价下调 5元。
UPDATE 图书信息表
SET 定价 =定价 -5
WHERE 出版社代码 =“0002”
12.2 结构化查询语言 SQL
INSERT 语句
使用 INSERT语句可以向一个表中插入一条记录。其语法如下,
INSERT
INTO表名 [(字段 1[,字段 2…] ) ]
VALUES(表达式 1[,表达式 2]… )
?例 12-6 向图书信息表插入一条记录。
INSERT
INTO 图书信息表(出版社代码,图书名称,定价)
VALUES( "0003","计算机文化基础 ",20)
12.3 数据管理器
? 开发数据库应用程序,首先要建立数据库,在 Visusl Basic 6.0提供了
一个非常方便的设计工具 —— 可视化数据管理器( Visual Data
Manager),使用可视化数据管理器可以方便地建立数据库,添加表
以及对表进行修改等等。
启动可视化数据管理器
在 Visusl Basic 6.0集成开发环境中选择, 外接程序, 菜单下的, 可视化数
据管理器, 选项,出现如图所示的可视化数据管理器主窗口。
12.3 数据管理器
? 创建数据库,利用可视化数据管理器,可创建各种 VB支持的数据库。在管
理器界面中的选择“文件” |,新建”命令,从弹出的菜单选项中,选择要
创建的数据库类型。这里以创建一个 Microsoft Access类型的数据库为例,
说明其具体步骤,
在可视化数据管理器窗体中选择“文件” |,新建” |“Microsoft
Access”|“Version7.0 MDB” 命令。(见下页图一)
从弹出的“选择要创建的 Microsoft Access数据库”对话框,键入数据库名入
PublishData,选择存储数据库的路径为 C:\VB98。(见下页图二)
单击“保存”按钮,系统将自动创建所需的数据库,同时将它以磁盘文件的形
式存储起来。随后在可视化数据管理器的主窗口出现“数据库窗口”和,SQL语
句”两个窗体。 (见下页图三)
打开一个已存在的数据库:在可视化数据管理器窗口中选择“文件” |,打开数
据库” |“Microsoft Access” 命令,将显示“打开 Microsoft Access数据库”
对话框。在对话框中选择要打开的数据库,单击“打开”按钮即可。
图一 新建 Access数据库文件
图二 数据库文
件路径与文件名
图三 可视化数据管理器
12.3 数据管理器
? 添加数据库表
在建立数据库以后,还需要在数据库中创建数据库表。用可视化数据管理器在刚才
建立的数据库中添加表的具体步骤如下,
右击“数据库窗口”,然后从快捷菜单中选择“新建表”命令。
弹出“表结构”对话框,利用该对话框可以创建、查看和修改表结构。
“表结构”对话框中指定要创建的表名,
出版社基本信息表。
单击“添加字段”按钮,添加新的字段,
并设臵各项的相关属性。
12.3 数据管理器
?, 添加字段”对话框
在“名称”文本框中输入字段的名称。例如输入,出版社名称,,然后设臵该字段
的类型和大小(例如:分别为 Text和 30)。另外,还可以指定该字段的其他属性。
设臵好该字段的相关属性后,单击“确定”按钮,新增加的字段会出现在字段列表
中。至此,一个新的字段添加完毕。
重复以上操作,继续添加其他字段,直到所有要添加的字段添加完毕。
单击“关闭”按钮,退出“添加字段”对话框。
12.4 Data控件
? Data控件
数据控件 Data是 VB访问数据库最常用的工具之一。数据控件提供不需编程而能访
问现存数据库的功能,可以将多个 Data控件同时添加到一个工程甚至是同一个窗体
中。每个控件可以连接到不同的数据库或同一个数据库的不同表上,还可以和代码
一起查询满足 SQL语句的表的记录集。
使用 Data控件可以访问多种数据库,这些数据库包括 Access,FoxPro等。还可以
使用 Data控件访问 Excel,Lotus 1-2-3 以及标准的 ASCⅡ 文本文件。此外,Data
控件也可以访问和操作远程的开放式数据库连接( ODBC)数据库,例如 Microsoft
SQL Server以及 Oracle等。
12.4 Data控件
?Data控件的 主要属性
Connect属性 决定与 Data控件相连的数据库类型,VB可识别大多数的数据库。
DatabaseName属性 指定具体使用的数据库文件名,包括所有的路径名。 例如,
要连接一个 Microsoft Access的数据库 C:\VB\PublishData.mdb,则应设臵为:
DatabadeName=″C,\VB\PublishData.mdb″
RecordSoure属性 确定具体可访问的数据,这些数据构成记录集对象 RecordSet。
该属性值可以是 DatabaseName数据库中的单个表名,一个存储查询,也可以是使用
SQL查询语言的一个查询字符串。 例如,要指定 PublishData.mdb数据库中的“出版
社基本信息表”,则 RecordSource=″ 出版社基本信息表 ″ ;如果要访问图书信息表
中电子工业出版社出版的所有图书,则使用 SQL语句,RecordSoure=″SELECT *
FROM 图书信息表 WHERE 出版社代码 =′0001′″ 。
RecordsetType属性 返回或设臵一个值,确定由 Data控件创建的记录集类型。 如
果使用 Access数据库,则该属性应选择 Table类型;如果使用其他任何一种类型的数
据库,那么,应选择 Dynaset类型;如果只需要读数据而不更新它,可选择 Snapshot
类型。
12.4 Data控件
?数据绑定控件
在 VB中,Data控件只是负责数据库和工程之间的数据交换,利用 它可以对数据库中
的数据进行操作,但它 本身却不能显示数据库中的数据,显示数据库中的数据需要由数
据绑定控件来完成。
VB中能与 Data控件绑定的控件可以是 VB的内部控件,也可以是高级数据绑定控件,
甚至是第三方提供的控件。
在 VB 6 中,可与 Data控件一起使用的标准绑定控件主要有,复选框控件,图像框控
件、标签控件、图片框控件、文本框控件、列表框控件、组合框控件。 用来显示数据
的控件之所以被称为绑定控件,是因为它连接在数据控件上。必须对绑定控件设定适当
的属性值,才能显示相应的信息。
在 VB中,大多数绑定控件都具有以下 3种与数据有关的属性。
DataSource属性 指定绑定控件所连接的数据控件名称。
DataChanged属性 指示显示于绑定控件里的值是否已经改变。如果已经改变,则其值为
True,否则为 False。
DataField属性 DataField属性用来指定 Data控件建立的记录集里字段的名称。
12.4 Data控件
?例 12-7设计一个窗体,用以显示 PublishData.mdb数据库中“图书信息表”的
记录内容。
分析,在“图书信息表”中包含了 3个字段,故需要用 3个绑定控件与之对应。这里用
3个文本框来显示出版社代码和图书名称等数据。
本例中不需要编写任何代码,具体操作步骤如下,
? 建立一个工程,利用 VB标准工具箱,设臵一个数据控件(控件名称自动默认为 Data1),3
个文本框和 3个标签控件。
? 臵标签的标题,3个标签控件分别给出相关的字段提示说明。
? 臵数据控件的属性:数据控件 Data1的 Connect属性指定 Access数据库类型,Database
Name属性连接数据库 PublishData.mdb,RecordSource属性设定为 PublishData.mdb
数据库中的“图书信息表”。
? 臵文本框的属性,3个文本框控件 Text1,Text2,Text3的 DataSource属性都设臵成 Data1。
通过设臵这些绑定控件的 DataField 属性的属性值,对 3个文本框控件的 DataField 属性,
分别选择与其对应的字段“出版社代码”、“定价”和“图书名称”,与之建立绑定关系。
? 运行效果图,
12.4 Data控件
?例 12-8 用一个数据网格控件
MSFlexGrid显示图书信息。
操作步骤如下,
(1)在窗体中加入数据控件、网格控件。
(2)控件属性设臵,
Data1,DatabaseName设臵为 C:\VB\PublishData.mdb;
Data1.RecordsetType设臵为 1-Dynaset;
Data1.RecordSource属性设臵为,
, SELECT 图书信息表,图书名称,图书信息表,定价,出版社基本信息表,出版社名称
FROM 图书信息表,出版社基本信息表
WHERE 图书信息表,出版社代码 =出版社基本信息表,出版社代码”;
MsFlexGrid1,DatabaseSource 设臵为,Data1” ;
MsFlexGrid1,ScrollBars 设臵为 3(有水平和垂直滚动条 );
MsFlexGrid1,FixedCols 设臵为 0(去掉左固定的列 );
MsFlexGrid1,AllUserResizing设臵为 1-FlexResizeColumns(以便在窗体运行时可以调
整列的宽度。 )。
(3)设臵完成后,窗体启动。
12.4 Data控件
?Data控件的主要事件与方法
Data控件的事件 Data控件除有其他的控件的 MouseMove、
MouseDowm,MouseUp等事件处还具有几个与数据库访问有关的特有事
件,Reposition事件和 Validate事件。
?Reposition事件 当用户单击 Data控件上的某个箭头按钮,或者在应用
程序中使用了某个 Move或 Find方法时,一个新记录成为当前记录之后,
均会触发 Reposition 事件。通常可以在这个事件中显示当前指针的位臵,
具体代码如下,
Private Sub Data1_Reposition()
Data1.Caption=Data1.Recordset.AbsolutePosition+1
End Sub
?Validate事件 当要移动记录指针前,修改与删除记录前或卸载含有数据
控件的窗体之前触发 Validate事件。 Validate事件检查被数据控件绑定
的控件内的数据是否发生变化。
语法,Private Sub Data1_Validate(Action As Integer,Save As
Integer)
参数,Save布尔表达式,用来指定被连接的数据是否改变,其值为 True
时,表明数据发生改变;为 False时,数据未改变。 Action参数,用于说
明引发该事件的原因。
12.4 Data控件
? Data控件的方法
Refresh方法 主要用来建立或重新显示与 Data控件相连接的数据库记录集。
如果在程序运行过程中修改了数据控件的 DatabaseName,RrcordSource、
ReadOnly,Exelusive或 Connect等属性的设臵值,就必须用该方法来刷新记
录集。
Refresh方法的语法格式是,
Data1,Refresh
UpdateRecord方法 可以将绑定控件上的当前内容写入到数据库中,即可以
在修改数据后调用该方法来确认修改。用这种方法在 Validate事件期间将被连接
控件的当前内容保存到数据库中而不再次触发 Validate事件。
UpdateControls方法 可以将数据从数据库中重新读到绑定控件中,即可以在
修改数据后调用该方法放弃修改。这种方法等效于用户更改了数据之后决定取消
更改。
Close方法 主要用于关闭数据库或记录集,并且将该对象设臵为空。在使用
Close 之前,必须使用 Update方法更新数据库或记录集中的数据,以保证数据
的正确性。
12.4 Data控件
?记录集对象
在 VB中,数据库内的表不允许直接访问,只能通过记录集对象( Recordset)进行记录
的操作。在 Data控件中,记录集 Recordset对象由 Data控件的 RecordSource属性确定,
可以是 DatabaseName数据库中的单个表名,或运行一次 SQL查询所得记录结果。
?Recordset对象的类型
在数据库编程中,Recordset对象是一种用来浏览数据库的工具,用户可以根据需要指定
要选择的数据。 VB支持的记录集对象一共有 3种类型,
表类型( DbOpenTable) 一个记录集合,代表能用来添加、更新或删除记录的单个
数据库表。
动态集类型( DbOpenDynaset) 一个记录的动态集合,代表一个数据库或包含从
一个或多个表取出的字段的查询结果。可从动态集类型的 Recordset里添加、更新或
删除记录,并且任何改变都将会反映在基本表上 。
快照类型( DbOpenSnapshot) 一个记录的集合静态副本,可用于寻找数据或生成
报表。一个快照类型的 Recordset对象能包含从一个或多个在同一数据库中的表里取
出的字段,但字段不能更改。
在这 3种记录集中,动态集类型的 Recordset对象是最灵活、功能最强大的记录集。
表类型记录集的处理速度快一些,但需要大量的间接成本,且只能对应一个数据库表。快
照类型的记录集对象缺少灵活性的记录集,但所需要的间接成本少一点,因此若不需更新
数据库中的数据,可使用快照类型的记录集。
12.4 Data控件
?Recordset对象的主要属性
AbsolutPostion属性 返回当前指针值,若是第一条记录,其值为 0,该属性为只读。
BOF和 EOF属性 BOF判定是否在首记录前,若 BOF为 True,则当前位臵位于记录集的第
1条记录之前。与此类似,EOF判定是否在末记录之后。且具有以下特点,
如果记录集中没有记录,则 BOF和 EOF的值都是 True。
当 BOF或 EOF的值成为 True之后,只有将记录指针移动到实际存在的记录上,BOF或 EOF属性值
才会变为 False。
若 BOF或 EOF为 False,而且记录集中惟一的记录被删除掉,那么属性将保持 False,直到试图移
到另一个记录为止,这时 BOF和 EOF属性都将变为 True。
当创建或打开至少含有一个记录的记录集时,第 1条记录将成为当前记录,而且 BOF和 EOF均为
False。
Bookmark属性 属性值采用字符串类型,用于设臵或返回当前指针的标签。在程序中可
以使用该属性重定位记录集的指针,但不能使用 AbsoloutPostion属性。
NoMatch属性 在记录集中进行查找时,若找到相匹配的记录,则该属性为 False,否
则为 True。该属性常与 Bookmark属性一起使用。
RecordCount属性 该属性对 Recordset对象中的记录计数,该属性为只读属性。
12.4 Data控件
?Recordset对象的方法
AddNew 方法 该方法将清除绑定控件中的内容,并将一条空记录添加到记录集的末尾,
用户可以从绑定控件中输入数据。 输入完新记录之后,要使用 Update方法才能将数据保
存到数据库中。
Delete方法 该方法删除记录集中当前记录,但记录仍将显示在绑定控件中,因此在使
用了 Delete方法以后,要使用 MoveNext或 MovePrevious方法来移动记录指针。
Move方法 Move方法可以使不同的记录成为当前记录,常用于浏览数据库中的数据。
具体地说,它包括 4种方法,MoveFirst,MoveLast,MoveNext和 MovePrevious。
MoveFirst 使记录集中的第一个记录成为当前记录。
MoveLast 使记录集中的最后一个记录成为当前记录。
MoveNext 下移一条记录,即使下一个记录成为当前记录。
MovePrevious 上移一条记录,即使下一个记录成为当前记录。
当使用 Move方法改变当前记录时,应该注意下面几种特殊的情况,
若当前记录是首记录或最末记录,使用 MoveFirst或 MoveLast方法时,当前记录不改变。
若当前记录是首记录,使用 MovePrevious方法时,BOF属性将被设为 True;如果再次使用
MovePrevious方法,则产生一个错误,BOF仍为 True。
若当前记录是记录集中的末记录,使用 MoveNext方法将使 EOF属性被设为 True;如果再
次使用 MoveNext方法,则产生一个错误,EOF仍为 True,
12.4 Data控件
?Recordset对象的方法
Update方法 保存对 Recordset对象的当前记录所做的修改。
Find方法 使用 Find方法可在指定的 记录集中查找符合条件的一条记录,并使之成为当
前记录。如果要在表类型记录中查找,要使用 Seek方法。 4种 Find方法是,
FindFirst<条件字符串> 在记录集中查满足条件的第一条记录。
FindLast<条件字符串> 在记录集中查找满足条件的最后一条记录。
FindNext<条件字符串> 从当前记录开始查找满足条件的下一条记录。
FindPrevious<条件字符串> 从当前记录开始查找满足条件的上一条记录。
, 条件字符串, 是指定包括字段与常量关系的字符串表达式。 若找到,则 NoMatch
属性值为 False,且找到的记录成为当前记录;没找到,当前记录保持在使用该 Find方法
之前的那条记录上,且 NoMatch属性值为 True。若包括多条与条件相匹配的记录,
FindFirst定位于第 1条,FindNext定位于下一条记录,以此类推。
Seek方法 在表类型的记录集中查找满足条件的记录,使用 之前必须打开表的索引,查
找的内容必须为索引字段,当找到匹配的记录时,指针就定位到该记录。其语法格式为,
数据表对象,Seek comparison,关键字 1,关键字 2……
其中,comparison是字符串类型的比较运算符,可以是 =,> =、>、<>、< =、
<之一。
12.4 Data控件
?使用代码操作数据库记录
– 移动记录
让第一条记录成为当前记录, Data1.Recordset.MoveFirst
让最后一条记录成为当前记录,Data1.Recordset.MoveLast
让下一条记录成为当前记录,Data1.Recordest.MoveNext
让前一条记录成为当前记录,Data1.Recordest.MovePrevious
如果 Data控件定位在记录集的最后一条 (第一条 )记录上,使用 MoveNext
(MovePrevious) 方法移动记录,则会产生一个错误。为防止上述错误的出现,
可以使用如下代码先检测后移动,
If Data1,Recordset.EOF=False Then
Data1,Recordset,MoveNext
…… 添加代码处理当前记录
Else
Data1.Recordset,MoveLast
End If
12.4 Data控件
?使用代码操作数据库记录
– 查找记录
(1)使用 Find方法
在使用 Find方法时,首先要确定查询的条件。例如,下列代码介绍发如何在
“图书信息表”中查找“出版社代码”字段值为,0002”的第一个记录,
Data1,Recordset,FindFirst,出版社代码 =′0002′,
12.4 Data控件
?使用代码操作数据库记录
– 查找记录
(2) 使用 Seek方法, 主要适用于查找 经过 索引 的 Recordset对象中的记录 。
以下代码 功能为将,出版社代码,值为,0003”的均 修改为, 0002” 。
Dim Mytable As Recordset
Set Mytable = Data1,Recordset ′ 设臵表格型记录集变量
Mytable,Index =″indexa″ ′ 定义当前索引
Mytable,Seek ″=″,″0003″ ′ 查找记录
Do Until Mytable.NoMatch ′ 直到找不到记录
Mytable,Edit ′ 使编辑有效
Mytable(″ 出版社代码 ″) =″0002″ ′ 改变 ″ 出版社代码 ″ 字段值
Mytable.Update ′ 保存变化
Mytable,Seek ″=″,″0003″ ′ 查找下一个记录
Loop
12.4 Data控件
?使用代码操作数据库记录
– 更新记录:在修改记录集中的数据之前,首先要检查数据库和记录集的
Updatable属性,因为无法修改快照型的记录集。另外,必须将打开的
Data控件的 ReadOnly属性设臵为 False。
以下代码用于检验数据库是否可以更新,
If Data1,ReadOnly = True Or Data1.Database,Updatable = False _
Or Data1,Recordset,Updatable = False Then
MsgBox, 该数据库无法进行更新!,
End If
如果需要检验一个字段是否可以改变,则可以检查该字段的 Attributes属性
并测试 dbUpdatableField位。例如,
If Data1,Recordset,Fields(″ 出版社名称 ″).Attributes _
And dbUpdatableField = 0 Then
MsgBox, 无法修改该字段!,
End If
12.4 Data控件
?使用代码操作数据库记录
– 添加记录,下面的代码主要用于在“图书信息表”中添加一个新记录,
Data1,DatabaseName= ″c:\vb98\PublishData.mdb″
Data1,RecordSource =″图书信息表 ″
Data1,Refresh
Data1,Recordset,AddNew ′创建一条新记录
Data1.Recordset(″出版社代码 ″)= ″0002″ ′设置字段值
Data1.Recordset(″图书名称 ″)=″数据库开发实例 ″ ′设置字段值
Data1.Recordset(″定价 ″)= 38 ′设置字段值
Data1,Recordset,Update ′保存数据
12.4 Data控件
?使用代码操作数据库记录
– 编辑当前记录, 下面的代码用来修改机械工业出版社的联系电话,
Data1.DatabaseName = ″c:\vb98\PublishData.mdb″
Data1.RecordSource = ″出版社基本信息表 ″
Data1.Refresh
Data1.Recordset.FindFirst ″出版社名称 =′机械工业出版社 ′″
′定位到要修改数据的记录
If Data1.Recordset.NoMatch Then
MsgBox ″没有找到该出版社的信息 ″
Exit Sub
Else
Data1.Recordset.Edit
Data1.Recordset(″联系电话 ″)= ″(010)64054598″ ′改变其值
Data1.Recordset.Update ′保存此改变
End If
12.4 Data控件
?使用代码操作数据库记录
– 删除记录, 可以使用 Delete方法来删除当前记录。要在记
录集中删除一条记录,首先要将当前记录指针定位到要删
除的记录上,然后才能使用 Delete方法删除该记录。
如果希望同时删除多条记录的话,可以多次使用 Delete方
法进行删除,但应该注意的是,在每次删除以后必须要使
用 MoveNext方法来改变当前记录,因为已删除的记录不
再包含有效的数据,继续访问这一数据会导致错误。另一
种有效的方法是使用 SQL DELETE查询。例如,下面的 SQL
查询就是删除“图书信息表”中所有定价高于 50元的图书
的记录,DELETE FROM图书信息表 WHERE,定价” >50
12.4 Data控件
?关闭记录集
在结束对当前记录集的操作以后,可以使用 Close方法来关闭记录集
并释放分配给它的资源。以下的代码就表示关闭一个记录集,
Data1,Recordset,Close
实际上,在下列情况中数据库和它们各自的记录集将被自动关闭,
( 1)针对一指定的记录集使用 Close方法。
( 2)卸载包含 Data控件的窗体。
( 3)程序执行了一个 End语句。
12.5 ADO控件
? ADO控件
ADO(ActiveX Data Objects) 数据访问接口是 Microsoft公司开发数据库
应用的新标准,它也是 Microsoft公司数据访问接口发展的一个方向,在
Visual Basic6.0中主要提供了 ADO数据对象作为数据访问接口。 ADO可以
使用 ODBC和 OLE DB来访问数据库,ADO不直接访问 ODBC数据库,它把
OLE DB的访问封装在一个数据对象中,需要经过 OLE DB转接,可以方便在
对数据库的访问。
12.5 ADO控件
? ADO模型
1,在使用 ADO对象之前,首先要向当前工程添加 ADO的对象库。方法:选择,
工程, ︱, 引用, 命令打开, 引用, 对话框,在列表中选择 Microsoft
ActiveX Data Object 2.0 Library选项 。
2,ADO对象描述
对象名 描 述
Connection 连接数据源
Command 从数据源获得所需数据的命令值
Recordset 所获得的一组记录组成的记录集
Error 在访问数据时,由数据源所返回的错误信息
Parameter 与命令对象相关的参数
Field 包含了记录集中某个字段的信息
12.5 ADO控件
? 连接数据库
具体步骤如下,
( 1)在窗体上添加 ADODC数据控件,其默认名为 ADODC1。
( 2)在 ADODC属性窗口,选择, 使用连接字符, 点击,…”,弹出 ADODC控
件的, 属性页, 对话框。
( 3) 选择数据库“提供者”选项卡 。 如 Microsoft Jet 3.51 OLE DB Provider。
( 4)指定数据源。 如 C:\VB\PublishData.mdb。
( 5)单击“测试连接”按钮。如果显示“测试连接成功”消息框,则表示连接
成功,否则表示连接失败。
12.6 数据报表
? Microsoft数据报表设计器是一个多功能的报表生成器,同数据环境设计器一
起使用,可以从不同的相关表中提取数据创建报表。
? 数据环境设计器:在设计时,首先是建立 Connection Command对象并设
臵它们的属性值及编写代码,从而获得对数据库、数据表和查询的连接操作,
然后再把他们绑定到数据报表设计器上。
建立数据环境 DataEnvironment1的操作步骤如下,
1,在 Visual Basic的开发环境中,选择“工程” ︱, 添加 Data Environment”
命令,进入 Data Environment。
2,选择数据源的数据库引擎。
3,选取数据库。
4, 添加 Command(命令 )对象。
12.6 数据报表
? 建立数据报表 步骤如下,
1,添加 Data Reporter报表设计器
2,建立报表的资料来源
在属性窗口中修改报表窗体的属性,DataSource=DataEnvironment1,
Member=Command1。
3,制作报表字段
(1)利用数据报表工具箱,在 Data Report1窗体的报表标头栏中加入相应的
Label控件。
(2)添加字段到 Data Report1窗体的“细节”内。
5,显示报表
12.7 数据库应用实例
1,数据库设计
2,数据报表
3、功能模块设计
参见“学生成绩管理”实例。