第4章窗体

Download Report

Transcript 第4章窗体

第8章 VBA数据库编程
本章要点:
Docmd对象介绍
VBA数据库访问技术
综合案例
1
8.1 Docmd对象介绍













1. Docmd对象的调用格式
DoCmd.方法名 参数表
Docmd对象常用的操作方法
(1) 打开窗体—OpenForm方法
(2) 打开报表—OpenReport方法
(3) 打开查询—OpenQuery方法
(4) 打开表—OpenTable方法
(5) 打开模块—OpenModule方法
(6) 运行菜单或工具栏命令—RunCommand方法
(7) 运行宏—RunMacro方法
(8) 执行SQL命令—RunSQL方法
(9) 关闭打开的对象—Close方法
(10) 退出 Microsoft Access—Quit方法
2
8.1 Docmd对象介绍
 (1) 打开窗体—OpenForm方法
 Docmd.OpenForm FormName
[,Vew][,FilterName][,WhereCondition][,DataMode]
 [,WindowMode]
 参数说明:
 DataMode:可选项。窗体数据的输入模式
 例8-1
 DoCmd.OpenForm "学生基本信息", , , , , acDialog
常量
值
含义
acWindowNormal
0
默认值。正常窗口模式
acHidden
1
隐藏窗口模式
acIcon
2
最小化窗口模式
acDialog
3
对话框框模式
3
8.1 Docmd对象介绍
 (2) 打开报表—OpenReport方法
 命令格式:Docmd.OpenReport ReportName
[,View][,FilterName][,WhereCondition]
 参数说明:
 ReportName :字符串表达式,代表当前数据库中报表名称。
 View:可选项,打开报表的模式。
 例8-2
 Docmd.OpenReport "学生信息报表",acViewPreview
常量
值
含义
acViewNormal
0
默认值,打印视图打开
acViewDesign
1
设计视图打开
acViewPreview
2
预览视图打开
4
8.1 Docmd对象介绍
 (3) 打开查询—OpenQuery方法
 命令格式:Docmd.OpenQuery QueryName [,View]
[,DataMode]
 参数说明:
 QueryName :字符串表达式,代表当前数据库中查
询名称。
 DataMode:可选项。指定三种输入数据模式:
acAdd(追加)、acEdit(编辑)、acReadOnly(只
读)。
 例8-3
 Docmd.OpenQuery "学生选修成绩",, acReadOnly
5
8.1 Docmd对象介绍
 (4) 打开表—OpenTable方法
 命令格式:Docmd.OpenTable TableName [,View]
[,DataMode]
 参数说明:
 TableName:字符串表达式,代表当前数据库中表名
称。
 例8-4
 DoCmd.OpenTable "学生"
6
8.1 Docmd对象介绍
 (5) 打开模块—OpenModule方法
 命令格式:Docmd.OpenModule
[ModuleName][,ProcedureName]
 参数说明:
 ModuleName:字符串表达式,代表当前数据库中模块名
称。若缺省,则在数据库的标准模块中搜索全部由
ModuleName参数指定的过程,并且打开包含这些过程的
模块。
 ProcedureName:字符串表达式,代表过程名称。若缺省,
则打开指定模块的通用声明部分。
 两个参数至少要设置一个。
 例8-5 打开“函数调用”模块的“TryOut”过程。
 DoCmd.OpenModule "函数调用", "TryOut"
7
8.1 Docmd对象介绍




(6) 运行菜单或工具栏命令—RunCommand方法
命令格式:Docmd.RunComand Command
参数说明:
Command:固有常量。指定要执行的内置菜单或工
具栏命令。
 例8-6 执行Access的“退出”命令
 DoCmd.RunCommand acCmdExit
8
8.1 Docmd对象介绍
 (7) 运行宏—RunMacro方法
 命令格式:Docmd.RunMacro
MacroName[,RepeatCount][,RepeatExpression]
 参数说明:
 MacroName: 字符串表达式,代表当前数据库中宏名称。
 RepeatCount:可选项,数值表达式,是一个整型值,代
表宏将要运行的次数。
 RepeatExpression:可选项,用来指定重复运行宏的条件,
当条件为False(0)时,停止运行宏。
 例8-7 重复运行“宏1”两次。
 DoCmd.RunMacro "宏1", 2
9
8.1 Docmd对象介绍
(8) 执行SQL命令—RunSQL方法
命令格式:Docmd.RunSQL sqlStatement[,Usetransaction]
参数说明:
sqlStatement:字符串表达式,代表操作查询或数据库定
义查询的SQL语句。
 Usetransaction:可选项,该参数为True(-1)时,将在事务
处理中包含该查询。否则,不使用事务处理。省缺时,
该值为True。
 例8-8 删除“学生”表中性别为男的学生记录。
 DoCmd.RunSQL "Delete From 学生 Where 性别='男'"




10
8.1 Docmd对象介绍
 (9) 关闭打开的对象—Close方法
 命令格式:Docmd .Close [ObjectType][, ObjectName][,
Save]
 参数说明:
 ObjectType:要关闭的对象类型
 ObjectName:字符串表达式,代表要关闭的对象名称。
 Save:指定对象关闭时的保存方式。取值为
acSavePrompt(提示保存) 、acSaveYes(保存)。
acSaveNo(不保存)三种。默认值为acSavePrompt。
 如果参数都缺省,则关闭当前打开的对象。
 例8-9 关闭打开的“学生”表。
 DoCmd.Close acTable, "学生"
11
8.1 Docmd对象介绍
 (10) 退出 Microsoft Access—Quit方法
 命令格式:Docmd.Quit
12
8.2 VBA数据库访问技术
 8.2.1 数据库访问技术概述
 常用的数据库访问接口技术包括ODBC API、DAO、
ADO等。
 3. ADO
 ActiveX数据对象(ActiveX Data Object)简称ADO,
是Microsoft公司开发的基于面向对象数据库编程的
新接口。ADO扩展了DAO所使用的对象模型,具有
更加简单、灵活的操作性能。ADO建立在COM体系
结构之上,它的所有接口都是自动化接口,因此在
C++、Visual Basic、Delphi等支持COM的开发语言中
通过接口都可以访问到ADO。ADO是目前使用最普
遍的数据库访问接口技术。
13
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主
要对象的使用
 (1) Connection对象
 ①Connection对象的声明
 声明的语法格式如下:
 Dim对象变量名As ADODB.Connection
 其中,“对象变量名”为任意合法的VBA变量名。
 例如:Dim cnn As ADODB.Connection
14
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主
要对象的使用
 (1) Connection对象
 ②Connection对象实例化
 在Connection对象声明后,需要实例化Connection对
象后才能使用,例如:
 Set cnn=New ADODB.Connection
 声明并实例化一个Connection对象,也可写成:
 Dim对象变量名As New ADODB.Connection
15
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主要对
象的使用
 (1) Connection对象
 ③Connection对象的主要属性
 Connection对象的主要属性有ConnectionString、
DefaultDatabase、Provider和State。
 DefaultDatabase属性:用来指定Connection对象的默认数
据库。
 例如,要连接到“学生成绩管理”数据库,可以用如下代码
设置cnn(Connection对象)的DefaultDatabase属性值。
 cnn. DefaultDatabase="学生成绩管理.accdb"
16
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主要对
象的使用
 (1) Connection对象
 ④Connection对象的主要方法
 Connection对象的主要方法有:Open、Execute和Close。
 说明:以下语法格式中的“对象名”是指已经定义的
Connection对象名。
 Open方法:
 Open方法用来建立与数据库的连接。语法格式如下:
 对象名.Open [ConnectionString] [,UserID][,PassWord][,
Options]
17
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主
要对象的使用
 (2) Recordset对象
 当记录集对象(RecordSet)和Connection对象一起
使用时,必须先声明并实例化一个记录集对象。
 ①RecordSet对象的声明
 声明格式如下:
 Dim 对象变量名 AS ADODB.Recordset
 例如:Dim rs As ADODB.Recordset
18
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主要对
象的使用
 (2) Recordset对象
 当记录集对象(RecordSet)和Connection对象一起使用
时,必须先声明并实例化一个记录集对象。
 ②RecordSet对象实例化
 在RecordSet对象声明后,需实例化RecordSet对象后才能
使用,例如:
 Set rs=New ADODB. Recordset
 声明并实例化一个Recordset对象也可直接写成:
 Dim对象变量名As New ADODB.Recordset
 在任何时候,打开的RecordSet对象所指的当前记录均为
整个记录集中的单个记录。
19
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主
要对象的使用
 (2) Recordset对象
 当记录集对象(RecordSet)和Connection对象一起
使用时,必须先声明并实例化一个记录集对象。
 ③RecordSet对象的主要属性
 BOF和EOF属性
 当BOF为True时,记录指针在记录集第一条记录前,
而EOF为True时表明记录指针在最后一条记录后。
20
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主要对象的
使用
 (2) Recordset对象
 当记录集对象(RecordSet)和Connection对象一起使用时,必
须先声明并实例化一个记录集对象。
 ③RecordSet对象的主要属性
 Filter属性
 用于指定记录集的过滤条件,只有满足了条件的记录才会显示
出来,其语法格式为:
 记录集对象名.Filter=条件
 例8-10 只显示记录集对象rs中部门名称为“财务部”的员工信息。
 Dim rs AS New ADODB.Recordset
 rs.Filter='部门名称=财务部'
21
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主要对
象的使用
 (2) Recordset对象
 当记录集对象(RecordSet)和Connection对象一起使用
时,必须先声明并实例化一个记录集对象。
 ③RecordSet对象的主要方法
 Open方法
 打开一个记录集,需要使用Open方法,其语法格式如下:
 对象名.Open
[Source][,ActiveConnection][,CursorType][,LockType][,Op
tions]
22
8.2 VBA数据库访问技术
 例8-11 在“学生成绩管理”数据库中使用RecordSet对象创建“学生”记
录集,在立即窗口中显示学生表的全部记录。
 Sub DemoRecordset()
 Dim cnn As ADODB.Connection ' 声明连接对象
 Dim rst As ADODB.Recordset
' 声明记录集对象
 Set cnn = New ADODB.Connection ' 实例化连接对象
 Set rst = New ADODB.Recordset ' 实例化记录集对象
 cnn.ConnectionString = "Provider= Microsoft.ACE.OLEDB.12.0;" & _
 "Persist Security Info=False;User ID=Admin;Data Source = F:\学生成
绩管理.accdb "
 cnn.Open ' 打开学生成绩管理数据库
 rst.Open "SELECT * FROM 学生", cnn ' 用RecordSet对象的Open方
法打开记录集
 Debug.Print rst.GetString ' 在立即窗口打印记录集
 rst.Close
' 关闭记录集
 Set rst = Nothing
' 回收rs对象的内存占有
 cnn.Close
' 关闭连接
 Set cnn = Nothing
' 回收cnn对象的内存占有
23
 End Sub
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主
要对象的使用
 (2) Recordset对象
 当记录集对象(RecordSet)和Connection对象一起
使用时,必须先声明并实例化一个记录集对象。
 ③RecordSet对象的主要方法
 AddNew方法
 添加新记录需要使用AddNew方法,其语法格式如下:
 对象名.AddNew [FieldList][,Values]
24
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主要对
象的使用
 (2) Recordset对象
 当记录集对象(RecordSet)和Connection对象一起使用
时,必须先声明并实例化一个记录集对象。
 ③RecordSet对象的主要方法
 Update方法
 更新记录需要使用Update方法,其语法格式如下:
 对象名.Update
 更新记录后,应使用Update方法将所添加的记录数据存
储在数据库中。
25
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主
要对象的使用
 (2) Recordset对象
 当记录集对象(RecordSet)和Connection对象一起
使用时,必须先声明并实例化一个记录集对象。
 ③RecordSet对象的主要方法
 Delete方法
 删除记录需要使用Delete方法,其语法格式如下:
 对象名.Delete [AffectRecords]
26
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主要对象的
使用
 (2) Recordset对象
 当记录集对象(RecordSet)和Connection对象一起使用时,必
须先声明并实例化一个记录集对象。
 ④对RecordSet对象字段的引用
 对记录集进行操作涉及到记录集中字段的引用。访问Recordset
对象中的字段,可以使用字段编号,字段编号从0开始。假设
Recordset对象rs的第一个字段名为“学号”,则引用该字段可以
使用下列多种方法:
 rs("学号")
 rs(0)
 rs.Fields.Item("学号")
 rs.Fields.Item(0)
27
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主要对
象的使用
 (3) Command对象
 ①Command对象的声明
 Command对象的声明格式如下:
 Dim 对象变量名As ADODB.Command
 例如:Dim cmd As ADODB.Command
 ②Command对象的实例化
 在Command对象声明后,需实例化Command对象后才能
使用,例如:
 Set cmd=New ADODB.Command
 声明并实例化一个Recordset对象也可直接写成:
 Dim 对象变量名 As New ADODB.Command
28
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主
要对象的使用
 (3) Command对象
 ②Command对象的实例化
 在Command对象声明后,需实例化Command对象后
才能使用,例如:
 Set cmd=New ADODB.Command
 声明并实例化一个Recordset对象也可直接写成:
 Dim 对象变量名 As New ADODB.Command
29
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主
要对象的使用
 (3) Command对象
 ③Command对象的常用属性
 Command对象的常用属性如下:
 ActiveConnection属性
 CommandText属性
 State属性
30
8.2 VBA数据库访问技术
 8.2.2 ADO对象模型
 详细介绍Connection、Command、Recordset三个主要对
象的使用
 (3) Command对象
 ④Command对象的常用方法
 Execute方法
 对于以记录集返回的Command对象:
 Set 记录集对象名
=command.Execute([RecordsAffected][,Parameters][,Opti
ons])
 对于不以记录集返回的Command对象:
 command.Execute
[RecordsAffected][,Parameters][ ,Options]
31
8.2 VBA数据库访问技术
 例8-12在“学生成绩管理”数据库中,使用Command对象获取“学生”记录集。
 Sub DemoCommand()
 Dim cnn As ADODB.Connection:Dim rst As ADODB.Recordset:Dim cmd As
ADODB.Command
 Set cnn = New ADODB.Connection:Set rst = New ADODB.Recordset
 Set cmd = New ADODB.Command
 cnn.ConnectionString = "Provider= Microsoft.ACE.OLEDB.12.0;" & _
 "Persist Security Info=False;User ID=Admin;Data Source = F:\学生成绩管理.accdb "
 cmd.CommandText = "SELECT * FROM 学生"
' 使用SQL语句设置数据源
 cmd.ActiveConnection = cnn.ConnectionString
 Set rst = cmd.Execute
' 使用Execute方法执行SQL语句,返回记录集
 Debug.Print rst.GetString
' 在立即窗口中显示记录集全部记录
 rst.Close
 Set rst = Nothing:Set cmd = Nothing:Set cnn = Nothing
 End Sub
32
8.2.3 利用ADO访问数据库的步骤
 添加对ADO的引用,只需要依次选择VBE窗口的“工具”|“引用”菜
单命令,在弹出的“引用”对话框中选中“Microsoft ActiveX Data
Objects 2.1 Library”选项(有前置的√),按“确定”按钮即可。
 在添加了ADO对象的引用后,在VBA中利用ADO访问数据库的基
本步骤如下:
 1. 定义和创建ADO对象实例变量
 2. 设置连接参数并打开连接
 3. 设置命令参数并执行命令
 4. 打开记录集,并操作记录集
 5. 收尾工作
33
8.2.3 利用ADO访问数据库的步骤
 步骤如下:
 1. 定义和创建ADO对象实例变量
 一般需要创建Connection对象、Recordset对象、Command对象、
Field对象等。
 创建Connection对象 例如:Dim cnn As New ADODB.Connection
 创建Recordset对象,例如:Dim rs As New ADODB.Recordset
 创建Command对象,例如:Dim cmd As New ADODB.Command
 创建Field对象,例如:Dim fd As ADODB.Field
34
8.2.3 利用ADO访问数据库的步骤






步骤如下:
2. 设置连接参数并打开连接
假定cnn为连接对象,与数据库的连接,可以参照以下代码:
cnn.ConnectionString =连接参数
cnn.Open
如果与当前数据库连接则连接参数为
CurrentProject.Connection
35
8.2.3 利用ADO访问数据库的步骤
 步骤如下:
 3. 设置命令参数并执行命令
 一般需要设置命令对象的活动连接、类型及查询等属性。可以参
照以下代码:
 With cmd
 .ActiveConnection=连接串
 .CommandType=命令类型参数
 .CommandText=查询命令串
 End With
 Cmd.Execute
36
8.2.3 利用ADO访问数据库的步骤
 步骤如下:
 4. 打开记录集,并操作记录集
 打开记录集,可以在Connection对象上打开记录集,也可以在
Command对象上打开记录集。
 在Connection对象打开记录集可以参照以下代码:
 cnn.Open ' 打开一个连接
 rs.Open 查询串等参数 ' 打开记录集
 在Commnd对象上打开记录集,首先要设置命令对象的活动连接、类型
及查询等属性,可以参照以下代码:
 rs.Open cmd,其他参数
 操作记录集(检索、追加、更新、删除),一般需要使用DO循环来完
成,可参照代码如下:
 Do While Not rs.Eof ' 利用循环遍历整个记录集直到末尾
 …
' 安排字段数据的各类操作
 rs.MoveNext
' 记录指针指向下一条记录
37
 Loop
8.2.3 利用ADO访问数据库的步骤
 步骤如下:
 5. 收尾工作
 在应用程序关闭前,应该关闭并释放分配给ADO对象的资源,操作系统
回收这些资源并分配给其他应用程序。
 对象变量名.Close ’关闭对象语法
 Set对象变量名=Nothing ’回收资源代码如
 通常情况下要关闭并释放对象的有:Connection对象、RecordSet对象、
Command对象等,可参照代码如下:
 rs.Close
' 关闭记录集
 cnn.Close
' 关闭连接
 set rs=Nothing ' 回收rs对象的内存占有
 set cmd=Nothing ' 回收cmd对象的内存占有
 set cnn=Nothing ' 回收cnn对象的内存占有
38
8.3 综合案例
 案例 编写程序完成用户表的信息查询、添加、更新、删除
等操作。
操作步骤如下:
(1) 在学生成绩管理数据库中建立“用户”表,表结构如图 8-2 所示。
图 8-2 用户表结构
(2) 建立用户信息窗体,窗体界面如 8-3 所示。
39
8.3 综合案例
 案例 编写程序完成用户表的信息查询、添加、更新、删除
等操作。
(3) 设置属性,如表 8-12 所示。
表 8-12 控件及主要属性设置
控件
名称
属性及属性值
标签
Label1
标题:用户名
标签
Label2
标题:密码
文本框
Tname
名称:Tname
文本框
Tpass
名称:Tpass
命令按钮
CmdAdd
名称:CmdAdd
标题:添加记录
命令按钮
CmdDel
名称:CmdDel
标题:删除记录
命令按钮
CmdFind
名称:CmdFind
标题:查找记录
命令按钮
CmdUpdate
名称:CmdUpdate 标题:更新记录
40
输入掩码:密码
8.3 综合案例






(4) 编写代码如下:
Private cn As New ADODB.Connection
private rs As New ADODB.Recordset
private strName As ADODB.Field, strPass As ADODB.Field
private strSQL As String
‘定义窗体级变量
41
8.3 综合案例
 Private Sub CmdADD_Click() ' 追加记录

Dim cmd As New ADODB.Command ' 创建命令对象cmd

Set rs.ActiveConnection = cn
' 设置记录集对象的当前连接

If IsNull(tuser) And IsNull(tpass) Then ' 用户名、密码同时为空

MsgBox "请输入用户名或密码", vbCritical

Else

rs.Open "Select 用户名 From 用户 Where 用户名='" + tuser + "'" ' 打开记录集

If Not rs.EOF Then ' 找到,说明表中已有该用户,

MsgBox "你输入的用户名已存在,不能新增加!", vbCritical

Else
' 没有找到,新增记录

cmd.ActiveConnection = cn

strSQL = "Insert Into 用户(用户名,密码) Values('" + tuser + "','" + tpass + "')"

cmd.CommandText = strSQL

cmd.Execute ' 执行插入记录操作

MsgBox "添加成功,请继续!"

End If

rs.Close

Set rs = Nothing

End If
 End Sub
42
















8.3 综合案例
Private Sub cmddel_Click() ' 删除记录
Set rs.ActiveConnection = cn
strSQL = "Select 用户名 From 用户 Where 用户名='" + tuser + "'" +_
" and 密码='" + tpass + "'"
' 打开用户名与密码与相应文本框值一样的记录集
rs.Open strSQL, , adOpenKeyset, adLockOptimistic
If rs.EOF Then
MsgBox "你输入的用户与密码不存在,不能删除!", vbCritical
Else
rs.Delete
' 删除
rs.Update
' 更新
MsgBox "删除成功"
End If
rs.Close
Set rs = Nothing
43
End Sub
本章小结
 Docmd对象是Access中的重要对象,在VBA编程中通过调
用该对象的内部方法实现对Access数据库的灵活操作,本
章介绍了该对象的调用格式及常用的操作方法。
 常用的数据库访问接口技术包括ODBC API、DAO、ADO等,
本章对数据库访问技术进行了概述,介绍了ADO对象模型
中Connection、Command、Recordset三个重要对象,归
纳出利用ADO访问数据库的基本步骤,最后给出一个在
VBA中访问数据库的简单实例。
44
习题















一、选择题
1.ADO对象模型层次中可以打开RecordSet对象的是( )。
A.只能是Connection对象
B.只能是Command对象
C.可以是Connection对象和Command对象
D.不存在
2.ADO对象模型包括Connection、Recordset和( )。
A.Database
B.Workspace
C.Command
D.Fiel
3.某窗体中有一个命令按钮,在窗体视图中单击此命令按钮打开一个
查询,需要执行的操作是( )。
A.OpenqQuery
B.OpenForm
C.OpenTable
D.OpenReport
4.在VBA中,实现窗体打开操作的命令是( )。
A.Do.Openform
B.Docmd.OpenForm
C.OpenForm
D.DoOpen.Form
45
习题
 一、选择题
 1.ADO对象模型层次中可以打开RecordSet对象的是( )。
 A.只能是Connection对象
B.只能是Command
对象
 C.可以是Connection对象和Command对象 D.不存在
 2.ADO对象模型包括Connection、Recordset和( )。
 A.Database
B.Workspace
 C.Command
D.Fiel
 3.某窗体中有一个命令按钮,在窗体视图中单击此命令按钮打
开一个查询,需要执行的操作是( )。
 A.OpenqQuery
B.OpenForm
 C.OpenTable
D.OpenReport
 4.在VBA中,实现窗体打开操作的命令是( )。
 A.Do.Openform
B.Docmd.OpenForm
 C.OpenForm
D.DoOpen.Form
46