1、第8章 Access的编程工具VBA教学内容1. VBA编程环境;2. VBA的数据类型及运算;3. VBA程序流程的控制;4. VBA数组的概,念及用法:5. VBA模块的创建:6. VBA的数据库编程。教学要求【知识目标】1. 理解VBA的基本概念;2. 了解VBA的编程环境;熟悉在窗体上调用VBA代码的方法;3. 熟悉和掌握Access程序设计的过程;4. 理解并掌握三种程序控制结构。5. 理解各种变量类型的使用范围及定义方法;6. 掌握过程和常用函数的调用方法;7. 掌握数组的基本使用方法;8. 理解模块的概念;9. 了解并掌握用ADO接口访问数据库的一般方法。【技能目标】1. 掌握在
2、模块中创建Sub过程、函数过程的方法;2. 掌握在不同过程中通过参数的传值实现数据的传递方法;3. 掌握使用ADO和ADO对象对数据库进行操作的方法;4. 能利用VBA代码完成对象的操作。教学重点1. VBA程序设计;2, 模块的创建和使用。教学难点1.用ADO接口访问数据原的一般方法;3.编写VBA代码。教学方法讲授法、案例法、演示法课时数20课时(授课10课时,实验10课时)课程导入【思路】(1) 举例:在窗体上单击鼠标,输入姓名后,窗体上显示欢迎等字样。(2) 分析:ACCESS的特点之一是不须编程,即可创建简单的应用系统。 但这样的系统功能有限,有时无法满足用户的要求。如上例。(3)
3、引出:编程的好处在于:增强系统功能满足用户要求 方便系统维护中断模式代表VBA程序的一种运行状态。在中断模式下,程序暂停运行,这时编程者 可以查看并修改程序代码,检查各个变量或表达式的取值是否正确等。有两种情况可以使 程序进入中断模式。一种是如果程序出现错误,无法继续执行,则会自动进入中断模式。 第二种是通过设置断点,或在程序运行过程中单击“中断”按钮人为进入中断模式。8. 6.1错误类型编程时,可能产生的错误有4种:语法错误、编译错误、运行错误和逻辑错误。1. 语法错误语法错误是指输入代码时产生的不符合程序设计语言语法要求的错误,初学者经常发 生此类错误。2. 编译错误编译错误是指在程序编译
4、过程中发现的错误。2. 编译错误编译错误是指在程序编译过程中发现的错误。4.逻辑错误如果程序运行后,得到的结果和所期望的结果不同,则说明程序中存在逻辑错误。8. 6.2程序调试方法为了帮助编程者更有效地查找和修改程序中的逻辑错误,VBE提供了几个调试窗口, 分别是立即窗II、本地窗II和监视窗II。1. 设置断点在程序中人为设置断点,当程序运行到设置了断点的语句时,会自动暂停运行并进入 中断状态。2. 单步跟踪也可以单步跟踪程序的运行,即每执行一条语句后都自动进入中断状态。3. 设置监视点如果设置了监视表达式,一旦监视表达式的值为真或改变,程序也会自动进入中断模 式。8.7 VBA的数据库编程
5、讲授+演示【思路】在讲解8.6节时,通 过分析讲解教材中的 实例,让学生理解其 中涉及的相关概念, 掌握VBA数据库编程 的方法。注意:讲清相关的概 念。本节主要讨论如何在VBA程序中访问Access数据库。目前普遍采用各种接口访问各 种数据库等数据源,这里主要介绍ADO接口及其使用方法。8. 7.1数据访问接口 ADO1. 什么是ADO?ADO (ActiveX Data Object)即 ActiveX 数据访问对象,是 Microsoft 公司在 DAO (数 据访问对象)、RDO (远程数据对象)之后推出的新的数据访问对象。2. 在VBA中引用ADO类库ADO采用面向对象方法设计,各个
6、对象的定义被集中在ADO类库中。要使用ADO对象, 先要引用ADO类库。8. 7.2 ADO的主要对象ADO共有9个对象和4个对象集合。ADO的对象模型同样采用分层结构,经常被使用 的是3个处在最上层的对象,分别是Connection对象、Command对象和Recordset对象。1. Connection 对象Connection对象的作用是用于建立与数据源的连接,这是访问数据源的首要条件。 要创建到数据源的连接,应该先定义一个ADO的Connection对象。方法是: Dim MyCnn As ADODB. ConnectionSet MyCnn = New ADODB. Connect
7、ion2. Command 对象连接到数据源后,需要执行对数据源的请求,以获取结果集。ADO将这一类型的命令 功能封装在Command对象中。Command对象的作用是用来定义并执行针对数据源运行的具体命令使用Command对象,同样需要先创建一个Command对象的实例,然后通过设置Command 对象的ActiveConnection属性使打开的连接与Command对象相关联。再通过使用 CommandTcxt属性来定义命令(如SQL语句)的可执行文本。最后调用Command对象的 Execute方法执行命令并返记录集。3. Recordset 对象Recordset是最常用的ADO对象。
8、从数据源获取的数据就存放在Recordset对象中, 并旦所有Recordset对象均由记录(行)和字段(列)组成。可以使用Recordset对象的 方法和属性定位到数据的各行,查看行中的值或者操纵记录集中的数据。同样使用Recordset对象需要先定义并初始化一个Recordset对象。8. 7.3使用记录集中的数据【问题】VBA编程与宏的主要区别?从数据源获取r数据后,就可以对数据进行输出、插入、删除和更新等操作了。显然, 所有这一切都应该在Recordset记录集上进行。1. 输出记录集中的数据2. 插入、删除和更新记录集中的数据本章小结本章首先介绍了 Access的内置编程语言VBA的
9、有关知识,包括VBA的基本语法与设 计方法,然后介绍Access编程中的常用对象、数据库访问接口 ADO的使用方法,最后介 绍如何在VBA程序中用ADO访问Access数据库。VBA (Visual Basic for Application)是 Microsoft Office 内置的编程语言;基本 语法等来源于BASIC,是根据VB简化的宏语言,其语法、词法与VB基本相同,它简单、 易学。但VBA不是一个独立的开发工具,不能独立运行,需要Word、Excel、Access 等运行环境,一般被嵌入到这样的宿主软件中。课后练习一、问答题1. VBA程序设计语言有什么特点?与Visual Bas
10、ic程序设计语言的区别是什么?2. VBE环境主要由哪些窗口组成?它们的作用是什么?3. 什么是对象?什么是对象的属性、方法和事件?4. VBA的循环控制语句有哪几种?5. 什么是过程?过程和函数的区别是什么?二、选择题(见教材)三、填空题(见教材)实验内容及要求一、实验目的1. 熟悉和掌握Access程序设计的过程。2. 理解并掌握三种程序控制结构。3. 理解并掌握数组的使用方法。4. 掌握过程和函数的创建及调用方法。5. 了解并掌握用ADO接口访问数据库的一般方法。二、实验内容1. 创建“随机数发生器”窗体,如图8-23所示。窗体运行后,在“从”(下限) 和“到”(上限)文本框中输入数据范
11、围,然后单击“生成”按钮,窗体中的标签显示一 个在此范围内的随机数。请谕入随机数的范围:从匚_2到口。图8-23 “随机数发生器”窗体提示:可以使用下面的公式产生指定范围 的随机数。int (Rnd()*(上限-下限+1)+下限)2. 创建“宋词欣赏”窗体,如图8-24所 示。窗体运行后,选择窗体下方的单选按钮, 在窗体上方显示出对应的诗词O3. 创建“统计窗体,如图8-25所示。 窗体运行后,单击左侧的“生成”按钮,自动 生成50个0-100之间的随机数。单击右侧的“统计”按钮,在右侧的各个文本框中输出 统计结果。4. 创建“雇员基本情况查询”窗体。要求如下。(1)按图8-26所示格式和内容
12、创建窗体。(2)添加查询功能并验证查询结果。如果未输入要查询的雇员姓名,而单击“查询”按钮,应使用消息框给出提示,提示内容为“对不起,未输入雇员姓名,清输入!” ;如 果输入并找到了要查找的雇员,应在窗体输出结果;否则使用消息框给出未找到信息,如 图8-26所示。提示:窗体为非绑定窗体,所有的控件为非绑定式控件。饨计统计窗体图8-24“宋词欣赏”窗体16*513411027648550生成图 8-2590-100480-89770-79560-692Else语句块2End If执行时,先判断表达式的值,为True则执行语句块1,否则执行语句块2。表达式 可以是任何表达式,一般为关系表达式或布尔
13、表达式。如果是其他表达式,则非0认为是 True, 0 认为是 False。2. If*Then*ElseIf 语句如果需要用多个条件对程序进行控制,可以使用If-Then-Elself语句。其语句格 式为:If表达式1 Then语句块1Elself表达式 2Then语句块2Elself表达式 nThen语句块nElse语句块n+l End If运行时,从表达式1开始逐个测试条件,当找到第一个为True的条件时,即执行该 条件后所对应的语句块。3. Select CaseVBA中的另一个多分支语句是Select Case语句。其语句格式为:Select Case变量或表达式Case表达式列表1
14、语句块1Case表达式列表2语句块2 Case Else语句块n+1End Select数是奇数还是偶数.讲授+演示【思路】在讲解节时, 可以通过演示教材中 的实例,使学生了解 如何实现程序的分支 控制。4.分支嵌套使用各种分支语句时可以在其中的语句块中嵌套另一个分支语句,这就是分支嵌套。 而且各种分支语句之间也可以嵌套,例如,在If-Thon-Else语句中嵌套Select Case 语句等。8. 3.3程序的循环控制循环控制结构也叫重复控制结构。特点是程序执行时,该语句中的一部分操作即循环 体被重复执行多次。在VBA中,执行循环控制的语句有For循环语句和I)o-l.oop循环语 句。1.
15、 For循环语句语句格式为:For循环变量 =初值to终值Step 步长语句块Exit For语句块Next循环变量2. 【)() Loop循环语句该语句适合的范围更广。有以下两种形式。形式1:Do WhilelUntil 条件语句块Exit Do语句块Loop3. 循环嵌套与分支结构相似,各种循环控制语句也可以嵌套,并旦分支结构和循环结构彼此之间 也可以进行嵌套。通过各种语句之间的这种嵌套,就可以实现更复杂的程序控制。儿种循环语句的比较。8.4 VBA数组如果在程序中要对-组数据进行处理,通常的解决方法是将这组数放在数组中。数组并不是一种数据类型而是一组相同类型的变量集合。在程序vzhong
16、使用数组的 最大好处是用一个数据名代表逻辑上相关的一组数据,用下标来区别该数据组中的各个元 素。8. 4.1数组的概念及定义数组是一组相同类型的数据的集合。它属于构造数据类型,可以由变量这样的基本类 型构造而成。1. 一维数组的定义【问题】求解:1+2+3+-+10?讲授+演示【思路】在讲解8. 3.3节时, 通过分析、讲解和演 示教材中的实例,让 学生了解如何实现程 序的循环控制。【问题】要处理10个人的考试 成绩,怎么组织这些 数据?讲授讲授+演示【思路】在讲解8. 4.2节时, 通过分析讲解教材中 的实例,让学生理解 数组的概念和使用方 法。讲授+演示【思路】在讲解8.5节时,通 过分析
17、讲解教材中的 实例,让学生掌握VBA 模块的创建中的概念 及创建方法。注意:讲清相关的概使用数组必须先定义数组,一维数组的定义格式为:Dim数组名(下界to上界 As数据类型2.二维数组的定义二维数组其定义格式为:Dim数组名(K下界to上界,K下界to上界 As 数据类型8. 4.2数组的应用一旦定义了数组,就可以用前面介绍的对变量的处理方法处理数组,并且可以用循环 语句对数组进行处理,从而简化程序的书写,提高程序的可读性。数组可以看做是程序中对成组数据的组织方法,使用数组可以提高数据的处理效率。 本节主要介绍了一维和二维定长数组的定义和使用方法,关于动态数组和多维数组等其他 内容,可参考有
18、关书籍。8.5 VBA模块的创建VBA程序是由模块组成的。使用工程资源管理器窗口就可以直观地看到当前所打开 的Access程序的构成。组成VBA程序的模块有类模块和标准模块,类模块通常和某个 具体的对象相连,前面章节所建立的窗体和报表都属于类模块。8. 5.1 VBA标准模块模块是存储代码的容器。标准模块一般用来承载在程序其他模块中要引用的代码,这 些代码按照其是否有返回值可以被组织成Sub过程和Function函数。因而标准模块不与 某个具体的对象相连,它的作用就是为其他模块提供可共享的公共Sub过程和Function 函数。过程的创建和调用过程一般是一段可以实现某个具体功能的代码。与函数不
19、同,过程没有返回值。既可 以在类模块中创建过程,也可以在标准模块中创建过程。8. 5.3函数的创建和调用与过程不同,函数有返回值。VBA的函数包含内置函数和用户自定义函数两种。关于 内置函数前面己有介绍,这里主要介绍如何在模块内创建自定义函数。创建函数与创建过 程的方法相似,不同的是在图8-10所示的“添加过程”对话框中应将类型选择为“函数”。 考虑到函数有返回值,因此在定义函数时应特别注意要指明函数的返回值的类型,并且在 函数体内给函数赋值.函数的定义形式如下:Publicl Private Static Function 过程名(变量名 1 As 类型,变量名 2 As 类 型,)As类型
20、局部变量或常数定义V语句块函数名*表达式Exit Function语句块函数名*表达式End Function8. 5.4过程调用中的参数传递在调用过程和函数的过程中,通常会发生数据的传递,即将主调过程中的实参传给被 调过程的形参。在参数传递过程中,可以有传址和传值两种形式。1. 传址如果在定义过程或函数时,形参的变量名前加ByRef或不加任何前缀,即为传址。 传址的参数传递过程是:调用过程时,将实参的地址传给形参。因此如果在被调过程 或函数中修改了形参的值,则主调过程或函数中实参的值也跟着变化。2. 传值如果在定义过程或函数时,形参的变量名前加By Vai前缀,即为传值。8. 5.5局部变量
21、、全局变量和静态变量前面讲到的变量都是在过程和函数内定义的局部变量。除了过程内的局部变量, 在VBA程序中还可以定义模块级局部变量和全局变量。顾名思义,这些不同的变量决 定了变量的有效范围,即作用域。定义这些变量的方法,主要区别在于定义的地点和所使用的关键字。1. 过程内局部变量在过程和函数内用关键字Dim定义,有效范围是定义该变量的过程或函数。前面示例 中的变量都是过程内局部变量,另外,形参也属于过程内局部变量。2. 模块级局部变量在模块的通用声明段用关键字Dim或Private定义,有效范围是定义该变量的模块。3. 全局变量全局变量是可在整个应用程序使用的变量。定义的方法是在模块的通用声明
22、段用 Public关键字定义变量。引用全局变量时,如果是在标准模块中定义的全局变量,可在应用程序的任何地方直 接用变量名引用该变量。如果是在类模块(如窗体模块)中定义的全局变量,可在应用程 序的任何地方引用该变量,但在变量名的前面应加模块名限定,形式为“模块名.变量名气4. 静态变量局部变昂:和全局变晟决定了变量的有效范围,静态变量则决定了变量的生存期。对于 过程内的局部变量,它的生存期从进入过程(Sub)开始,到退出过程(End Suh)时结束。 如果要改变过程内局部变量的生存期,可以将它定义为静态变量。8.6 VBA程序的调试简单讲解编程就是规划、书写程序代码并上机调试的过程。很难做到书写后的程序能一次通过。 因此在编程过程中往往需要不断重复检查和纠正错误,试运行这个过程,这就是程序调试。 在进一步学习程序调试方法之前,首先需要了解VBA开发环境的中断模式。