资源预览内容
第1页 / 共136页
第2页 / 共136页
第3页 / 共136页
第4页 / 共136页
第5页 / 共136页
第6页 / 共136页
第7页 / 共136页
第8页 / 共136页
第9页 / 共136页
第10页 / 共136页
亲,该文档总共136页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
计算机基础与计算机基础与Access数据库程序设计数据库程序设计第第7章章 宏及宏及VBA编程编程计算机基础与Access数据库程序设计7ppt课件(全)目目 录录7.1 宏宏7.2VBA程序结构程序结构 7.3VBA程序中的运算量、函数、语句程序中的运算量、函数、语句 7.4VBA程序流程控制程序流程控制 7.5过程及过程参数过程及过程参数7.6窗体、控件事件编程窗体、控件事件编程 7.7数据库编程数据库编程 计算机基础与Access数据库程序设计7ppt课件(全)7.1宏宏 宏(Macro)是由一个或多个操作组成的集合,其中的每个操作都能实现特定的功能,例如打开某个窗体或打印某个报表等。宏操作一般也叫宏命令。Access为开发人员提供了一些预定义的宏命令,这些宏命令可以直接在宏中使用。7.1.1 宏的类型宏的类型 宏可以被分成3种基本类型:简单宏、宏组、条件宏。 简单宏由若干基本操作组成,这些操作依次执行。 宏组是由若干个宏组成的集合,其中的每个宏都可以独立运行,相互之间没有必然的联系。宏组更象是一个对宏进行分类管理的管理器,通过它可以把一些功能类似的宏组织到一起。计算机基础与Access数据库程序设计7ppt课件(全) 简单宏在执行时不进行任何条件判断,其中的所有操作总是依次被执行一遍,然后结束。如果宏的某些操作可以依据特定条件执行,当条件成立时执行这些操作,条件不成立时不执行这些操作,这样的宏就叫做条件宏。 条件是一个计算结果为 True/False 的逻辑表达式,其中可以包含字段和窗体控件的值。条件宏会依据条件结果决定执行路径。7.1.2 常用宏命令常用宏命令 Access提供了丰富的宏命令,常用的宏命令如表7-1所示,需要熟记其中的宏命令。 宏命令一般也称为宏操作,可以直接在宏中使用(调用)。计算机基础与Access数据库程序设计7ppt课件(全)7.1.3 建立与运行宏建立与运行宏 可以在宏设计器(窗口)中设计宏,打开宏设计器的方法如下:(1) 在数据库操作界面选择“宏”对象。(2) 单击“新建”按钮或选择“插入”“宏”命令,即可打开宏设计器窗口,如左下图所示,将光标置于“操作”列时,相应单元格变为下拉表,可以从中选择需要的操作命令,如果操作有参数,在“操作参数”区域即自动列出相应参数,如右下图所示。计算机基础与Access数据库程序设计7ppt课件(全) 可以插入和删除操作行。插入行的方法如下:u 将光标置于待插入行位置,然后选择“插入”“行”命令或单击“插入行”按钮。u 右击待插入行位置,在弹出的快捷菜单中选择“插入行”命令。 执行上述任一操作均可在当前行之前插入一个空白行。 删除行的方法如下:u 将光标置于待删除行位置,然后选择“编辑”“删除行”命令或单击“删除行”按钮。u 右击待删除行位置,在弹出的快捷菜单中选择“删除行”命令。 执行上述任一操作均可删除相应的行。计算机基础与Access数据库程序设计7ppt课件(全)1. 建立简单宏建立简单宏 简单宏没有参数,也没有条件,如beep、FindNext、StopMacro等操作均没有参数。例如,如下图所示的宏将先发出嘟嘟声,然后终止宏操作。 在运行宏之前需要先保存宏,单击“保存”工具栏按钮,或选择“文件”“保存”命令,或单击设计器窗口关闭按钮并在显示的保存确认对话框中选择“是”,均可打开“另存为”对话框。计算机基础与Access数据库程序设计7ppt课件(全)2. 建立带参数的宏建立带参数的宏 许多宏操作都具有参数,设计时需要指定相应的参数,以OpenForm操作为例,其参数如下图所示。u “窗体名称”参数用于指定要打开的窗体,可以直接输入窗体名,也可以单击下拉按钮从下拉表中选择窗体名。计算机基础与Access数据库程序设计7ppt课件(全)u “视图”用于指定打开方式,可以从下拉表中选择“窗体”、“设计”、“打印预览”、“数据表”、“数据透视表”或“数据透视图”。u “筛选名称”用于指定记录筛选条件,该筛选条件可以是一个查询或保存为查询的筛选条件。u “Where条件”用于设置SQL Where条件(不包含Where本身),任何符合SQL Where条件的表达式均可。u “数据模式”用于指定数据编辑方式,可以从下拉表中选择“增加”、“编辑”或“只读”,选择“只读”模式时不能添加或修改数据。u “窗口模式”用于设置窗体打开模式,可以从下拉表中选择“普通”、“隐藏”、“图标”或“对话框”。计算机基础与Access数据库程序设计7ppt课件(全) 假定按左下图所示的参数建立一个名为“编辑学生表”的宏(Where条件为:Year (tStudent!出生日期)1993),其运行效果如右下图所示,只有1993年以前出生的学生才能编辑,其他学生记录不能被编辑。计算机基础与Access数据库程序设计7ppt课件(全) 宏参数中可以包含窗体、报表中的控件值或控件属性值、表的字段等。假定一个名为Exa的窗体上有一个文本框控件Text1,引用该控件值的方法如下:Forms!Exa!Text1 上述表示方法的含义是窗体集合(Forms)中的Exa窗体上的Text1控件的值。 表的字段的引用方法形如:表名!字段名 报表上的控件值的引用方法与窗体类似,把Forms换成Reports即可。【例7-1】设计一个按指定出生年份编辑对应学生信息的窗体。计算机基础与Access数据库程序设计7ppt课件(全) 设计步骤如下:(1) 从学生表编辑窗体复制/粘贴生成一个新窗体“学生表筛选编辑”。(2) 在学生表筛选编辑窗体上添加一个文本框控件“出生年度”,设置其格式属性为“常规数字”,小数位数属性设置为0。(3) 在学生表筛选编辑窗体上添加一个命令按钮“筛选”,设置其标题为“筛选”。(4) 设计一个名为“出生年度筛选”的宏,宏操作为ApplyFilter,Where条件为“Year(出生日期)=Forms!学生表筛选编辑!出生年度”。(5) 打开学生表筛选编辑窗体,设置命令按钮“筛选”的“单击”事件过程为“出生年度筛选”宏。计算机基础与Access数据库程序设计7ppt课件(全)(6) 运行学生表筛选编辑窗体,输入出生年度,单击“筛选”按钮即可编辑出生年度为指定值的学生信息,如图所示。计算机基础与Access数据库程序设计7ppt课件(全)3. 建立条件宏建立条件宏 宏可以有运行条件,这就是条件宏。条件宏只在条件满足时才执行。在宏设计器窗口处于活动状态下选择“视图”“条件”命令或单击“条件”工具栏按钮,或右击宏设计器窗口标题栏并在弹出的快捷菜单中选择“条件”命令,即可在设计器窗口“操作”列之前增加一个条件列。例如,为“出生年度筛选”宏增加一个条件:当输入值大于1950时才进行筛选,如图所示。计算机基础与Access数据库程序设计7ppt课件(全) 增加了条件后,再次运行学生表筛选编辑窗体,只有当输入的出生年度为1950年之后时,单击“筛选”按钮才实际执行筛选操作,否则不执行筛选操作。4. 建立宏组建立宏组 可以把多个宏组织到一起形成宏组,其设计方法如下。(1) 打开宏设计器。(2) 在宏设计器中增加“宏名”列。在宏设计器窗口处于活动状态下选择“视图”“宏名”命令或单击“宏名”工具栏按钮,或右击宏设计器窗口标题栏并在弹出的快捷菜单中选择“宏名”菜单,即可在设计器窗口“操作”列之前(如果有“条件”列,则在“条件”列之前)增加一个宏名列。计算机基础与Access数据库程序设计7ppt课件(全)(3) 设计宏组中的每个宏。宏组中每个宏定义首行定义宏名,其他行不能定义宏名,一个宏从宏名定义行开始,到下一个宏名定义行(如果有)的前一行结束。 下图结出的是一个名为“宏组举例”的宏组,其中包含M1和M2两个宏。计算机基础与Access数据库程序设计7ppt课件(全) 运行调用宏组中的宏的方法是在宏名之前加宏组名前缀,例如,“宏组举例”中定义的两个宏的调用方法如下:宏组举例.M1宏组举例.M25. AutoExec自动执行宏自动执行宏 可以建立一个宏名为AutoExec(字母大小写不限)的宏,在打开数据库时,将首先打开启动窗体(如果在“启动”对话框中设置了启动窗体),然后会立即执行AutoExec宏。可以不设置启动窗体,而是利用Autoexec宏打开应用程序的初始窗体。一个数据库中只能建立一个Autoexec宏。计算机基础与Access数据库程序设计7ppt课件(全)6. 运行测试宏运行测试宏 在宏设计器窗口活动状态下,选择“运行”“运行”命令或单击“运行”按钮,即可运行当前正在设计的宏或宏组中的第一个宏。可以单步调试宏,操作步骤如下:(1) 打开或激活宏设计器窗口,假定打开“宏组举例”。(2) 选择“运行”“单步”命令或单击“单步”按钮,切换选中单步(“单步”工具栏按钮反相显示)。(3) 选择“运行”“运行”命令或单击“运行”按钮,即打开“单步执行宏”对话框,单击“单步执行”按钮执行当前操作,然后继续显示下一个操作,单击“停止”按钮终止运行,单击“继续”按钮执行当前操作并继续显示下一个操作。计算机基础与Access数据库程序设计7ppt课件(全)7.2 VBA程序结构程序结构 宏只能实现一些简单的处理功能,对于复杂的处理而言,很难通过宏来加以解决,这就需要利用VBA(Visual Basic for Application)应用程序来解决。 VBA程序是一个符合 VBA语法要求的语句的有限序列,其中的每个语句都有明确的操作功能并能被Access理解和执行。程序中语句序列一般也叫程序代码或代码。 VBA程序一般被分成不同的功能单位,叫做过程。过程可以单独被触发执行。 Access中可以有3类VBA程序:一是对象事件过程,二是独立子过程,三是独立函数过程。 事件过程属于对象的组成部分,它在对象事件发生时被触计算机基础与Access数据库程序设计7ppt课件(全)发执行一次。独立子过程和独立函数过程只能在模块中定义并可在其他程序代码中直接调用执行。7.2.1 对象事件过程对象事件过程 在面向对象程序设计中,对象是程序的基本组成单位,程序设计过程就是每一个对象的设计过程。对象包含属性、事件和方法。 属性用于定义对象的特征,每类对象都有许多属性,这些属性又可以分类进行设计,例如,窗体及窗体控件的属性窗口中就把属性分为“格式”、“数据”、“其他”等类别。 方法是对象可以执行的预定义操作,每类对象都有一系列方法可以调用执行,在Access对象设计中,一般不需要用户调用方法,但在设计VBA代码时,则可能需要调用对象方法以实现某种处理操作。计算机基础与Access数据库程序设计7ppt课件(全) 事件是对象可以响应的操作,每类对象都预定义了一系列事件。以命令按钮的“单击”事件为例,运行窗体时如果单击某一命令按钮,就触发了相应按钮的单击事件,这时就会执行为该事件指定的操作,这个操作可以是一个宏,也可以是一个事件过程(VBA过程)。 事件代码以Private Sub开始,以End Sub结束。 编辑对象的某一事件过程的操作方法有两种,第一种操作方法如下:(1) 打开对象的属性窗口,选择“事件”选项卡。(2) 将光标置于指定事件的编辑框,这时,编辑框变为下拉列表,从下拉列表中选择“事件过程”。计算机基础与Access数据库程序设计7ppt课件(全)(3) 单击编辑框右侧的浏览按钮,如左下图所示,即可打开Visual Basic编辑器及事件过程代码编辑窗口,如右下图所示。 第二种操作方法如下:(1) 右击相应控件,从弹出的快捷菜单中选择“事件生成器”命令。如果已经生成过事件代码则会打开事件代码编辑窗口;计算机基础与Access数据库程序设计7ppt课件(全)如果尚未生成事件代码,系统会打开“选择生成器”对话框,如图所示。(2) 单击选中对话框列表中“代码生成器”,单击“确定”按钮,即可打开Visual Basic编辑器及事件过程代码编辑窗口。(3) 在代码编辑窗口中可以通过对象选择下拉列表选择合适的对象,通过事件下拉列表选择待编辑代码的事件。计算机基础与Access数据库程序设计7ppt课件(全) 打开事件代码编辑窗口并确认对象及事件无误后,就可以输入对应的程序代码,输入完成后,关闭窗口即可。 对象事件过程是包含在对象之内的,是对象的组成部分。如果希望程序代码可以独立存在并为多个对象所使用,就需要设计独立模块和独立过程。7.2.2 模块与独立过程模块与独立过程 独立过程包括独立子过程和独立函数过程,均保存在模块对象中。一个模块可以保存多个独立子过程和独立函数过程。1. 模块模块 模块分为标准模块(简称模块)和类模块两种,本书不介计算机基础与Access数据库程序设计7ppt课件(全)绍类模块。模块(标准模块,下同)是VBA过程、声明、语句的集合,这些过程、声明、语句作为一个模块对象存储在一起。 模块的首部是选项设置及变量说明区,在此区域可以设置模块参数和定义模块变量、符号常量。 在选项设置及变量说明区之后是过程代码区,在此区域可以定义一个或多个独立子过程或独立函数过程。 过程之间不能有任何其他语句存在。 要设计VBA模块,首先要进入VBA开发环境,即VB编辑器。打开VB编辑器的方法有以下几种:u 选择“工具”“宏”“Visual Basic编辑器”命令或按Alt+F11计算机基础与Access数据库程序设计7ppt课件(全)键,均可打开Visual Basic编辑器,如图所示。u 右击数据库操作界面并在弹出的快捷菜单中选择“Visual Basic编辑器”命令同样可以打开Visual Basic编辑器。u 选择“插入”“模块”命令,或选择数据库操作界面中“模块”,然后单击“新建”工具栏按钮,可以在打开Visual Basic编计算机基础与Access数据库程序设计7ppt课件(全)辑器的同时打开新建模块代码编辑窗口,如图所示。u 选择数据库操作界面中的“模块”对象,双击已有的模块或单击选中已有模块,然后单击“设计”工具栏按钮,均可在打开Visual Basic编辑器的同时打开相应模块代码编辑窗口。 在Visual Basic编辑器中可以同时打开多个模块代码设计计算机基础与Access数据库程序设计7ppt课件(全)窗口。常用的编辑器操作如下:u 选择编辑器“插入”“模块”命令或选择编辑器“插入模块”按钮,可以插入一个新模块并打开相应的代码编辑窗口。u 选择编辑器“插入”“过程”命令或选择编辑器“插入过程”按钮,系统先打开一个“添加过程”对话框,如图所示。 输入过程名称并选择过程类型及其作用范围,然后单击“确定”按钮,即在当前活动的模块代码编辑窗口中插入一个新的过程框架。计算机基础与Access数据库程序设计7ppt课件(全)u 选择“文件”“保存”命令或单击“保存”按钮,可以保存所有模块。 可以关闭任一模块代码编辑窗口,这时并不保存模块代码。 可以在模块中定义独立子过程和独立函数过程。2. 独立子过程独立子过程 独立子过程可以完成某种处理请求,执行完成后,返回到调用语句的下一条语句继续执行。依据过程的作用范围不同,独立子过程可以分为公共过程和私有过程两种。公共的独立子过程框架形如:Public Sub qqq()End Sub计算机基础与Access数据库程序设计7ppt课件(全) 私有的独立子过程框架形如:Private Sub www()End Sub qqq、www为过程名,实际定义过程时过程名会有所变化。一个模块中的过程名不能重复。在框架的首尾语句行之间添加自己的设计代码即可。 独立子过程调用是在代码中直接把子过程名作为程序行即可。例如,调用www子过程只须把www作为一条语句即可。有参数的过程定义及其调用将在节介绍。 3. 独立函数过程独立函数过程 独立函数过程可以完成特定的计算处理并把计算结果返计算机基础与Access数据库程序设计7ppt课件(全)回给调用程序。独立函数过程同样可以分为公共过程和私有过程两种,公共函数过程框架形如:Public Function eee()End Function 私有函数过程框架形如:Private Function fff()End Sub 与子过程一样,eee、fff为过程名且不能与模块内的其他过程名重复。在框架的首尾语句行之间添加自己的设计代码即可。计算机基础与Access数据库程序设计7ppt课件(全) 独立函数过程可以在表达式中调用,调用形式是函数名后加括号。有参数的函数过程定义及其调用将在节介绍。4. 运行测试独立子过程运行测试独立子过程 可以运行测试独立子过程。将光标置于待运行子过程语句行,然后选择“运行”“运行子过程/用户窗体”命令或单击“运行子过程/用户窗体”按钮,即可运行相应的子过程。 7.3 VBA程序中的运算量、函数、语句程序中的运算量、函数、语句 无论是事件过程还是独立过程都需要设计者编写实际的程序代码以完成预定要求。程序是语句的有限序列,语句又是如何构成的呢?语句中一般包含语句定义符,表达式等,表达式中的运算量可以是常量、变量、对象属性、函数等。计算机基础与Access数据库程序设计7ppt课件(全) 在前面的章节中已经介绍了数据类型、常量、表达式等概念,本节不再重复介绍。7.3.1 常量、变量说明与变量、对象属性赋值常量、变量说明与变量、对象属性赋值 常量一般有两种形式,一种形式就是使用常量本身,另一种形式是使用符号常量。符号常量需要先定义、后使用。 变量是在程序中定义的,在程序运行期间取值可以被改变的运算量。和符号常量一样,变量也需要先定义、后使用。 符号常量和变量都有确定的数据类型,定义时既需要指定是什么,也要指定数据类型。一般把定义常量/变量叫做常量/变量说明,相应的语句叫做常量/变量说明语句。计算机基础与Access数据库程序设计7ppt课件(全)1. 常量、变量说明常量、变量说明 符号常量说明语句的语法格式如下:Public | Private Const As =, As = 变量说明语句的语法格式如下:Dim | Public | Private As , As Public、Private说明符只能用在模块首部的说明语句中,不能在过程内部使用。Dim既可以在模块首部使用,也可以在过程中使用。 在模块首部选项设置及变量说明区用Private或Dim说明计算机基础与Access数据库程序设计7ppt课件(全)的变量属于私有变量,可以在整个模块内使用,简称模块变量。如果希望某些模块变量可以在其他模块中使用,把Private或Dim换成Public即可,用Public说明的变量一般也叫全局变量。在过程内部说明的变量只能在该过程内部使用,一般叫做局部变量。 Private、Public说明常量的作用范围与说明变量相同。 常量名、变量名命名规则如下:u 第一个字符必须是英文字母或汉字。u 不能在名称中使用算术运算符(+,-,*,/,)及空格、句点(.)、惊叹号(!)、或 、&、$,# 等字符。u 名称的长度不能超过 255 个字符,一般以10个字符以内为宜。计算机基础与Access数据库程序设计7ppt课件(全)u 名称不能与VBA语句定义关键字(如Sub、Dim、Function等)相同,同一过程内的名称不能相同。 常量、变量说明中的数据类型定义符一般是一个英文单词(如表7-2所示,定长字符串须带一个整数参数)。 Boolean逻辑型String变长字符串型String * 定长字符串型Date日期型Currency货币型Byte字节型Integer整型计算机基础与Access数据库程序设计7ppt课件(全)Long长整型Single单精度型Double双精度型Variant变体型 常量说明有以下3种可能的形式(以单常量说明为例):(1) Public Const As =,说明全局常量。(2) Private Const As =,说明私有常量。(3) Const As =,说明私有常量。计算机基础与Access数据库程序设计7ppt课件(全)【例7-2】下列常量说明是否合法。(1) Public Const qqq As Integer=200(2) Const A1 As Double=2.234(3) Private Const A2# As Long=3456(4) Const ty As booLeaN=False(5) Const sc As String * 4 = 123456789【解答】(1) 说明一个整型公共常量qqq,其取值为200。(2) 说明一个私有双精度型常量A1,其取值为2.234。(3) 说明不合法,常量名包含非法字符#号。计算机基础与Access数据库程序设计7ppt课件(全)(4) 说明一个私有逻辑型变量ty,其初值为False。关键字输入时大小写无关,本题booLeaN是正确的。(5) 说明一个定长字符串常量sc,其值为字符串1234。虽然字符串初值为123456789,但因是定长字符串,所以只取其前4个字符。 在VBA代码中可以使用一些预定义常量,这些常量由系统定义且均以vb开头。程序中可以直接使用这些常量(常数)。 除了符号常量之外,还可以直接在表达式中使用常数,为区别这些常数的准确数据类型,一般在常数后面加类型说明符后缀。例如,1234表示货币常数1234,45.56#表示双精度常数45.56。计算机基础与Access数据库程序设计7ppt课件(全) 变量说明有以下几种基本形式(以单变量说明为例):(1) Dim As ,说明指定类型的私有变量或局部变量。(2) Public As ,说明指定类型的公共变量。(3) Private As ,说明指定类型的私有变量。(4) Dim ,说明Variant型私有变量或局部变量。(5) Public ,说明Variant型公共变量。(6) Private ,说明Variant型私有变量。 使用(4)(6)格式说明时,变量名之后可以加类型说明符。计算机基础与Access数据库程序设计7ppt课件(全)加类型说明符时表示说明指定类型的变量(使用变量时可以带或不带类型说明符),不加类型说明符时表示说明一个Variant类型的变量。Variant类型的变量可以赋任何类型的值。【例7-3】分析下列变量说明。(1) Dim ss#(2) Public www As Long(3) Private qqq,eee As String(4) Dim tt(5) pUbliC u1 As Double(6) Private y-1 As Variant(7) Dim a1 As date计算机基础与Access数据库程序设计7ppt课件(全)(8) Dim ts As String * 20【解答】(1) 说明一个私有或局部双精度型变量ss,(使用时用ss或ss#表示均可)。(2) 说明一个长整型公共变量www。(3) 说明两个私有变量。第一个变量qqq没有类型说明,是Variant型的,第二个变量eee为字符串型的。(4) 说明一个私有或局部变量tt,因tt没有类型说明符,因此是Variant型的。(5) Public符合语法要求,说明一个双精度型公共变量u1。(6) 变量名中包含减号,不合语法要求,说明无效。计算机基础与Access数据库程序设计7ppt课件(全)(7) date符合语法要求,说明一个私有或局部日期/时间型变量a1。(8) 说明一个长度为20的定长字符串变量。 变量也可以不说明,而是通过赋值语句自动建立。这是一种不规范的变量使用方法,建议不要使用。2. 数组说明数组说明 数组是同类型变量的有序集合,其中的每个变量都叫做数组元素。数组元素之间通过下标加以区分,下标一般是一个大于或等于0的连续整型数字,相当于数组元素在数组中的位置序号。数组必须先说明,后使用。计算机基础与Access数据库程序设计7ppt课件(全) 有两种数组说明方法,相应说明语句的典型语法格式如下:Dim | Public | Private (,) As Dim | Public | Private ( To , To ) As Dim、Public、Private作用同前。数组名是数组的标识,其命名规则与变量名相同。第一种说明方法只给出下标上界,下标下界通过Option Base语句指定,其语法格式为:Option Base 0|1 Option Base语句只能在模块首部选项设置及变量说明区中使用一次,用于设置模块内所有数组说明中未说明的数组下标下界。Option Base 0表示下标下界为0,Option Base 1表示计算机基础与Access数据库程序设计7ppt课件(全)下标下界为1。只有一个下标时,相应的数组是一维数组,有两个下标的数组是二维数组。 第二种说明方法指定每一个下标的下界和上界,与Option Base设置无关。 习惯上把第一个下标称为行,第二个下标称为列。【例7-4】分析下面程序段中说明的数组情况(假定模块首部执行了Option Base 0)。Dim AA(20, 12) As Integer, BB(2) As LongPublic CC(1 To 2, 5 To 6) As Byte【解答】AA数组是一个二维整型数组,有21行、13列,共有273个数组元素:AA(0,0),AA(0,1),AA(20,11),AA(20,12)。计算机基础与Access数据库程序设计7ppt课件(全) BB数组是一个一维长整型数组,共有3个数组元素:BB(0),BB(1),BB(2)。 CC数组是一个二维字节型数组,有二行、二列,共有4个数组元素:CC(1,5),CC(1,6),CC(2,5),CC(2,6)。3. 变量赋值变量赋值 赋值语句用于对变量(包括数组元素)赋值,其语法格式如下: = 赋值语句首先求解表达式并将计算结果值赋给指定的变量。赋值语句中表达式的类型应与变量的类型一致,否则可能导致语法错误或数据错误。表达式中出现的所有变量必须已经说明和赋值,否则可能产生错误。计算机基础与Access数据库程序设计7ppt课件(全) 赋值语句中的变量一般应该在赋值语句之前已经说明。如果变量尚未说明,则会依据表达式类型自动建立一个对应类型的私有变量。规范的做法是先说明变量,之后再给该变量赋值。 变量可以多次被赋值,变量的当前值是最近一次赋值的结果。4. 对象引用与对象属性赋值对象引用与对象属性赋值 可以在VBA代码中操作Access对象,例如,窗体、报表等对象及其控件均可通过VBA操作。 引用窗体及窗体控件的常用方法如下:u Forms!,例如,Forms!MyForm!Text1表示引用MyForm窗体上控件Text1的值(当前输入/显示的Value属性值)。计算机基础与Access数据库程序设计7ppt课件(全)u 对象名(窗体名、控件名)加方括号,例如Forms!MyForm!Text1也可以表示为Forms!MyForm!Text1或Forms!MyForm!Text1。 引用窗体属性的常用方法如下:u Forms!.,例如,Forms!MyForm.Caption表示引用MyForm窗体的标题属性。u 对象名加方括号,例如,Forms!MyForm.Caption或Forms!MyForm.Caption与Forms!MyForm.Caption是等价的。 引用窗体控件属性的常用方法如下:u Forms!.,例如,Forms!MyForm!Text1.Locked表示引用MyForm窗体上控件Text1的Locked属性。计算机基础与Access数据库程序设计7ppt课件(全)u 对象名(窗体名、控件名)加方括号,例如Forms!MyForm!Text1.Locked也可以表示为Forms!MyForm!Text1.Locked或Forms!MyForm!Text1.Locked。 上述方法同样适用于报表,把Forms换成Reports、窗体名换成报表名即可。 可以在VBA代码中对窗体、报表属性或窗体、报表控件属性赋值。下列代码是相应的例子,说明在注释中给出。Forms!MyForm.Caption = 加法测试修改MyForm窗体标题Forms!MyForm!Text2 = Null 给Text2赋空值Forms!MyForm!Text1.Locked = True锁定文本框Text1 在当前窗体代码模块(对象事件过程代码模块)内引用控件计算机基础与Access数据库程序设计7ppt课件(全)时,可以采取下列更为简单的方式:u Me!.,例如,Me!Text1.Locked表示引用当前窗体上控件Text1的Locked属性。u .,例如,Text1.Locked表示引用当前窗体上控件Text1的Locked属性。u 控件名加方括号,例如Text1.Locked也可以表示为Text1.Locked。 窗体、报表、控件属性在VBA代码中引用时必须使用其原始属性名,不能用属性的中文名称。常用属性的原始属性名如表7-3所示,应熟记其中的属性名。计算机基础与Access数据库程序设计7ppt课件(全)5. 窗体窗体/报表节对象引用报表节对象引用 可以引用窗体节对象以设置窗体节属性。窗体节属性的引用方式如下:u Forms!.Section(索引值)。u 索引值可以使用数值或符号常量,0(acDetail)表示主体节,1(acHeader)表示窗体/报表页眉节,2(acFooter)表示窗体/报表页脚节,3(acPageHeader)表示窗体/报表页面页眉节,4(acPageFooter)表示窗体/报表页面页脚节。u 当前窗体/报表可以使用Me指代。7.3.2 内部函数内部函数 内部函数是VB预定义的函数,可以在表达式中直接调用。常用的内部函数已在节表4-2、表4-3中介绍过了,另外,计算机基础与Access数据库程序设计7ppt课件(全)有两个重要的函数需要特别说明,一个是输入函数InputBox,另一个是输出函数MsgBox。 InputBox函数用于返回输入的字符串数据,其典型语法格式如下:InputBox(,) InputBox函数显示一个对话框,“标题”字符串为对话框标题,“提示”字符串为对话框内显示的提示信息,对话框中显示一个输入编辑框用于接收输入的字符串,“默认值”字符串为输入框中预置的输入内容,x,y坐标分别用于指定对话框左边界距屏幕左边沿的距离和对话框上边界距屏幕上边沿的距离,坐标计量单位为VB计量单位。省略x,y坐标时将居中显示对话框。例如,下列语句执行时将居中显示如下页图所示的对话计算机基础与Access数据库程序设计7ppt课件(全)框,输入数据并单击“确定”按钮后,关闭对话框并把输入的字符串返回,然后赋给变量sss。sss = InputBox(请输入一个数字:, 输入数据, 1) InputBox函数只能输入字符串数据,如果要输入其他类型的数据,需要用类型转换函数进行类型转换。例如,假定aaa为整型变量,需要用Val函数把InputBox函数输入结果转计算机基础与Access数据库程序设计7ppt课件(全)换为数值型数据才能赋给aaa:aaa = Val(InputBox(请输入一个数字:, 输入数据, 1) MsgBox函数用于显示一个提示信息框并返回用户响应结果,其典型语法格式如下:MsgBox(,) “提示信息”字符串为对话框显示的信息。“标题”字符串指定对话框标题。“按钮设置值”为一整数,用于设置对话框显示按钮、图标等参数,该值由按钮类型与数目、图标样式、缺省设置、模式参数等四类数据中各取一个(或0个)相加得到。如表7-4所示为4类参数值说明。 用户响应对话框操作并关闭对话框后,函数返回用户单击的按钮参数,如表7-5所示。计算机基础与Access数据库程序设计7ppt课件(全) 在使用按钮设置值参数时,可以使用表达式依次把各设置参数相加,这样既简单又直观,例如,下列语句:ww = MsgBox(请选择操作按钮请选择操作按钮, 3 + 64 + 256 + 0) 语句中3表示显示“是”、“否”、“取消”按钮,64表示显示蓝色信息符号图标,256表示第二个按钮(“否”按钮)为默认按钮,0表示对话框挂起应用程序直至对话框关闭。执行时显示的对话框如图所示。 单击按钮关闭对话框后,返回值被赋给ww变量,根据该变量的值即可知道用户单击的是哪个按钮。 计算机基础与Access数据库程序设计7ppt课件(全)7.3.3 常用语句及对象常用语句及对象 程序是语句的有限序列,语句是一行一行依次排列的,一般每行一个语句。可以在一行输入多条语句,这时各语句之间要用英文冒号(:)分隔开来。当语句行较长时,可以多行书写,除最后一行外,前面各行末尾需要使用下划线(_)续行符(续行符之前至少要留一个空格,不能与语句内容连着书写)。不能在表达式或对象名中间位置续行。 程序中的常用语句可以分为如下几类:u 注释语句。u 说明语句。如变量说明、数组说明、选项说明等。u 变量赋值语句。u 流程控制语句。计算机基础与Access数据库程序设计7ppt课件(全)u 输入输出语句。u DoCmd对象及其他对象方法调用。1. 注释注释 注释语句用于在程序中添加注释说明。注释语句并不影响程序的运行,但对程序设计及维护却非常重要,程序中应有适当的注释说明。注释语句有两种基本形式,一种是用Rem引导注释文本,另一种是用英文单引号引导注释文本。用Rem引导注释时,Rem与注释文本之间至少要留一个空格,使用单引号无此限制。用Rem引导的注释是一个独立的语句,不能添加在其他语句之后,用单引号引导的注释既可以单独作为一个注释语句,也可以添加到其他语句行的末尾。 续行符之后不能添加用单引号引导的注释。计算机基础与Access数据库程序设计7ppt课件(全)【例7-5】分析下列程序段中的语句(假定模块首部执行了Option Base 1)。Rem 说明变量及数组说明变量及数组Dim sss As String 说明变量说明变量sss多语句行,各语句之间用冒号分隔多语句行,各语句之间用冒号分隔Dim aa(2, 2) As Long: Dim qq 说明数组、变量说明数组、变量【解答】本段程序包含4个语句行。第一行是一个注释语句;第二行是一个变量说明语句,语句末尾有单引号引导的注释说明;第三行是一条用单引号引导的注释语句;第四行是一个多语句行,第一条语句说明一个2行2列的长整型数组aa,第二条语句说明一个货币型变量qq,语句行末尾为单引号引导的注释。2. 说明语句说明语句 常量、变量说明语句和变量赋值语句前面已经介绍过,不计算机基础与Access数据库程序设计7ppt课件(全)再赘述。说明语句一般放在程序的首部,变量赋值语句用于实现程序的运算处理。 前面介绍了数组下标选项说明语句Option Base语句,还有另一个十分重要的选项说明语句Option Compare,其语法格式如下:Option Compare Binary | Text | Database Option Compare语句用于设置字符串比较方法,和Option Base一样只能在模块首部使用,其作用范围是整个模块。 Option Compare Binary设置的比较方式是对字符二进制编码进行比较,区分字母大小写。 Option Compare Text设置的比较方式按字符比较,不区分字母大小写。计算机基础与Access数据库程序设计7ppt课件(全) Option Compare Database设置则依据Access选项设置进行字符串比较。3. 输入输出输入输出 可以用 InputBox函数实现数据输入,也可以用窗体控件实现数据输入。可以用MsgBox函数实现数据输出,也可以用窗体控件或Debug对象实现数据输出。Debug对象的Print方法可以在立即窗口输出结果,Debug对象的Print方法语法格式如下:Debug.Print 语句执行时依次输出表达式列表中的每个表达式的值。输出表达式列表中的输出表达式可以用逗号或分号分隔。用逗号分隔时,下一表达式的值移动到当前行的下一个Tab位置输出,用分号分隔时,下一表达式的输出位置在上一个表达式值计算机基础与Access数据库程序设计7ppt课件(全)之后留一个空格之后的位置处(字符串、数字0不输出符号位,非0数字输出一个符号位,+号用一个空格符代替)。 文本框是最常用的数据输入、输出控件。【例7-6】VBA程序中可以用Debug对象的Print方法输出数据,输出结果在“立即”窗口显示。Public Sub qqq() Dim i As Integer For i = 1 To 10 Debug.Print i NextEnd Sub计算机基础与Access数据库程序设计7ppt课件(全) 运行时,立即窗口显示一列数据,依次为1,2,3,4,5,6,7,8,9,10。 打开立即窗口的方法如下:u 在Visual Basic编辑器窗口选择“视图”“立即窗口”命令。u 或在Visual Basic编辑器窗口活动状态下按Ctrl+G快捷键。4. DoCmd对象对象 DoCmd对象是VBA代码中可以直接引用的对象,一般在VBA代码中调用DoCmd对象的方法实现特定的操作(在节中给出的自动生成的代码中出现过该对象的Close方法调用)。DoCmd对象的常用方法如表7-6所示。计算机基础与Access数据库程序设计7ppt课件(全)【例7-7】下列过程执行时将首先向tScore表插入一条新记录,然后打开“加法测试”窗体。Public Sub OpFormSub()DoCmd.RunSQL Insert into tScore values(2011020110,c5,90)DoCmd.OpenForm 加法测试加法测试End Sub7.4 VBA程序流程控制程序流程控制 程序执行时一般是按语句的先后顺序依次执行的,有时可能需要改变这种执行顺序,通过流程控制语句可以实现这样的处理要求。典型的流程控制结构包括选择结构和循环结构。选择结构用于程序分支控制,循环结构用于控制程序反复执行一个程序段。计算机基础与Access数据库程序设计7ppt课件(全)7.4.1 选择结构控制选择结构控制 选择结构可以依据条件选择程序的执行路线。VBA有两种选择控制语句,一是If条件分支语句,二是Select Case多分支语句。1. If条件分支语句条件分支语句 If语句的典型语法结构有四种,第一种格式为:If Then 语句执行时,判断条件(逻辑表达式)是否成立(为“真”),如果成立则执行Then后面的语句,然后执行下一条语句。如果条件不成立,则不执行Then后面的语句而是直接执行下一条语句。计算机基础与Access数据库程序设计7ppt课件(全) 第二种格式为:If ThenEndIf 语句执行的特点与第一种格式相同。执行时首先判断条件,如果成立则执行语句序列,然后执行EndIf之后的语句。如果条件不成立则直接执行EndIf之后的语句。 第三种格式为:If ThenElseEndIf计算机基础与Access数据库程序设计7ppt课件(全) 语句执行时首先判断条件,如果成立则执行语句序列1,否则执行语句序列2,执行完语句序列1或语句序列2后继续执行EndIf之后的语句。第一种和第二种格式可以选择执行或不执行(跳过)一个语句或语句序列,第三种格式则依据条件选择执行两个不同的语句序列。 第四种格式为:If ThenElseIf Then.ElseIf ThenElseEndIf计算机基础与Access数据库程序设计7ppt课件(全) 语句依次判断条件,如果当前条件(条件i)不成立,则跳过语句序列i并继续判断下一个条件。如果条件i成立,则执行语句序列i,然后继续执行EndIf之后的语句,如果所有条件都不成立,则执行语句序列n。执行完某一分支语句序列之后,继续执行EndIf后面的语句。【例7-8】If语句应用举例。本例通过InputBox函数输入一个数字字符串并将其转换为数值,然后判断该数值并显示消息框。Dim aa As Integeraa = Val(InputBox(请输入一个数字:请输入一个数字:, 输入数据输入数据, 1)If aa 0 Then MsgBox (输入一个正数输入一个正数)ElseIf aa = 0 Then MsgBox (输入零输入零)Else MsgBox (输入一个负数输入一个负数)End If计算机基础与Access数据库程序设计7ppt课件(全)2. Select Case多分支语句多分支语句 当条件判断较多时,使用If语句会出现ElseIf过多的情况。一方面,语句比较繁琐,另一方面也不便于程序分析。可以使用Select Case语句解决这样的问题,其语法格式如下:Select Case Case .Case Case ElseEnd Select计算机基础与Access数据库程序设计7ppt课件(全) 语句中的测试表达式可以是数值表达式或字符串表达式,执行前,该表达式必须是可以求值的。 Case 及Case Else是可选的。表达式列表中可以包含下列形式的表达式(数值型或字符型):u ,执行时值是确定的,当测试表达式的值等于表达式的值时满足测试条件。u TO ,用于指定值的范围且表达式1 = 表达式1,同时测试表达式的值 = 表达式2的时候满足测试条件。u Is ,用于比较测试表达式的值和给定表达式的值之间是否满足给定的比较关系,是则满足测试条件。计算机基础与Access数据库程序设计7ppt课件(全) 语句执行时,首先计算测试表达式的值,然后依次判断各Case条件是否满足(表达式列表中任一表达式满足测试条件即可),如果某一Case条件满足则执行对应的语句序列,然后继续执行End Select之后的语句。当所有Case条件都不满足时,如果语句中没有Case Else,则执行End Select之后的语句,否则执行Case Else对应的语句序列,然后继续执行End Select之后的语句。【例7-9】Select Case语句应用举例(对应于【例7-8】的Select Case语句)。Dim aa As Integeraa = Val(InputBox(请输入一个数字:请输入一个数字:, 输入数据输入数据, 1)Select Case aa Case Is 0 MsgBox (输入一个正数输入一个正数) 计算机基础与Access数据库程序设计7ppt课件(全) Case 0 MsgBox (输入零输入零) Case Else MsgBox (输入一个负数输入一个负数)End Select【例7-10】字符判断(假定模块首部设置了Option Compare Binary)。Dim C1 As StringC1 = InputBox(请输入一个字符:请输入一个字符:, 输入数据输入数据, )If Len(Trim(C1) = 0 Then C1 = Space(1) 没输入字符则赋给没输入字符则赋给aa一个空格一个空格If Len(C1) 1 Then C1 = Left(C1, 1)输入多个字符则取首字输入多个字符则取首字符符Select Case C1 Case MsgBox (输入空格符输入空格符)计算机基础与Access数据库程序设计7ppt课件(全) Case 0 To 9 MsgBox (输入数字输入数字) Case A, B To Y, Is = Z MsgBox (输入大写字母输入大写字母) Case a To z MsgBox (输入小写字母输入小写字母) Case Else MsgBox (输入其他字符输入其他字符)End Select7.4.2 循环结构控制循环结构控制1. 循环的基本念循环的基本念 有时,让一段程序反复执行若干次可以实现某种特殊的处理要求。以下例7-11是一个用If语句和GoTo语句实现循环结构的例子。计算机基础与Access数据库程序设计7ppt课件(全)【例7-11】计算1+3+5+ + 199。 Dim n As Integer, s As Long n = 1 s = 0L: s = s + 2*n - 1 n = n + 1 If n = 100 Then GoTo L: MsgBox (Str(s) 上述程序中L:为行标号,GoTo L:语句为转移语句,程序执行到If语句时,判断n的值,当n=100时将转移到L:处继续执行。这样,下列两条语句在n=1,2,3,100时依次执行一次: s = s + 2*n - 1 n = n + 1计算机基础与Access数据库程序设计7ppt课件(全) 各次执行时,n、s的变化情况如表7-7所示。 前述两个语句反复执行了100次,每次执行后n增1,而s的值则是1+3+5+的前n项和。s每次执行时都在上一次执行的基础上增加一项。这种能让一段程序反复执行多次的程序结构叫做循环。被反复执行的程序段叫做循环体。 实际上,一般不通过GoTo语句实现循环,结构化程序设计思想要求设计者尽可能避免使用GoTo语句。现代程序设计语言都提供了专门的用于实现循环控制的语句。VBA中常用的循环语句有3种,分别是ForNext循环,WhileWend循环和DoLoop循环。2. ForNext循环循环 ForNext循环是一种循环次数可以预先确定的循环,其计算机基础与Access数据库程序设计7ppt课件(全)语法结构如下:For = To Step Exit ForNext 计数变量是一个简单数值变量;初值是一个数值,是计数变量开始计数时的初始值;终值是计数变量计数结束时的值,计数值超出该值时循环终止;增量是可选的,为每次循环时计数变量的增加值,省略时为1;循环体语句序列1及循环体语句序列2都属于循环体;Exit For也包含在循环体之内,执行到该语句时自动结束循环;For、Next是循环控制语句,For为开始、Next为结束,Next后可以跟随计数变量以区分该Next语句是哪个循环的结束语句。计算机基础与Access数据库程序设计7ppt课件(全) For循环的执行过程是:首先给循环计数变量赋初值,如果未超出终值,则执行一次循环体,执行到Next语句时,循环计数变量按增量递增,然后继续判断是否超出终值,未超出则继续执行循环体,超出则结束循环。执行循环体时如遇到Exit For语句,则立即结束循环。循环结束后,继续执行Next语句后的语句。【例7-12】用ForNext循环实现【例7-11】。Dim n As Integer, s As Longs = 0 变量变量 s 清零清零For n = 1 To 100s = s + 2 * n - 1NextMsgBox (Str(s) 输出输出 s 结果结果计算机基础与Access数据库程序设计7ppt课件(全) 使用ForNext循环时须注意以下几点:u 增量可以是正数或负数。增量为正数时,计数值 终值为超出终值;增量为负数时,计数值 终值为超出终值。u 增量一般是整数,也可以是小数。增量是小数时,计数变量必须是单精度或双精度的。u 循环次数是确定的,为(终值 初值)/增量+1。u 循环可以嵌套,但不能交叉(对所有循环都适用),嵌套时,一般把外重循环叫做外循环,内重循环叫做内循环。【例7-13】分析下列ForNext循环。(1)Dim i As Single计算机基础与Access数据库程序设计7ppt课件(全)For i = 1 To 10 Step 0.8 MsgBox (Str(i)Next(2)Dim i As SingleFor n = 1 To 2 For i = 0 To -9 Step -1.5 MsgBox (Str(i) Next For i = 0 To 10 Step -1.5 MsgBox (Str(i) NextNext n(3)Dim i As Single计算机基础与Access数据库程序设计7ppt课件(全)For n = 1 To 2 For i = 0 To -9 Step -1.5 MsgBox (Str(i) Next For i = 0 To 10 Step -1.5 MsgBox (Str(i) Next nNext i【解答】(1)循环结构正确。i从1循环到10,增量为0.8,i依次取1,1.8,2.6,3.4,4.2,5,5.8,6.6,7.4,8.2,9,9.8,共循环12次,当计数变量变为10.6时超出终值(10),结束循环。(2) 属于嵌套循环,在外循环(n循环)内嵌套两个并列循环。n循环执行两次。n循环每次执行时,第一个i循环依次从0、计算机基础与Access数据库程序设计7ppt课件(全) -1.5、-3、-4.5、-6、-7.5、-9共执行7次循环,第二个i循环结束循环条件是i小于终值,i赋初值后即满足条件,所以一次都没执行。(3) 属于嵌套循环,因存在交叉(n循环和第二个i循环),所以属于错误嵌套,根本不能执行。3. WhileWend循环循环 WhileWend循环是一种循环次数不确定的循环,其语法结构如下:While Wend WhileWend循环执行时首先判断循环条件,如果条件成计算机基础与Access数据库程序设计7ppt课件(全)立(条件表达式结果为“真”)则执行一次循环体语句序列,然后继续判断条件。如此反复循环直到条件不成立时结束循环,继续执行Wend之后的语句。【例7-14】用WhileWend循环实现【例7-11】。Dim n As Integer, s As Longs = 0n = 1While n = 100 s = s + 2 * n - 1 n = n + 1WendMsgBox (Str(s) WhileWend循环的循环体应能影响循环条件的取值,否则循环就永远不会结束,这种情况叫做死循环。计算机基础与Access数据库程序设计7ppt课件(全)4. DoLoop循环循环 与WhileWend循环一样DoLoop循环也是一种循环次数不能预先确定的循环,它有两种格式,第一种语法格式如下:Do While | Until Exit DoLoop 第二种语法格式如下:DoExit DoLoop While | Until 计算机基础与Access数据库程序设计7ppt课件(全) 两种格式的循环都可以省略条件,这时,除非循环体能够执行到Exit Do语句,否则即是死循环。执行到Exit Do语句时,立即结束循环,继续执行Loop语句之后的语句。 第一种格式首先判定条件,第二种格式先执行循环体,然后判定条件。如果是While ,则当条件成立(为“真”)时继续执行循环体,条件不成立时结束循环。如果是Until ,则当条件不成立时继续下一次循环,条件成立时结束循环。结束循环后,继续执行Loop语句之后的语句。【例7-15】用DoLoop循环实现【例7-11】。格式1:Dim n As Integer, s As Longs = 0n = 1计算机基础与Access数据库程序设计7ppt课件(全)Do While n = 100 s = s + 2 * n - 1 n = n + 1LoopMsgBox (Str(s) 格式2(仅循环部分,其他部分与格式1相同):Do s = s + 2 * n - 1 n = n + 1Loop While n 100 s = s + 2 * n - 1 n = n + 1Loop计算机基础与Access数据库程序设计7ppt课件(全) 格式4(仅循环部分,其他部分与格式1相同):Do s = s + 2 * n - 1 n = n + 1Loop Until n 1007.5 过程及过程参数过程及过程参数 过程、尤其是函数过程一般都需要有参数。调用过程时通过参数控制过程的执行结果。一般把过程定义的参数叫做形式参数,简称形参,而把调用时提供的参数叫实际参数,简称实参。实参与形参对应结合,叫做参数传递。7.5.1 独立子过程及参数传递独立子过程及参数传递 在节介绍了最简单的独立子过程的结构及调用方式,实际定义独立子过程时可以修改定义框架。计算机基础与Access数据库程序设计7ppt课件(全)1. 独立子过程定义独立子过程定义 典型的独立子过程定义形如:Private | Public Sub ()语句序列语句序列1Exit Sub语句序列语句序列2End Sub 选择Private时,过程只能在该过程所在的模块内调用,其他模块中的程序代码不能调用。选择Public时,过程可以被所有模块中的代码调用。Sub是子过程标志关键字。子过程名是子过程的标识,须符合变量命名规范。子过程名后面的括号是必须的。 形参列表是可选的,是用逗号分隔的形式参数说明列表。计算机基础与Access数据库程序设计7ppt课件(全) 典型的形式参数说明格式如下:ByVal | ByRef () As ByVal表示参数传递方式为值传递,即调用时只把实参的结果值传递给形参,过程返回时实参结果不受任何影响。值传递的实参可以是常量、变量或表达式。 ByRef表示参数传递方式为地址传递,调用时把实参的地址传递给形参,过程返回时实参结果为对应形参的赋值结果。地址传递的实参必须是变量。形参为数组时,传递方式必须是地址传递。默认的参数传递方式为地址传递。 形参名为过程中使用的参数名称,须符合变量的命名规则。如果形参是一个数组,则应在形参名之后加括号(数组参数前不能选择ByVal)。计算机基础与Access数据库程序设计7ppt课件(全) 数据类型是可选的。指定数据类型时,对应形参为指定数据类型,省略数据类型时,对应形参是Variant类型的。 介于Sub和End Sub之间的语句序列叫做过程体。 可以通过Exit Sub语句立即退出独立子过程,该语句不需要任何参数。过程执行时依次执行过程体语句,执行完最后一条语句或遇到Exit Sub语句时结束过程执行并返回调用程序。 一般而言,当独立子过程不需要返回计算结果时,参数传递方式应选择值传递。如果需要返回计算结果,则应通过地址传递参数取得这些计算结果。地址传递参数的实参在返回时保存着过程形参的赋值结果。【例7-16】分析下列过程参数定义的参数传递方式及参数类型。(1)Private Sub MyExa1(ByVal a1 As Integer, b1( ) As Integer, ByRef c1)计算机基础与Access数据库程序设计7ppt课件(全)End Sub(2)Private Sub MyExa2(a2 As Integer, ByVal b2( ) As Integer, c2)End Sub【解答】(1) 定义独立子过程MyExa1并带有3个形式参数a1、b1、c1。a1为值传递整型参数;b1为地址传递整型数组;c1为地址传递Variant型参数。(2) 定义独立子过程MyExa2并带有3个形式参数a2、b2、c2。a2定义合法,为地址传递整型参数;b2为数组参数,因数组不能定义为值传递,所以定义非法;c2定义合法,为地址传递Variant型参数。计算机基础与Access数据库程序设计7ppt课件(全)2. 独立子过程的调用独立子过程的调用 节中已介绍过无参数独立子过程的调用方法,有参数独立子过程的调用格式有如下两种:Call (实参列表实参列表) 实参列表中的参数个数、顺序、类型必须与形参列表的形参对应一致,实参按形参指定的传递方式把参数传递给形参。对应于地址传递形参的实参必须是变量或数组,对应值传递形参的实参可以是变量(包括数组元素)、常量或表达式。 使用Call调用时,实参列表必须用括号括起来且应直接接续在过程名之后。不使用Call时,实参列表不能加括号且与过程名之间必须留有空格。计算机基础与Access数据库程序设计7ppt课件(全)【例7-17】过程nn用于计算n阶乘,过程qqq实际调用nn计算12!和11!。Private Sub nn(ByVal n As Integer, s As Long) 计算 n 阶乘,结果通过参数 s 返回 Dim k As Integer s = 1 Rem 只有当 n 在0-12之间时才能够计算 If n = 0 And n 13 Then For k = 1 To n s = s * k Next Else MsgBox (数值超范围,合理的范围是1-12!) End IfEnd Sub 计算机基础与Access数据库程序设计7ppt课件(全)Public Sub qqq() Dim mm As Long nn 12,mm调用nn计算12! Debug.Print mm输出计算结果 Call nn(11,mm)调用nn计算11! Debug.Print mm输出计算结果End Sub 在qqq过程中调用nn过程两次,分别用于计算12!和11!,结果都是通过地址传递实参mm取得的。用nn(11,mm)或Call nn 12,mm调用过程nn都是错误的。7.5.2 独立函数过程及参数传递独立函数过程及参数传递 在【例7-17】中,阶乘的计算结果是通过一个地址传递参数返回调用程序的,对于这种只有一个返回值的计算类过程,可以用独立函数过程来代替。独立函数用于计算一个结果并通计算机基础与Access数据库程序设计7ppt课件(全)过函数名返回该结果。 在节介绍了最简单的独立函数过程的结构及调用方式,实际定义独立函数过程时可以修改定义框架。1. 独立函数过程定义独立函数过程定义 典型的独立函数过程定义形如:Public | Private Function () As 语句序列语句序列1函数名函数名= 表达式表达式Exit Function 语句序列语句序列2函数名函数名= 表达式表达式End Function Public、Private的作用与独立子过程完全相同。函数名是计算机基础与Access数据库程序设计7ppt课件(全)函数的标识,须符合变量命名规范。函数名后面的括号是必须的。形参列表是可选的,其定义方式与独立子过程完全相同。返回值类型是可选的,用于定义函数返回值的类型,省略时返回值类型为Variant类型,即可以返回任意类型值。 介于Function和End Function之间的语句序列叫做函数体。 函数体内应将计算结果赋值给函数名,如果函数体内没有进行这样的赋值,函数返回默认值(数值型返回0,字符串型返回空字符串)。 可以通过Exit Function语句退出函数。函数执行时依次执行函数体语句,执行完最后一条语句或遇到Exit Function语句时结束函数过程执行并返回调用程序,返回值是最后一次对函数名赋值的结果。计算机基础与Access数据库程序设计7ppt课件(全)2. 独立函数过程的调用独立函数过程的调用 函数调用格式如下:(实参列表实参列表) 由于函数返回值是通过函数名取得的,因此函数调用一般出现在表达式中,单独作为一个语句的函数调用一般很少使用,例如,MsgBox函数如果不关心用户究竟按了哪个按钮,可以作为一个语句单独调用。【例7-18】函数过程Fn用于计算n阶乘,过程CFn实际调用Fn计算12!和11!和计算11!/12!。Public Function Fn(n As Integer) As Long 计算计算 n! Dim k As Integer Fn = 1计算机基础与Access数据库程序设计7ppt课件(全) Rem 只有当只有当 n 在在0-12之间时才能够计算之间时才能够计算 If n = 0 And n 13 Then For k = 1 To n Fn = Fn * k Next Else MsgBox (数值超范围,合理的范围是数值超范围,合理的范围是1-12!) End IfEnd FunctionPrivate Sub CFn() Debug.Print Fn(12) Debug.Print Fn(11), Fn(11) / Fn(12)End Sub计算机基础与Access数据库程序设计7ppt课件(全)7.6 窗体、控件事件编程窗体、控件事件编程 窗体、控件都可以响应一些事件,可以编写对应的事件过程来处理事件以实现预定的要求。7.6.1 窗体事件次序及其编程窗体事件次序及其编程 所有对象都可以响应多种事件,通过对这些事件的VBA编程可以实现预定的对象操作功能。窗体的常用事件如表7-8所示。【例7-19】测试窗体事件的发生顺序。 编写下列窗体事件代码。运行窗体时,发生对应事件时会显示提示对话框。Private Sub Form_Activate() MsgBox (激活窗体激活窗体)End Sub计算机基础与Access数据库程序设计7ppt课件(全)Private Sub Form_Close() MsgBox (关闭窗体关闭窗体)End SubPrivate Sub Form_Current() MsgBox (成为当前窗体成为当前窗体)End SubPrivate Sub Form_Load() MsgBox (加载窗体加载窗体)End SubPrivate Sub Form_Open(Cancel As Integer) MsgBox (打开窗体打开窗体)End SubPrivate Sub Form_Resize() MsgBox (调整窗体大小调整窗体大小)End Sub计算机基础与Access数据库程序设计7ppt课件(全)Private Sub Form_Deactivate() MsgBox (停用窗体停用窗体)End SubPrivate Sub Form_Unload(Cancel As Integer) MsgBox (卸载窗体卸载窗体)End Sub 运行窗体,依据打开提示信息对话框的顺序可知,上述事件发生的顺序是:打开、加载、调整大小、激活、成为当前。 关闭窗体,事件发生的顺序是:卸载、停用、关闭。【例7-20】可以通过打开窗体时的事件设置窗体的初始状态,通过关闭窗体时的事件进行善后处理。本例在打开窗体时设置窗体标题和窗体主体节背景颜色为白色。计算机基础与Access数据库程序设计7ppt课件(全)Private Sub Form_Open(Cancel As Integer) Me.Caption = 窗体窗体VBA编程举例编程举例 Me.Section(acDetail).BackColor = RGB(255, 255, 255)End Sub7.6.2 窗体控件事件编程窗体控件事件编程 可以通过窗体控件事件编程实现更复杂的功能。【例7-21】设计一个执行时如下页图所示的窗体,窗体自动生成两个加数,用户在等于号后面的文本框中输入和,单击“计算”按钮后,如果输入正确,则提示“太棒了,你答对了!继续答下一题。”,如果输入错误,则提示“抱歉,你答错了!继续答下一题。”,如果没输入答案,则提示“还没输入答案!”。计算机基础与Access数据库程序设计7ppt课件(全)【设计步骤】建立一个窗体名称为“加法测试”的窗体,设置窗体属性如表7-9所示。 属性名设置值属性名设置值属性名设置值标题加法测试滚动条两者均无记录选择器否导航按钮否分隔线否允许筛选否允许编辑是允许删除否允许添加否弹出方式是模式是按上述设置后,窗体将以对话框方式弹出显示,且窗体上没有分隔线和记录选定器及导航按钮。计算机基础与Access数据库程序设计7ppt课件(全) 在窗体上设置3个文本框控件Text0、Text1、Text2,Text0、Text1用于显示第一、第二加数,Text2用于输入答案。再向窗体上放置两个标签控件Label0、Label1,分别用于显示加号和等于号,再向窗体上放置一个命令按钮控件Command0。上述控件属性设置如下:u Text0。名称 Text0,格式 常规数字,小数位数 - 0,是否锁定 - 是。u Text1。名称 Text1,格式 常规数字,小数位数 - 0,是否锁定 - 是。u Text2。名称 Text2,格式 常规数字,小数位数 - 0,是否锁定 - 否。u Label0。名称 Label0,标题 - +。计算机基础与Access数据库程序设计7ppt课件(全)u Label1。名称 Label1,标题 - =。u Command0。名称 Command0,标题 计算。 上述控件的字号属性均设置为18,各控件的位置关系如图所示。计算机基础与Access数据库程序设计7ppt课件(全) 由于Text0、Text1锁定,所以只有Text2可以输入数据,Text0、Text1数据由程序自动产生。 打开窗体时应该设置加数,每次计算完成后也应该再次设置加数。设计一个独立过程实现此操作:Private Sub NumGen() Text0 = Int(100 * Rnd()给给Text0的的 Value属性赋值属性赋值 Text1.Value = Int(100 * Rnd()给给Text1的的 Value属性赋值属性赋值 Forms!加法测试加法测试!Text2 = Null给给Text2赋空值赋空值End Sub打开窗体时调用NumGen生成加数,编写窗体打开事件过程如下:Private Sub Form_Open(Cancel As Integer) NumGenEnd Sub计算机基础与Access数据库程序设计7ppt课件(全) 单击“计算”按钮时进行计算处理,编写“计算”按钮事件过程如下:Private Sub Command0_Click() If IsNull(Forms!加法测试加法测试!Text2) Then MsgBox (还没输入答案!还没输入答案!) Else If Forms!加法测试加法测试!Text0 + Forms!加法测试加法测试!Text1 = Forms!加法测试加法测试!Text2 Then MsgBox (太棒了,你答对了!继续答下一题。太棒了,你答对了!继续答下一题。) Else MsgBox (抱歉,你答错了!继续答下一题。抱歉,你答错了!继续答下一题。) End If NumGen End IfEnd Sub计算机基础与Access数据库程序设计7ppt课件(全) 本例通过Text0、Text1输出显示数据,通过Text2输入数据,在程序中对这些数据进行处理。7.7 数据库编程数据库编程 在Access中一般通过数据表视图或窗体来浏览编辑数据库表数据,通过查询进行各种统计处理。通过VBA代码也可以实现数据库表数据的各种处理操作。在节介绍的DoCmd对象的RunSQL方法可以用于进行数据库更新操作。 VBA还可以通过DAO(Data Access Object,数据访问对象)或ADO(ActiveX Data Object,ActiveX数据访问对象)访问和操作数据库数据。DAO和ADO都是Windows提供的数据库访问组件(组件是Windows为应用程序提供公共应用的一种形式),VBA程序要使用它们,必须先建立引用关系。在Visual Basic计算机基础与Access数据库程序设计7ppt课件(全)编辑器界面中选择“工具”“引用”命令即可打开当前数据库的“引用”设置对话框,如图所示。选中对话框中DAO对象库和ADO对象库前面的复选框并单击“确定”按钮即可关闭对话框并建立起当前数据库和相应对象库的引用关系,在当前数据库的VBA代码中就可以使用DAO或ADO对象访问和操作当前数据库中的数据库对象了。对象库组件实际上也是一组程序,因系统环境不同组件版本可能会有差别(图7-25中DAO版本号为3.6,ADO版本号为2.1)。计算机基础与Access数据库程序设计7ppt课件(全)7.7.1 通过通过DAO对象访问数据库对象访问数据库 DAO为应用程序提供了丰富的数据库访问对象,通过这些对象可以访问和操作数据库中的表。常用的DAO对象如表7-10所示。表7-10 DAO常用对象对象名对象名说明说明DBEngine数据数据库引擎引擎对象。象。DAO最最顶层对象,所有象,所有DAO对象都是其子象都是其子对象。象。建立建立组件引用后即可直接使用件引用后即可直接使用DBEngine对象,可以直接象,可以直接调用其方法用其方法Workspace工作区工作区对象。所有数据象。所有数据库操作都必操作都必须在一个工作区中在一个工作区中进行,工作区用行,工作区用于保持数据于保持数据库会会话信息信息Database数据数据库对象。数据象。数据库操作的具体目操作的具体目标,用于管理操作的数据,用于管理操作的数据库Recordset记录集集对象。用于管理打开的表或象。用于管理打开的表或查询中的中的记录Field字段字段对象。用于象。用于处理表当前理表当前记录的字段的字段值计算机基础与Access数据库程序设计7ppt课件(全) 利用DAO操作数据库的基本步骤如下:(1) 建立或选择一个工作区(可选)。(2) 在指定工作区中打开或选择一个数据库。(3) 打开数据库中的表并生成记录集。(4) 操作记录集。(5) 关闭记录集。(6) 关闭数据库(如果打开了一个数据库)。(7) 关闭工作区(如果建立了一个工作区)。 一般不需要自己建立工作区,在应用程序引用DAO组件时会自动建立一个默认工作区,可以明确指定使用默认工作区。不建立和选择工作区时,系统自动选择默认工作区。计算机基础与Access数据库程序设计7ppt课件(全) DAO程序中使用的对象除DBEngine外都需要专门的对象变量来表示,对象说明格式为:Dim As 对象可以通过Set语句赋值,其语法格式为:Set = 给对象变量赋Nothing将释放相应对象占用的内存空间并清除该对象,相应语句的语法格式如下:Set = Nothing 建立工作区用DBEngine对象的CreateWorkspace方法,其典型语法格式如下:Set = CreateWorkspace(,)计算机基础与Access数据库程序设计7ppt课件(全) 可以在方法名之前加DBEngine前缀。工作区名是一个唯一标识该工作区的字符串,不指定工作区名时应给出一个空字符串。用户名是一个工作区用户名字符串,表示该工作区的所有者,一般选admin即可。口令是指定用户的口令,默认admin口令为空串。 选择默认工作区的方法如下:Set = DBEngine.Workspaces(0) 可以省略DBEngine,直接用Workspaces(0)即可。 在指定工作区中打开数据库用工作区对象的OpenDatabase方法,其典型语法格式如下:Set = .OpenDatabase()计算机基础与Access数据库程序设计7ppt课件(全) 省略工作区变量时,自动在默认工作区中打开指定数据库。 VBA代码一般在打开数据库后才执行,如果只操作当前数据库就不需要打开新数据库,选择当前数据库即可。选择当前数据库用应用程序对象(Application对象)的CurrentDb方法,其调用格式为(后面加括号亦可):CurrentDb 打开指定数据库的表或查询用数据库对象的OpenRecordset方法,其典型语法格式如下:Set = .OpenRecordset(,) 来源字符串可以是一个表的名字、查询的名字或一个可以返回记录集的SQL语句。打开类型用一个DAO常量指示,常用计算机基础与Access数据库程序设计7ppt课件(全)的类型如下:u dbOpenTable,打开一个表类型的Recordset,和表一样可以进行增、删、改操作。u dbOpenDynaset,打开一个动态的Recordset,当来源为一个表时,可以象表一样进行增、删、改操作。udbOpenForwardOnly,打开一个单向(从开始到结束)读记录集。 关闭记录集用记录集对象的Close方法,其语法格式为(后面加括号亦可):.Close 关闭数据库用数据库对象的Close方法,其语法格式与记录集对象Close方法相同。计算机基础与Access数据库程序设计7ppt课件(全) 关闭工作区用工作区对象的Close方法,其语法格式与记录集对象Close方法相同。默认工作区不需要、也不能被关闭。 下面【例7-22】至【例7-24】给出了DAO数据库操作的典型程序框架(注:教学管理_b数据库与“教学管理”数据库内容完全相同)。【例7-22】本例给出了一个选择当前数据库并打开Score表记录集的程序框架。Dim db As DAO.DatabaseDim rs As DAO.RecordsetDim xh As DAO.Field, kch As DAO.Field, cj As DAO.FieldSet db = CurrentDb()Set rs = db.OpenRecordset(tScore)rs.Close关闭记录集对象关闭记录集对象Set rs = Nothing清除记录集对象清除记录集对象计算机基础与Access数据库程序设计7ppt课件(全) 本例中选择的是当前数据库(“教学管理”数据库),所以不需要关闭该数据库。绝大多数VBA代码都是针对当前数据库操作的。【例7-23】本例给出了一个在默认工作区打开数据库并打开Score表记录集的程序框架。Dim db As DAO.DatabaseDim rs As DAO.RecordsetSet db = OpenDatabase(c:ACCESS教材教材教学管理教学管理_b.mdb)Set rs = db.OpenRecordset(tScore)rs.Close关闭记录集对象关闭记录集对象db.Close关闭数据库对象关闭数据库对象Set rs = Nothing清除记录集对象清除记录集对象Set db = Nothing清除数据库对象清除数据库对象计算机基础与Access数据库程序设计7ppt课件(全) 本例在默认工作区中打开“教学管理_b.mdb”数据库,因此需要在操作结束时关闭该数据库。【例7-24】本例给出了一个在新建工作区中打开数据库及其Score表记录集的程序框架。Dim wk As WorkspaceDim db As DAO.DatabaseDim rs As DAO.RecordsetDim xh As DAO.Field, kch As DAO.Field, cj As DAO.FieldSet wk = DBEngine.CreateWorkspace(, admin, )Set db = wk.OpenDatabase(c:ACCESS教材教材教学管理教学管理_b.mdb)Set rs = db.OpenRecordset(tScore)rs.Close关闭记录集对象关闭记录集对象db.Close关闭数据库对象关闭数据库对象wk.Close关闭工作区对象关闭工作区对象计算机基础与Access数据库程序设计7ppt课件(全)Set rs = Nothing清除记录集对象清除记录集对象Set db = Nothing清除数据库对象清除数据库对象Set wk = Nothing清除工作区对象清除工作区对象 记录集对象打开后就可以进行记录集记录处理了,可以增加、删除、修改记录集记录,也可以对记录集进行统计处理。7.7.2 DAO记录集记录集(Recordset)对象对象 记录集(Recordset)对象是DAO的重要对象,通过它可以处理表或查询结果集中的记录。记录集对象保存一个结果记录序列,可以对其中的记录进行处理,但每次只能处理一条记录。记录集中当前可以处理的记录叫做当前记录,当前记录位置可以在第一条记录(位置0)至最后一条记录(位置n-1,n是记录总数)之间变化,当前记录位置叫做记录指针。计算机基础与Access数据库程序设计7ppt课件(全) 记录集对象的常用属性及常用方法如表7-11所示。 可以采用下列方法读取/赋值当前记录字段:u 通过字段对象变量。先执行Edit方法把当前记录字段值复制到对应的字段对象变量,然后读取/赋值字段变量的值。赋值修改后需要执行Update方法。u 通过记录集对象引用,格式为!。读取时不需要执行Edit方法,赋值修改时需要先执行Edit方法,赋值修改后需要执行Update方法。1. 记录集操作记录集操作 可以通过记录集浏览、添加、修改、删除表中的记录。【例7-25】通过记录集对象和字段对象浏览tScore表记录。计算机基础与Access数据库程序设计7ppt课件(全)【解答】在【例7-22】、【例7-24】“记录集处理代码”位置处用下列代码替换填充即可浏览tScore表中的考试成绩是空的记录,即选课但尚未考试的记录(参见“教学管理”数据库中“数据库操作”模块DbField_Get、DbWk_OpGet子过程)。Set xh = rs.Fields(学号)设置学号字段对应字段对象变量为xhSet kch = rs.Fields(课程号) 设置课程号字段对应字段对象变量kchSet cj = rs.Fields(成绩)设置成绩字段对应字段对象变量为cjDo While Not rs.EOF记录集中有当前记录时循环处理If IsNull(cj) Then成绩字段为空值时(没考试)才输出 Debug.Print xh, kch, cj在立即窗口输出没考试的记录End Ifrs.MoveNext移动记录指针到下一条记录Loop计算机基础与Access数据库程序设计7ppt课件(全) 前述代码执行时在立即窗口输出的结果如图所示。【例7-26】通过记录集对象和记录集对象引用浏览tScore表记录。【解答】在【例7-23】“记录集处理代码”位置处用下列代码替换后运行结果与图7-27完全相同(两个数据库中tScore表记录完计算机基础与Access数据库程序设计7ppt课件(全)全相同,参见“数据库操作”模块DbGet子过程):Do While Not rs.EOF If IsNull(rs!成绩成绩) Then Debug.Print rs!学号学号, rs!课程号课程号, rs!成绩成绩 End If rs.MoveNextLoop【例7-27】通过记录集对象和记录集对象引用向表添加记录。【解答】把【例7-26】代码换成如下代码则可向“教学管理_b”数据库中的tScore表中添加一条新记录:rs.AddNew添加一条空白记录添加一条空白记录rs!学号学号 = 2011020110设置学号为设置学号为2011020110rs!课程号课程号 = c5设置课程号为设置课程号为c5rs.Update把新记录保存到数据库把新记录保存到数据库tScore表中表中计算机基础与Access数据库程序设计7ppt课件(全)【例7-28】通过记录集对象和记录集对象引用修改tScore表记录。【解答】把【例7-27】代码换成如下代码后可以修改刚刚添加的记录并把成绩设置为90(参见“数据库操作”模块DbUpdate子过程):Do While Not rs.EOF If IsNull(rs!成绩成绩) And rs!学号学号=2011020110 And rs!课程号课程号=c5 Then rs.Edit进入修改编辑状态,使成绩字段赋值操作有效进入修改编辑状态,使成绩字段赋值操作有效 rs!成绩成绩 = 90修改成绩值修改成绩值 rs.Update把修改结果更新到数据库把修改结果更新到数据库 End If rs.MoveNextLoop计算机基础与Access数据库程序设计7ppt课件(全)【例7-29】通过记录集对象和记录集对象引用删除tScore表记录。【解答】把【例7-28】代码换成如下代码后可以删除新添加的2011020110号选修c5课程的选课记录(参见“数据库操作”模块DbDelete子过程):Do While Not rs.EOF If rs!学号学号 = 2011020110 And rs!课程号课程号 = c5 Then Debug.Print rs!学号学号, rs!课程号课程号, rs!成绩成绩, qqqq rs.Delete End If rs.MoveNextLoop【例7-30】通过字段对象变量也可以实现添加记录和修改记录计算机基础与Access数据库程序设计7ppt课件(全)操作,下面的DbField_ AddNew、DbField_Update子过程分别实现添加、修改记录操作。Private Sub DbField_AddNew()通过字段对象添加记录通过字段对象添加记录 Dim db As DAO.Database Dim rs As DAO.Recordset Dim xh As DAO.Field, kch As DAO.Field, cj As DAO.Field Set db = OpenDatabase(c:ACCESS教材教材教学管理教学管理_b.mdb) Set rs = db.OpenRecordset(tScore) Set xh = rs.Fields(学号学号)设置学号字段对应字段对象变量为设置学号字段对应字段对象变量为xh Set kch = rs.Fields(课程号课程号) 设置课程号字段对应字段对象变量为设置课程号字段对应字段对象变量为kch Set cj = rs.Fields(成绩成绩)设置成绩字段对应字段对象变量为设置成绩字段对应字段对象变量为cj rs.AddNew添加新记录添加新记录 xh = 2011020110设置学号设置学号 kch = c5设置课程号设置课程号 cj = Null设置成绩为空值设置成绩为空值计算机基础与Access数据库程序设计7ppt课件(全) rs.Update修改记录修改记录 rs.Close db.Close Set rs = Nothing Set db = NothingEnd SubPrivate Sub DbField_Update()通过字段对象修改数据库中的指定记录通过字段对象修改数据库中的指定记录 Dim db As DAO.Database Dim rs As DAO.Recordset Dim xh As DAO.Field, kch As DAO.Field, cj As DAO.Field Set db = OpenDatabase(c:ACCESS教材教材教学管理教学管理_b.mdb) Set rs = db.OpenRecordset(tScore) Set xh = rs.Fields(学号学号)设置学号字段对应字段对象变量为设置学号字段对应字段对象变量为xh Set kch = rs.Fields(课程号课程号) 设置课程号字段对应字段对象变量为设置课程号字段对应字段对象变量为kch Set cj = rs.Fields(成绩成绩)设置成绩字段对应字段对象变量为设置成绩字段对应字段对象变量为cj计算机基础与Access数据库程序设计7ppt课件(全) Do While Not rs.EOF If xh = 2011020110 And kch = c5 Then rs.Edit进入编辑状态进入编辑状态 cj = 100修改成绩值修改成绩值 rs.Update将修改结果保存到数据库将修改结果保存到数据库 End If rs.MoveNext Loop rs.Close db.Close Set rs = Nothing Set db = NothingEnd Sub 利用记录集可以实现统计处理。【例7-31】统计tStudent表中某一民族的学生人数,统计民族计算机基础与Access数据库程序设计7ppt课件(全)通过窗体中的列表框选择。【解答】首先设计一个窗体,假定窗体名为“按民族统计人数”,设置其标题属性为“民族学生人数统计”,选择“滚动条”属性为“两者均无”,“导航按钮”属性选择“无”。在窗体上放置一个列表框控件List0和一个文本框控件Text0。设计一个SQL查询“学生民族查询”,SQL语句为:SELECT DISTINCT 民族民族 FROM tStudent; List0“行来源类型”属性值选择“表/查询”,“行来源”属性值选择“学生民族查询”。上述控件布局设置如图所示。计算机基础与Access数据库程序设计7ppt课件(全) 运行时,选择列表框中的民族将发生鼠标单击事件,编写List0的单击事件代码如下:Private Sub List0_Click() Dim cn As Integer Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb() Set rs = db.OpenRecordset(tStudent) cn = 0 Do While Not rs.EOF If rs!民族民族 = Me!List0.Value Then 民族和列表框选定民族相同则累加民族和列表框选定民族相同则累加 cn = cn + 1 End If rs.MoveNext Loop Me!Text0.Value = cn 把计算结果保存到把计算结果保存到 Text0 控件中控件中计算机基础与Access数据库程序设计7ppt课件(全) rs.Close Set rs = NothingEnd Sub 运行窗体,单击选择一个民族后,文本框中即显示统计结果值,如图所示。计算机基础与Access数据库程序设计7ppt课件(全)2. SQL SELECT数据源记录集数据源记录集 记录集对象的数据源可以是表,也可以是一个查询或SQL SELECT语句。数据源是查询或SQL SELECT语句时,一般不应执行Update操作。数据源是查询时,OpenRecordset操作与表数据源相同。7.7.3 ADO简介简介 ADO通过OLE(对象连接与嵌入)方法访问数据库。从应用角度而言,ADO和DAO一样都通过一系列对象访问和操作数据库。在设置了ADO引用之后,就可以在VBA程序中使用ADO对象访问数据库了。通过ADO访问数据库的操作步骤如下:(1) 连接数据库。(2) 打开记录集。(3) 操作记录集。计算机基础与Access数据库程序设计7ppt课件(全)(4) 关闭记录集。(5) 断开数据库连接。1. 连接数据库连接数据库 ADO通过Connection对象,即连接对象连接数据库。使用连接对象连接数据库操作步骤如下:(1) 说明并建立连接对象;(2) 调用连接对象的Open方法连接数据库。 说明连接对象及其他ADO对象的语句语法格式如下:Dim AS New 或Dim AS Set = New 计算机基础与Access数据库程序设计7ppt课件(全) 连接对象的对象类型为ADODB.Connection。 用连接对象Open方法连接数据库,其典型语法格式为:.Open 典型的连接字符串形如:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:ACCESS教材教材教学管理教学管理.mdb Provider表示OLEDB提供者信息,固定不变。“Data Source=”之后用单引号括起来的是连接数据库文件的全路径字符串,依据连接的Access数据库的不同,该内容相应改变。 VBA是在Access数据库内启动执行的,这时,系统自动建立一个ADO连接,连接对象名为:CurrentProject.AccessConnection,可以在VBA中直接使用该连接操作当前数据库。计算机基础与Access数据库程序设计7ppt课件(全) 数据库操作结束时须断开数据库连接,调用连接对象的Close方法断开数据库连接,其语法结构与DAO对象相同。2. 打开并操作记录集打开并操作记录集调用记录集对象的 Open方法打开记录集,其典型语法格式为:.Open , 数据源字符串可以是一个SQL SELECT语句或表的名字。使用的连接对象为一已经连接到数据库的连接对象。打开方式是一个符号常量,与数据源字符串相对应,数据源字符串是表时,打开方式选adCmdTable,数据源字符串是SQL SELECT语句时,打开方式选adCmdText。 记录集对象的字段引用方法与DAO相同,格式为:!计算机基础与Access数据库程序设计7ppt课件(全) 记录集对象的常用属性有BOF、EOF和RecordCount。BOF、EOF属性的作用与DAO完全相同。RecordCount返回记录总数,不能确定记录总数时返回-1。 记录集对象的常用方法有AddNew、Delete、MoveFirst、MoveLast、MoveNext、MovePrevious、Update和CancelUpdate方法。这些方法的使用和DAO记录集的对应方法基本相同,不再赘述。【例7-33】下面的ADO_OpC、ADO_Op子过程(参见“数据库操作”模块)分别打开当前数据库(教学管理)和“教学管理_b”数据库中的tScore表并输出没考试的选课记录。Public Sub ADO_OpC() Dim rs As New ADODB.Recordset Rem 下面的语句分两行书写,第一行行尾下划线为续行符,下划线之前留一个空格下面的语句分两行书写,第一行行尾下划线为续行符,下划线之前留一个空格计算机基础与Access数据库程序设计7ppt课件(全) rs.Open tScore, CurrentProject.AccessConnection, _ adOpenStatic, , adCmdTable 多语句行多语句行 Do While Not rs.EOF If IsNull(rs!成绩成绩) Then Debug.Print rs!学号学号, rs!课程号课程号, rs!成绩成绩 End If rs.MoveNext Loop rs.Close Set rs = NothingEnd SubPublic Sub ADO_Op() Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset Rem 下面的语句分两行书写,第一行行尾下划线为续行符,下划线之前留一个空格下面的语句分两行书写,第一行行尾下划线为续行符,下划线之前留一个空格 conn.Open Provider=Microsoft.Jet.OLEDB.4.0; + _计算机基础与Access数据库程序设计7ppt课件(全) Data Source=c:ACCESS教材教材教学管理教学管理_b.mdb rs.Open tScore, conn, , , adCmdTable Do While Not rs.EOF If IsNull(rs!成绩成绩) Then Debug.Print rs!学号学号, rs!课程号课程号, rs!成绩成绩 End If rs.MoveNext Loop rs.Close conn.Close Set rs = Nothing Set conn = NothingEnd Sub计算机基础与Access数据库程序设计7ppt课件(全)
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号