第 7章 数据库管理
学习目标:
? 了解数据库的相关概念
? 掌握数据管理器的使用
? 掌握 VB对数据库的三种访问技术
? 掌握应用 SQL对数据库进行查询
第 7章 数据库管理
教学内容:
7.1 VB数据库 技术基础
7.2 可视化数据管理器
7.3 数据控件 (Data)
7.4 应用 SQL进行 数据库查询
7.5 数据访问对象 (DAO)
7.6 ADO数据 控件
7.1 VB数据库技术基础 - 基本概念
1,数据库和数据表
? 数据库 (DateBse)是许多相关数据根据一定的原则构成的
数据集合 。 一个数据库由一个或多个数据表 (Table)组成 。
? 数据表中的一列称为一个字段或域 (Field),表中的一行
数据称为一条记录 (Record)。
? 同一个表中字段名不允许重名
? 表中同一字段的数据类型相同
? 所有记录具有同样的字段
返回目录
7.1 VB数据库技术基础 - 基本概念
2,VB可访问的数据库
VB默认的数据库格式与 Access97格式相同, 其默认的
数据库文件 (.mdb)称为内部数据库 。
除此之外, 在 VB中还可以访问:
? 外 部 数 据 库, 如 dBASE, FoxPro, Paradox 等
ISAM(索引顺序访问方法 )数据库, 以及 Lotus123和
Excel等电子表格数据列表
? ODBC(开放式数据互接 )数据库, 如 SQLServer等
返回目录
7.1 VB数据库技术基础 - 数据库访问技术
1,VB数据库应用程序的组成
用户界面, 数据库引擎和数据库
(VB提供的是 Microsoft Jet数据库引擎 )
2,应用程序 与 Jet数据库引擎的接口
? Data控件:提供无需编程就能访问数据库的
能力 。 实际应用时, 还需绑定其它控件, 并编
写简单的程序代码 。
? 数据访问对象 (DAO),供了一个由一系列对象和集合
组成的分层结构模型, 可方便地访问和处理数据库 。
3,ActiveX数据对象 (ADO)
建立在被称为 OLE DB的最新数据访问接口之上的高性
能的, 统一的数据访问对象 。
返回目录
7.2 可视化数据管理器 - 建立数据库
1,启动数据管理器
,外接程序 → 可视化数据管理器,
2,建立数据库的表结构
建立数据库 → 新建数据表 → 确定数据表的字段以及字
段名, 类型和长度等信息
返回目录
7.2 可视化数据管理器 - 建立数据库
[例 7.1] 建立一个 students.mdb数据库, 在该库中新建一
个名为 student的数据表 。
返回目录
操作步骤:
建立数据库 → 新建数据表 → 建立表索引 (可选 ) → 生成表
7.2 可视化数据管理器 - 编辑数据表
1,修改表结构
,数据库窗口, 快捷菜单中, 设计, 命令
2,输入, 编辑, 删除记录
在, 数据库窗口, 中双击数据表
返回目录
7.3 数据控件 (Data)- Data控件使用基础
1,窗体上添加 Data控件
2,三个重要属性
? Connect:指定所连接的数据库类型, 默认为 Access
? DatabaseName:选择要访问的数据库文件
? RecordSource:确定要访问的数据来源 (数据表或 SQL
查询语句 )
3,其它常用属性
? RecordSetType:设置 记录集 的类型, 见教材表 7.3
? ReadOnly:设置是否以只读方式打开数据库
返回目录
记录集是 Data控件能访
问的所有记录的集合
7.3 数据控件 (Data)- Data控件使用基础
4,常用方法与事件
? Refresh方法:刷新 Data控件的属性设置
例如, 若重新设置了控件的 Connect,DatabaseName、
RecordSouce,ReadOnly等属性值后, 必须调用 Refresh
方法使所作的更改生效 。
? Reposition事件:重定位事件
例如, 当记录集指针从一条记录 (假设为 A记录 )移到另
一条记录 (假设为 B记录 )时, 将发生该事件 (当前记录是 B
记录 )。
返回目录
7.3 数据控件 (Data)- Data控件使用基础
例, 如下的事件响应代码可在数据控件 Data1上显示 记
录集中 当前记录的记录号及记录总数:
Private Sub data1_Reposition()
DataId = Data1.Recordset.AbsolutePosition + 1
DataCount = Data1.Recordset.RecordCount
Data1.Caption = Str(DataId) &,/” & Str(DataCount)
End Sub
注:
? 记录集 (Recordset)是 Data控件所有可访问记录的集合
? AbsolutePosition属性表示当前记录指针的位置
? RecordCount属性表示记录集的记录总数
返回目录
7.3 数据控件 (Data)- Data的绑定控件
绑定:通过对普通控件的属性设置, 使得这些控件与
Data控件记录集中的字段建立链接关系 。
1,Data的绑定控件
具有 DataSource和 DataField属性的控件可以和 Data控
件进行绑定, 如标签, 文本框等 。
2,绑定控件的属性设置
? DataSource:选择所绑定的 Data控件
? DataField:确定需显示或更新的数据表字段, 即 Data
控件连接的数据表字段
返回目录
7.3 数据控件 (Data)- Data的绑定控件
[例 7.2] 建立 Xs.vbp:通过如下窗体显示 students.mdb
数据库中 student表的内容 。
返回目录
7.3 数据控件 (Data)- Data的绑定控件
[例 7.2的操作步骤 ]
(1) 设计窗体:启动 VB,新建一个工程, 然后设计窗体 。
(2) 设置 Data控件的属性, 见教材表 7.4
(3) 设置文本框的绑定属性, 见表 7.5
(4) 编写, 结束, 按钮的 Click事件响应代码
Private Sub Cmd_exit_Click()
End
End Sub
(5)保存,Xs.Vbp,FrmXs.frm
(6)运行:单击 Data控件上的前后四个按
钮可遍历 student数据表中的内容 。
返回目录
7.3 数据控件 (Data)- Data控件的记录集
? 记录集 (Recordset)是 Data控件所有可访问记录的集合
? 对数据库内容的编辑操作主要通过记录集对象来进行
1.浏览记录
? Bof 和 Eof 属性
Bof为 True:记录指针指向首记录前
Eof为 True:记录指针指向末记录后
? AbsolutePosition属性
返回当前记录指针的位置 ( 0对应第一条记录 )
? RecordCount属性
返回记录集的记录总数
返回目录
若 Bof和 Eof的属
性值都为 True,
则记录集为空
7.3 数据控件 (Data)- Data控件的记录集
? BookMark属性:设置或返回记录的书签
? LastModified属性:返回最近一次改过的记录书签值
? Move方法组:用于移动记录指针
? MoveFirst:移至第一条记录
? MoveLast:移到最后一条记录
? MovePrevious:记录指针前移一条记录
? MoveNext:记录指针后移一条记录
返回目录
7.3 数据控件 (Data)- Data控件的记录集
[例 7.3] 在例 7.2的基础上进行修改,
用 Move方法组实现 Data控件四个
按钮的相应功能, 并在 Data1控件上
显示当前记录号 。
[操作步骤 ]
(1) 在窗体上添加 4个命令按钮,
分别命名为 Cmd_Move(0)~ Cmd_Move(3)
设置相应的 Caption属性
(2) 编写 Cmd_Move命令按钮数组的 Click事件响应代码
(3) 编写 Data1控件重定位事件 (Reposition)响应代码
返回目录
7.3 数据控件 (Data)- Data控件的记录集
2.增加, 修改和删除记录
?相关方法
? AddNew:数据表中添加一条空记录
? Edit:将当前记录的内容调入缓冲区
? Delete:删除当前记录
? Update:将缓冲区中的内容写入数据库
? CancelUpdate:缓冲区中的内容不写入数据库
?增加新记录
① 调用 AddNew方法,在数据表中添加一条空记录
② 对新记录的各字段进行赋值
③ 调用 Update方法:更新数据表内容
返回目录
7.3 数据控件 (Data)- Data控件的记录集
?修改记录
① 调用 Edit方法:将当前记录的内容调入缓冲区
② 修改当前记录
③ 调用 Update方法:将修改的内容写入数据表
注:若在绑定控件上修改当前字段值后移动记录指针,
则系统自动将所作的修改更新到数据库中 。
?删除记录
① 调用 Delete方法:删除当前记录
② 移动记录指针:避免记录指针指向无效数据
注:记录一经删除, 就不可恢复 。 删除记录必须慎重 。
返回目录
7.3 数据控件 (Data)- Data控件的记录集
[例 7.4] 在例 7.3的基础上进行修改,
在窗体上添加, 增加记录,,, 修改记录, 和, 删除
记录, 三个按钮, 通过调用 AddNew,Edit,Delete方法
实现对数据库的相关操作 。
[操作步骤 ]
(1) 在窗体上添加 3个命令按钮,
Cmd_Add,Cmd_Update、
Cmd_Dele
(2) 编写上述按钮的 Click事件
响应代码
返回目录
7.3 数据控件 (Data)- Data控件的记录集
“增加记录”按钮的 Click事件响应代码流程图
返回目录
7.3 数据控件 (Data)- Data控件的记录集
3.查找 记录
? Find方法组 (适用于 Dynaset和 SnapShot类型的记录集 )
? FindFisrt:查找满足条件的第一条记录
? FindLast:查找满足条件的最后一条记录
? FindPrevious:当前记录起往前找满足条件的第一条记录
? FindNext:当前记录起往后找满足条件的第一条记录
语法格式,记录集, <Find方法 >条件表达式
例如, Data1.Recordset.FindFirst "class= '网络技术 '"
Data1.Recordset.FindNext "name Like'王 *'"
注:如果条件中包含变量, 则必须使用字符串连接符 &
className=, 网络技术,
Data1.Recordset.FindFirst "class=" & "'" & className & "'"
返回目录
7.3 数据控件 (Data)- Data控件的记录集
? NoMatch属性
用 Find方法组进行查询时, 如果未找到符合条件的记
录, 则该属性的值为 True,否则为 False。
例如:
Data1.Recordset.FindNext "name Like'王 *'"
If Data1.Recordset.NoMatch Then
MsgBox "没有姓王的学生 "
End If
返回目录
7.3 数据控件 (Data)- Data控件的记录集
? Seek方法 (适用于 Table类型记录集 )
格式,记录集,seek 比较运算符, <索引字段的取值 >
Seek方法是通过索引字段快速找到符合条件的记录,
所以在使用该方法前必须先打开其相关的索引 。
例如:
Data1.DatabaseName = "students.mdb "
Data1.RecordSource = "student"
Data1.RecordType = 0 '设置记录集类型为表类型
Data1.Refresh
Data1.Recordset.Index = "stuid " '打开名称为 stuid的索引
Data1.Recordset.Seek "=","013002"
返回目录
7.3 数据控件 (Data)- Data控件的记录集
[例 7.5] 在例 7.4的基础上进行修改,
增加一个登录窗体 FrmLog,
只有当用户输入 user表中正确的
用户名和相应的密码后, 才可以
进入 FrmXs(学生情况 )窗体 。
[操作步骤 ]
(1)在数据库中增加 user数据表,
返回目录
7.3 数据控件 (Data)- Data控件的记录集
(2) 添加新窗体, 保存为 FrmLog。
属性设置见教材表 7.6
(3) 执行, 工程 → 属性, 命令,
,启动对象, 选 FrmLog
(4) 编写, 确定, 按钮的 Click事件响应代码
验证用户名是否为空
验证密码是否为空
查找用户名是否存在
若不存在, 给出, 非法用户, 的提示信息
如果存在还需判断密码是否正确
不正确提示重新输入;正确则显示 FrmXs窗体
返回目录
7.4 应用 SQL进行查询 - SELECT语句
SELECT语句的语法:
Select 字段 1,字段 2..., 字段 n
From 表名
Where 查询条件
Group By 分组字段
Order By 字段 [Asc|Desc]
例如:
Select * from student
Select name,id,class from student where sex= '女 '
Select name from student where sex='女 ' and class= '网络技术 '
返回目录
7.4 应用 SQL进行查询 - 多表查询
多表查询:查询时将两个以上表中的内容通过相关字段
连接在一起 。 各字段名前应加上相应的表名,表名,字段名
例如:
Select student.*,class.classname From student,class
Where student.classid = class.classid
[例 7.9] 以例 7.5为基础对 Xs.Vbp工程进行修改, 要求:
? 用 Select语句描述数据源:连接 student和 class表中的数据
? 多表查询的结果通过 FrmXs窗体显示, 并且不允许用户对显
示的数据进行修改
? 新增一个 FrmEdit窗体, 在该窗体中完成增加记录或修改记
录的操作
返回目录
7.4 应用 SQL进行查询 - 多表查询
[操作步骤 ]
(1) 修改 Students.mdb数据库
? 根据教材表 7.10修改 student数据表:
删除 class字段;增加 classid字段, 宽度为 2,,顺序位置,
为 2
? 在 student数据表各记录的 classid字段中输入代码:
01 (表示, 网络技术, 班级 ),02 (表示, 汽车营销, 班级 )
? 根据表 7.11新建 class数据表, 并输入相应记录
返回目录
7.4 应用 SQL进行查询 - 多表查询
(2) 打开 Xs.Vbp,对 FrmXs窗体上的控件进行属性设置:
? 设置 Data1控件的 RecordSource属性:
Select student.*,class.classname From student,class
Where student.classid = class.classid
? 设置 Txt_class的 DateField
属性,classname
? 将各文本框控件的 Locked
属性设置为 True
返回目录
7.4 应用 SQL进行查询 - 多表查询
(3) 新增 FrmEdit窗体 (在该窗体中完成新增或修改操作 )
?,性别, 字段采用单选按钮控件数组 Opt_sex
? 班级通过下拉列表 (Cmd_class)选择
? Data1:DatabaseName 设为 Students.mdb, RecordSource 选
student,Visible设为 False
? Data2:DatabaseName 设为 Students.mdb, RecordSource 选
class,Visible设为 False
? 编写以下事件的响应代码:
窗体 Load事件
窗体 Activate(激活 )事件
,确定, 按钮的 Click事件
,返回, 按钮的 Click事件
返回目录
7.4 应用 SQL进行查询 - 多表查询
(4) 修改 FrmXs窗体中部分控件的事件响应代码
Private Sub Cmd_add_Click()
flag = 1, FrmEdit.Show 1
End Sub
Private Sub Cmd_Dele_Click()
MsgBox "该功能有待开发 ! ",,"删除记录 "
End Sub
Private Sub Cmd_Update_Click()
flag = 2, FrmEdit.Show 1
End Sub
(5) 添加 var.bas模块 (定义全局变量 )
Public flag As Integer
返回目录
7.4 应用 SQL进行查询 - 使用 MSFlexGrid控件
1,添加 MsFlexGrid控件
(1) 执行, 工程 → 部件, 命令
(2) 选, Microsoft FlexGrid Control 6.0”
2,MSFlexGrid控件的常用属性
? AllowUserResizing:设置是否允许对行列大小进行调整
? Col,Row:设定或访问当前单元格
? Cols,Rows:返回或设置控件中的列和行的总数
? ColSel,RowSel,设置选中的列或行
? Clip:返回或设置控件选定区域中的内容
? ColWidth,RowHeight:返回或设置某列的列宽或某行的行高
? ColAlignment:返回或设置某一列的对齐格式
? Sort:根据设定的属性值排序所选择的行
返回目录
7.4 应用 SQL进行查询 - 使用 MSFlexGrid控件
3,MSFlexGrid控件的常用方法
? AddItem:在控件中添加一行
例如, 以下代码将数据添加到第 1行 (原第 1行变成第 2行 ):
MSFlexGrid1.AddItem,何君, & Chr(9) &,男, & Chr(9) &,上海,,
1
注:如果代码最后的 1省略, 则数据将被添加到最后一行
?Clear:清除控件中的所有内容 (不清除行和列 )
? RemoveIte:删除控件中指定的行 。
注:固定行 (即呈灰色的行 )不可删除 。 例如, 执行以下代码
将报错, 不能在固定行上使用 RemoveItem”的对话框:
MSFlexGrid1.RemoveItem 0
返回目录
7.4 应用 SQL进行查询 - 使用 MSFlexGrid控件
[例 7.10] 以例 7.9为基础对 Xs.Vbp工程进行修改, 要求:
? 新增 FrmBrowse窗体, 在该窗体中完成按班级的查询操作
? 在 FrmXs窗体上增加可进入查询窗体的, 查询记录, 按钮
[操作步骤 ]
(1) 打开 Xs.Vbp,新增 FrmBrowse窗体:
? 设计窗体界面, 属性设置见教材表 7.12
返回目录
7.4 应用 SQL进行查询 - 使用 MSFlexGrid控件
?编写窗体激活事件的响应代码 Form_Activate( )
默认查询全部记录
返回目录
7.4 应用 SQL进行查询 - 使用 MSFlexGrid控件
?编写的, 选择查询班级, 组合框的 Click事件响应代码
Cmb_class_Click( )
?编写, 返回, 按钮的 Click事件响应代码 Cmd_exit( )
返回目录
7.4 应用 SQL进行查询 - 使用 MSFlexGrid控件
(2) 在 FrmXs窗体上增加可进入查询窗体的, 查询记录, 按

Cmd_Browse,并编写相应的事件响应代码,
Private Sub Cmd_Browse_Click()
FrmBrowse.Show 1
End Sub
返回目录
7.5 数据访问对象 (DAO)
DAO,Data Access Objects(数据访问对象 )
1,使用 DAO的前提
,工程, → 引用,, 选中 Microsoft DAO 3.51 Object Library”
返回目录
7.5 数据访问对象 (DAO)
2,创建工作区
确定引用库之后, 可利用数据库引擎对象 (DBEngine)创
建工作区对象 (WorkSpace对象 ):
Set workspace对象变量 = CreateWorkspace(name,user,
password,type)
注:
缺省的工作区对象是 Jet类型的 DBEngine.WorkSpaces(0),
对于简单的数据库应用程序来说, 无需创建 WorkSpace对象,
可直接使用系统缺省工作区的属性和方法 。
返回目录
7.5 数据访问对象 (DAO)
3,打开数据库
利用 WorkSpace对象的 OpenDatabase方法, 常用格式:
Set 数据库对象 = 工作区对象,OpenDatabase (dbname,options)
其中:
dbname:需打开的数据库名称, 包含路径 。
Options:对于 Jet类型的 Workspace对象, 该参数用来指
定数据库的打开方式 。 取值为 False(默认值 )时, 为共享方式;
否则为独占方式 。
例如,
Set db = DBEngine.Workspaces(0).OpenDatabase("testdb.mdb")
返回目录
7.5 数据访问对象 (DAO)
4,创建记录集
利用数据库对象的 OpenRecordset方法, 常用格式:
Set 记录集对象 = 数据库对象,OpenRecordset (source,type)
其中:
source:指定记录集内容 (数据表名, 查询名或 SQL语句 )
type:指定记录集类型, 默认打开表型记录集
例如,
Set db = DBEngine.Workspaces(0).OpenDatabase("testdb.mdb")
Set rsSele = db.OpenRecordset("TestSeleDb")
返回目录
7.5 数据访问对象 (DAO)
5,记录集对象的属性与方法
大多与 Data控件的 Recordset对象的属性及方法一致
[例 7.11] 从 TestDB.mdb(考试题库 )中随机动态抽取指定数
目的选择题和填充题到 Test.mdb(学生考试库 )
注:数据库结构见教材
[操作步骤 ]
(1) 新建工程
?设计窗体
?工程存为 TestSele.vbp
窗体存为 FrmSele.frm
返回目录
7.5 数据访问对象 (DAO)
(2) 引用 DAO对象库
,工程, → 引用,, 选中 Microsoft DAO 3.51 Object
Library”
(3) 编写程序代码
?使用 DAO打开题库和学生考试库
?清空学生考试库
?打开进行查询的相关的索引
?生成考试库中的选择题表
?生成考试库中的填充题表
?关闭试题库和学生考试库,
并给出选题完成的提示信息
返回目录
7.6 ADO数据控件 - ADO使用基础
ADO,ActiveX Data Objects(ActiveX数据对象 )
1,使用 ADO数据控件
(1),工程, → 部件,
(2) 点击工具箱中
在窗体上画出 ADO对象
返回目录
7.6 ADO数据控件 - ADO使用基础
(3) 设置窗体上 ADO对象的 ConnectionString属性
返回目录
7.6 ADO数据控件 - ADO使用基础
返回目录
7.6 ADO数据控件 - ADO使用基础
(4) 设置窗体上 ADO对象的 RecordSource属性
返回目录
选择数据表为记录源 由 SQL查询来确定记录源
7.6 ADO数据控件 - ADO使用基础
[例 7.12] 用 ADO控件对 TestDB.mdb中的 TestseleDb表进行
增加, 修改, 删除, 跳转等操作 。
[操作步骤 ]
(1) 新建工程
?设计窗体
?设置 Adodc控件的属性
?设置绑定控件的属性
?工程存为 TestManage.vbp
窗体存为 FrmManage.frm
(2) 编写事件响应代码
?窗体 Load事件
?各按钮的 Click事件
返回目录
7.6 ADO数据控件 - 新增绑定控件的应用
DataGrid控件与 ADO控件绑定后, 可一次显示多条记录,
并允许对显示的记录进行编辑修改, 并可将修改的结果自动
更新到数据库中 。
使用 DataGrid控件:
(1),工程, → 部件,
(2) 点击工具箱中
(3) 在窗体上画出
DataGrid对象
返回目录
7.6 ADO数据控件 - 新增绑定控件的应用
[例 7.13] 修改例 7.12:在原窗体上增加一个, 浏览, 按钮,
再新增一个 FrmBrowse窗体, 单击, 浏览, 按钮, 可打开多
记录浏览窗口 。
返回目录
7.6 ADO数据控件 - 新增绑定控件的应用
[操作步骤 ]
(1) 在原窗体上增加一个, 浏览, 按钮, 名称为 Cmd_Browse
(2) 新增一个窗体 FrmBrowse.frm
?添加 adodc控件,
DataGrid控件及命令按钮
(3) 增加事件响应代码
?FrmManage窗体上
,浏览, 按钮的 Click事件
FrmBrowse.Show 1
?FrmBrowse窗体上
,返回, 按钮的 Click事件
Unload Me
返回目录