第九章 VB的数据库操作
9.1 数据库的基础知识
1.计算机数据管理技术的发展
第一阶段:人工管理阶段,特点是数据不长期保存,没有软件系统对数据进行管理,没有文件的概念,一组数据对应一个程序。
第二阶段:采用文件管理方式,特点是数据不再是程序的组成部分,而是有组织、有结构地构成文件形式,形成数据文件;文件管理系统是应用程序与数据文件的接口。
第三阶段:数据库管理方式,特点是对所有数据实行统一、集中、独立的管理,数据独立于程序存在,并可以提供给各类不同用户使用。
2.数据库的基本概念
(1) 数据库(DataBase DB)
定义:是以一定的组织形式存放在计算机存储介质上的相互关联的数据的集合。
特点:
b 具有最小的冗余度具有数据独立性
实现数据共享
安全可靠,保密性能好
(2) 数据库管理系统(DataBase Management System DBMS)
定义:是操纵和管理数据库的系统软件。
功能:维护数据库、接收和完成用户程序或命令提出的访问数据库的各种请求。
数据语言:z | v数据定义语言(DDL): 用来建立所需的数据库(即设计库结构) |
数据操作语言(DML): 用来对数据库进行查询和维护操作。 | |
t数据控制语言(DCL): 用来控制数据的访问权限及事务管理。 |
关系型数据库使用的标准语言是结构化查询语言(Structured Query Language, SQL)。
(3) 数据库系统(DataBase System DBS)
定义; 以数据库应用为基础的计算机系统。
组成:一个完整的数据库系统由数据库、数据库管理系统、数据库管理员和应用程序组成。
数据库也可以这样划分其组成: | 硬件:计算机硬件设备 |
软件:数据库管理系统 、操作系统、开发工具、应用程序 | |
用户:应用程序设计员、终端用户、数据库管理员 |
分类 | 层次型数据库 |
网状型数据库 | |
网状型数据库 |
分代 | 第一代 非关系型数据库系统,60年代末问世,包括层次型和网状型 |
第二代 关系型数据库系统(RDBS),70年代中期问世 | |
第三代 对象-关系数据库系统(ORDBS 、OOBDS),80年代中期至今 |
上述三个概念之间的联系:在数据库系统中通过数据库管理系统来建立和使用数据库。
3.数据模型
数据模型:即描述实体模型的数据。
数据模型的分类: | 层次模型(采用树型结构) |
网络模型(采用无向图型结构) | |
关系模型(采用二维表结构) |
关系模型的性质: | 二维表的记录数随数据的增加而改变,但其字段数是相对固定的 |
二维表中的每一列均有唯一的字段名 | |
二维表中不允许出现完全相同的两行 | |
二维表中行的顺序、列的顺序均可以任意交换 |
4. 关系型数据库的基本结构
关系型数据库的基本结构是一张二维表,包括以下概念:
(1) 记录(Record):数据表中的每一行数据
(2) 字段(Field):数据表中的每一列,表头(第一行)的内容为字段名
(3) 数据表(Table):相关数据组成的二维表格
(4) 数据库(Database):相关数据表的集合
(5) 关系(Relation):相关表之间通过相关联的字段建立的联系。
(6) 索引(Index):指按表文件中某个关键字段或表达式建立记录的逻辑顺序。它是由一系列记录号组成的一个列表,目的是提供对数据的快速访问。索引不改变表中记录的物理顺序。
索引关键字(索引表达式):用来建立索引的一个字段或字段表达式。
ngf 数据库和数据表可以通过数据库管理系统软件来建立,如:Access,Visual FoxPro,SQL Server 、Sybase、 Oracle。在VB环境下可以直接建立Access数据库。
关系型数据表的特点:(1)每一个字段不可再分解,也不能有名字相同的字段;hgfhgfyh(2)每一列中的数据都有相同的数据类型;
hfyftytfyyy(3)表中没有内容完全相同的行(记录)。
5.查询的概念
查询(query):从相关数据表中选取符合特定要求的数据。
创建方法:可以通过查询生成器创建一个查询,也可以在SQL窗口直接用SELECT—SQL命令写出查询。
9.2 数据库管理器
1. 数据库管理器介绍
在VB中可以通过“外接程序”菜单中的“可视化数据管理器”调出“VisData”数据库管理器窗口。
菜单选项 |
功能描述 |
|
文件 |
打开数据库 |
打开指定的数据库 |
新建 |
根据所选类型建立新数据库 |
|
导入/导出 |
从其他数据库导入数据表,或导出数据表及SQL查询结果 |
|
工作空间 |
显示注册对话框注册新工作空间,用新输入的用户名和密码从新的工作空间重新打开当前数据库。 |
|
压缩MDB |
压缩指定的Access数据库,创建一个加密或解密文件。 |
|
修复MDB |
修复指定的Access数据库 |
|
实用程序 |
查询生成器 |
建立、查看、执行和存储SQL查询 |
数据窗口设计器 |
创建数据窗体并将其添加到VB工程中 |
|
全局替换 |
创建SQL表达式并更新所选数据表中满足条件的记录 |
|
附加 |
显示当前Access数据库中所有附加数据表及连接条件 |
|
用户组/用户 |
查看和修改用户组、用户、权限等设置 |
|
System.mda |
创建System.mda文件,以便为每个文件设置安全机制 |
|
性能选项 |
设置超时值 |
2. 建立数据库
数据库的基本操作: |
创建数据表:
|
设计表名和表结构 |
输入记录 | ||
建立索引 | ||
数据维护:
|
增加记录 | |
修改记录 | ||
删除记录 |
创建数据表的主要步骤: 设计表结构 → 输入记录 → 建立索引 → 数据维护
(1)设计表结构
启动可视化数据管理器 → 在database窗口中右击,从菜单中选择“新表” → 在表结构窗口中输入表名→ 添加字段 → 确定字段名称和属性、有效性规则 → 建立索引 →生成表结构。
“添加字段”对话框各选项说明
选项名 |
描述 |
名称 |
即每个字段的名字(对所用字符没有什么限制) |
类型 |
指该字段的数据特征,包括:Boolean、Byte、Integer、Long、Currency、Single、Double、Date/Time、Text、Binary(二进制型,存放图片)、Memo(备注型,存放长文本) |
大小 |
字段宽度,指该字段所能容纳数据的的最大字节数 |
固定字段 |
字段宽度固定不变 |
可变字段 |
字段宽度可变 |
允许零长度 |
表示空字符串可作为有效的字段值 |
必要的 |
表示该字段值不可缺少 |
顺序位置 |
字段在表中的顺序位置 |
验证文本 |
当向表中输入无效值时系统显示的提示信息 |
验证规则 |
验证输入字段值的简单规则,目的是使所输数据符合设定的条件 |
默认值 |
在输入时设置的字段初始值,以减少输入重复性数据时的工作量 |
(2)输入记录
在database窗口中选中表名并右击,从菜单中选择“打开” →在数据表窗口输入记录(注意窗口样式)→ 单击“新增”→ 在窗口中输入记录并“更新” →重复……
(3) 维护记录
在database窗口中选中表名并右击,从菜单中选择“打开” →单击“编辑”/“删除”/“新增”,即可完成对记录的修改、删除、添加操作。
3. 建立查询
建立查询就是在数据表中找到符合特定条件的记录并组成一张新表。
在database窗口中选中表名并右击,从菜单中选择“新查询” →在查询生成器中构造查询条件→单击“运行” →单击“保存”,给出查询结果文件名→“关闭”。
查询生成器说明
各选项 |
描述 |
查询表达式 |
设置查询应该满足的基本条件,可以用and /or来设置应满足的多个条件 |
表/字段名 |
设置查询结果中将显示的字段名,单击一个加亮便选中了 |
前百分之几条 |
只显示查询结果中的前若干条记录 |
前N条记录 |
只显示查询结果中的前N条记录 |
“运行”按钮 |
执行查询命令,并显示出查询结果 |
“显示”按钮 |
用消息框显示SQL命令 |
“复制”按钮 |
将SQL命令复制到SQL窗口 |
“保存”按钮 |
将查询结果取个名并保存到数据库中 |
“清除”按钮 |
清除条件列表框中的查询条件 |
分组条件 |
将查询结果分组,一般每组只有一个记录 |
排序条件 |
将查询结果按顺序显示出来,ASC(升序)、DESC(降序) |
连接条件 |
设置相关表之间的连接字段 |
9.3 数据控件
1. 数据控件的建立
从VB工具箱中单击Data控件,在窗体上画出数据控件即可。
2. 数据控件的属性
属性名称 |
作用 |
Connect |
指定数据控件所要连接的数据库类型,VB默认的是Access的MDB数据库,也可以连接DBF、XLS、ODBC等数据库 |
DatabaseName |
指定具体使用的数据库文件名,包括路径名 |
RecordSource |
指定具体可访问的数据,这些数据构成记录集对象Recordset对象,可以是数据库中的单个表名、一个存储查询,也可以是SQL查询命令 |
RecordsetType |
确定记录集类型,有三种: 0——Table(表); 1——Dynaset(动态,默认的) ;2——Snapshot(快照) |
BofAction |
当记录指针指向记录集的开始时,确定数据控件该采取的操作: 0——控件重定位到第一个记录 1——移过记录集开始位,定位到一个无效记录,触发数据控件对第一个记录的无效事件Validate |
EofAction |
当记录指针指向记录集的结束时,确定数据控件该采取的操作: 0——控件重定位到最后一个记录 1——移过记录集结束位,定位到一个无效记录,触发数据控件对最后一个记录的无效事件Validate 2——向记录集加入新的空记录,可以对新记录进行编辑,移动记录指针新记录写入数据库 |
绑定控件、数据控件、数据库之间的关系:
绑定控件的属性:
DataSource——通过一个有效的数据控件连接到一个数据库上。
DataField——将数据库中的有效字段连接到绑定控件上。
除了常规控件外,可以与Data数据控件绑定的控件有:
控件名称 |
部件名称 |
常用属性 |
MSFlexGrid |
Microsoft FlexGrid Control 6.0(OLE DB) |
DataSourse |
DBCombo |
Microsoft Data Bound List Controls 6.0 |
DataField、DataSource、ListField、RowSource、BoundColumn |
DBList |
||
DBGrid |
Microsoft Data Bound Grid Control 5.0(SP3) |
DataSourse |
3. 数据控件的事件
事件名称 |
触发时间 |
Reposition |
发生在一条记录成为当前记录后。只要将记录指针从一条记录移动到另一条记录就会触发。 |
Validate |
在一条不同的记录成为当前记录之前,Update 方法之前(用 UpdateRecord 方法保存数据时除外);以及 Delete、Unload 或 Close 操作之前会发生该事件。它检查被数据控件绑定的控件内的数据是否发生变化。 语法:Private Sub Data_Validate(Action As Integer, Save As Integer) …… End Sub |
Validate事迹的 Action参数
Action值 |
描述 |
Action值 |
描述 |
0 |
取消对数据控件的操作 |
6 |
Update 操作 |
1 |
MoveFirst 方法 |
7 |
Delete 方法 |
2 |
MovePrevious 方法 |
8 |
Find 方法 |
3 |
MoveNext 方法 |
9 |
设置Bookmark 属性 |
4 |
MoveLast 方法。 |
10 |
Close 的方法 |
5 |
AddNew 方法 |
11 |
卸载窗体 |
4. 数据控件的常用方法
方法名称 |
作用 |
示例 |
Refresh |
激活数据控件,使各用户对数据库的操作有效。 |
Data1.Refresh |
UpdateControls |
将数据从数据库中重新读到数据控件绑定的控件内,通过它可以终止用户对绑定控件内数据的修改。 |
放弃修改按钮代码: Data1. UpdateControls |
UpdateRecord |
强制数据控件将绑定控件内的数据写入到数据库中,不再触发Validate事件 |
确认修改按钮代码: Data1. UpdateRecord |
5. 记录集的属性与方法
名称 |
作用 |
|
属性 |
AbsolutePostion |
返回当前指针值,如果是第一条记录,其值为0;是只读属性 |
Bof / Eof |
Bof判断记录指针是否在首记录之前,若是则为True;Eof判断记录指针是否在末记录之后,若是则为True |
|
Bookmark |
用于设置或返回当前指针的标签,可以用在在程序中重定位记录集的指针,其值采用字符串类型。 |
|
NoMatch |
在记录集中进行查找时,如果找到相匹配的记录,则为Falue,找不到则为True。 |
|
RecordCount |
对Recordset对象中的记录记数,为了准确起见,在记数前用MoveLast方法将记录指针移到最后一条记录上;是只读属性。 |
|
方法 |
Move |
用于移动记录指针,共有5种方法: MoveFirst——将指针移到第1条记录 MoveLast——将指针移到最后一条记录 MoveNext——将指针移到下一条记录 MovePrevious——将指针移到上一条记录 Move n——将指针向前或向后移动n条记录 |
Find |
在指定的Dynaset或 Snapshop类型的Recordset对象中查找与指定条件相符的一条记录,并使之成为当前记录,共有4种方法: FindFirst——从记录集的开始查找满足条件的第1条记录 FindLast——从记录集的尾部向前查找满足条件的第1条记录 FindNext——从当前记录开始查找满足条件的下一条记录 FindPrevious——从当前记录开始查找满足条件的上一条记录 语法格式举例: Data1.Recordset.FindFirst "课程名='计算机基础' " Find方法支持通配符,默认情况下忽略大小写,可以添加说明改变默认设置: Option Compare Text (与大小写无关) Option Compare Binary (与大小写有关) 如果找不到相匹配的记录,当前记录保持在查找的始发处;如果找到了,则指针定位到该记录。 |
|
Seek |
使用该方法必需打开表的索引,它在Table表中查找与指定索引规则相符的第一条记录,并使其成为当前记录。 语法格式举例: Data1.Recordset.Index= "课程名" Data1.Recordset.Seek "=", "计算机基础" |
6. 利用数据控件对数据库进行增、删、改操作
操作项目 |
操作方法 |
注意事项 |
增加记录 |
1) 调用AddNew方法:Data1.Recordset. AddNew 2) 给各字段赋值:Recordset.Fields("字段名")=值或在绑定控件中直接输入内容 3) 调用Update方法,将缓冲区内的数据写入数据库: Data1.Recordset. Update 4) 调用MoveLast方法显示新记录: Data1.Recordset. MoveLast |
如果缺少第3)步而将指针移动到其他记录或关闭了记录,则所做的输入全部丢失;若没有第4)步。虽然加入了新记录,但记录指针自动返回到添加新记录前的位置上,并不显示新记录。 |
删除记录 |
1) 定位被删除记录使之成为当前记录(用Move或Find方法) 2) 调用Delete方法:Data1.Recordset. Delete 3) 调用MoveNext方法移动记录指针 |
使用Delete方法时,当前记录立即删除,但被数据库约束的绑定控件仍旧显示该记录的内容,故必须用第3)步刷新绑定控件。 |
修改记录 |
1) 调用Edit方法:Data1.Recordset. Edit 2) 给各字段赋值:在绑定控件中直接修改 3) 调用Update方法,确定所做的修改: Data1.Recordset. Update |
如果要放弃对数据的所有修改,可在第3)步之前用Refresh方法,重读数据库,刷新记录。 |
9.4 ADO数据控件
1. 什么是ADO?
ADO(ActiveX Data Object)数据访问接口是微软处理数据库信息的最新技术,它是一种ActiveX对象,采用了OLE DB(动态连接与嵌入数据库)的数据访问模式,是数据访问对象DAO、远程数据对象RDO和开放式数据库互连ODBC三种方式的扩展。
要使用ADO对象必需先为当前工程引用ADO对象库,方法是: 执行“工程”菜单中的“引用”命令,在对话框中选中“Microsoft ActiveX Data Object 2.0 Library”。
ADO对象描述
对象名 |
描述 |
Connection |
连接数据来源 |
Command |
从数据源获取所需数据的命令信息 |
Recordset |
所获取的一组记录组成的记录集 |
Error |
在访问数据库时,由数据源所返回的错误信息 |
Parameter |
与命令对象相关的参数 |
Field |
包含了记录集中某个字段的信息 |
2.使用ADO数据控件
(1) 添加ADO数据控件
从“工程”菜单中选择“部件”命令,在对话框中选中“Microsoft ADO Data ControlS 6.0(OLE DB)”,将其添加到工具箱,并在窗体上拖划出ADO数据控件。
(2) ADO数据控件的基本属性
属性名 |
作用 |
ConnectionString |
用来与数据库建立连接,它包括4个参数: Provide——指定数据源的名称 FileName——指定数据源所对应的文件名 RemoteProvide——在远程数据服务器打开一个客户端时所用的数据源名称 RemoteServer——在远程数据服务器打开一个主机端时所用的数据源名称 |
RecordSource |
确定具体可访问的数据,可以是数据库中的单个表名、一个存储查询或一个SQL查询字符串 |
ConnectionTimeout |
设置数据连接的超时时间,若在指定时间内连接不成功则显示超时信息 |
MaxRecords |
确定从一个查询中最多能返回的记录数 |
(3) ADO数据控件的属性设置
1)先在窗体上放置一个ADO数据控件
2)在ADO属性窗口中单击ConnectionString属性右边的…按钮,从对话框中选择连接数据源的方式:
使用连接字符串——单击“生成”按钮,通过选项设置系统自动产生连接字符串
使用Data Link文件——通过一个连接文件来完成
使用ODBC数据资源名称——在下拉列表中选择某个创建好的数据源名称作为数据来源对远程数据库进行控制。
3)在ADO属性窗口中单击RecordSource属性右边的…按钮,在“命令类型”中选择2——adCmdTable,在“表或存储过程名称”中选择所需要的表。
以上2)、3)可以合并成一步:在ADO控件上单击右键,从快捷菜单中选择ADODC属性,直接在属性页对话框中进行所有设置。
(4) ADO数据控件的方法和事件
与Data数据控件完全相同。
(5) 在ADO上新增绑定控件
可以从“工程”的“部件”中添加如下绑定控件:
控件名称 |
部件名称 |
常用属性 |
DataGrid |
Microsoft DataGrid Control 6.0(OLE DB) |
DataSource |
DataCombo |
Microsoft DataList Controls 6.0(OLE DB) |
DataField、DataSource、ListField、RowSource、BoundColumn |
DataList |
||
MSChart |
Microsoft Chart Control 6.0(OLE DB) |
DataSource |
3. 使用数据窗体向导
从“外接程序”菜单中选择“外接程序管理器”,在对话框中选中VB6数据窗体向导,“加载”并“确定”,再从“外接程序”菜单中选择“数据窗体向导”,然后根据系统提示逐步操作即可创建所需要的数据窗体,系统自动把所创建的窗体加到工程中。
9.5 结构化查询语言
1.SQL的基本组成
SQL语言由命令、子句、运算、函数等组成:
(1) SQL命令
命令 |
功能 |
CREATE |
用于建立新的数据表结构 |
DROP |
用于删除数据库中的数据表及其索引 |
ALTER |
用于修改数据表结构 |
SELECT |
用于查找符合特定条件的某些记录 |
INSERT |
用于向数据表中加入数据 |
UPDATE |
用于更新特定记录或字段的数据 |
DELETE |
用于删除记录 |
(2) SQL子句
子句 |
功能 |
FROM |
用于指定数据所在的数据表 |
WHERE |
用于指定数据需要满足的条件 |
GROUP BY |
将选定的记录分组 |
HAVING |
用于说明每个群组需要满足的条件 |
ORDER BY |
用于确定排序依据 |
INTO |
查询结果去向 |
(3) SQL运算符
逻辑运算符 |
And (与)、 Or(或)、 Not(非) |
比较运算符 |
< <= > >= = <> |
(4) SQL函数
AVG |
COUNT |
SUM |
MAX |
MIN |
求平均值 |
计数 |
求和 |
求最大值 |
求最小值 |
2. SQL语句的应用
语句功能 |
语法格式 |
建立数据表 |
CREATE TABLE 数据表名 (字段名1 数据类型(长度), 字段名2 数据类型(长度),……) 举例:create table student(xh text(9), xm text(8) , cj single(4), nl integer(2)) 建立含有xh、xm、cj、nl 4个字段的student表 |
添加字段 |
ALTER TABLE 数据表名 ADD COLUMN 字段名 数据类型(长度) 举例:alter table student add column xb text(2) '在学生表中添加性别字段 |
删除字段 |
ALTER TABLE 数据表名 DROP COLUMN 字段名 举例: alter table student drop column nl '将学生表中的年龄字段删除 |
数据查询 |
SELECT 字段名表 FROM 子句 WHERE 子句 GROUP BY 子句HAVING 子句 ORDER BY 子句 INTO 子句 举例:select xh, xm from student where xb="男" order by xh 从学生表中查询性别为男的学生,显示其学号和姓名并使结果按学号升序排列。 |
添加记录 |
INSERT INTO 数据表名(字段名1,字段名2……) VALUES(数据1,数据2……) 举例:insert into student (xh, xm, xb) values("015200101", "王小二", "男") |
删除记录 |
DELETE FROM 数据表名 WHERE 条件表达式 举例:delete from student where xb="男" |
更新记录 |
UPDATE 数据表名 SET 新数据值 WHERE 条件表达式 举例:update student set cj=cj+5 where xb="女" |
9.6 报表制作
1. 报表的概念
利用报表可以把数据表中的数据按一定的格式输出到屏幕上或打印到纸上。
2. 制作报表的方法
在VB6.0中可以利用报表设计器来制作报表,从“工程”中选择“添加data report”,将报表设计器加入到当前工程中,报表由5部分组成:
报表标头——每份报表只有一个,可以用标签建立报表名。
页标头——每页有一个,即每页的表头,如字段名。
细节——需要输出的具体数据,一行一条记录。
页脚注——每页有一个,如页码。
报表脚注——每份报表只有一个,可以用标签建立对本报表的注释、说明。
使用报表设计器处理的数据需要利用数据环境设计器创建与数据库的连接, 从“工程”菜单中选择 “添加Data Enviroment”,在连接中选择指定的数据库文件,完成与数据库的连接,然后产生Command对象连接数据库内的表。
制作报表的步骤:
(1) 新建工程,在窗体上放置两个命令按钮;
(2) 从“工程”菜单中“添加Data Enviroment”,右击Connection1,在属性中选择“Microsoft Jet 4 OLE DB Provider”,在“连接”中指定数据库;
(3) 再次右击Connection1,选则“添加命令”,创建Command1对象,右击Command1,在属性中设置该对象连接的数据源为需要打印的数据表;
(4) 在从“工程”菜单中“添加Data Report”,在属性窗口中设置DataSource为数据环境DataEnviroment1对象,DataMember为Command1对象,即指定数据报表设计器DataReport1的数据来源;
(5) 将数据环境设计器中Command1对象内的字段拖到数据报表设计器的细节区;
(6) 利用标签控件在报表标头区插入报表名,在页标头区设置报表每一页顶部的标题;
(7) 利用线条控件在报表内加入直线,利用图形控件和形状控件加入图案或图形;
(8) 利用DataReport1对象的Show方法显示报表,在窗体Click事件加代码:DataReport1.Show;
(9) 利用预览窗口按打印按钮可以打印报表;
(10) 利用预览窗口工具栏上的导出按钮可以将报表内容输出成文本文件或Html文件;也可以利用DataReport1对象的ExportReport方法将报表内容输出成文本文件或Html文件。
制作报表的简单方法是从“外接程序”中选择报表向导来设计报表。
9.7 MIS系统设计示例
学生成绩管理系统的设计
1. 建立工程文件
2. 设计系统主界面,验证用户身份
3. 建立Access数据库,输入若干记录
4. 设计带菜单的主窗体,把其他窗体组织起来
5. 根据需要完成系统功能,设计带数据控件的各种窗体
6. 调试、修改
7. 生成EXE文件