资源预览内容
第1页 / 共40页
第2页 / 共40页
第3页 / 共40页
第4页 / 共40页
第5页 / 共40页
第6页 / 共40页
第7页 / 共40页
第8页 / 共40页
第9页 / 共40页
第10页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第一章数据库系统的基础知识1.1 数据库系统概述1.2 数据模型1.3 关系数据库1.4 数据库设计基础1.5 Access2003 数据库简介1.1 数据库系统概述1.1.1 数据库系统的组成数据:描述事物的符号记录,是数据库中存储的基本对象。例如文字、图形、图像、声音等。数据库(DB ) : 长期存储在计算机内的、有组织的、 可共享的数据集合。 数据库管理系统 (DBMS ) :位于用户与操作系统之间的一层数据管理软件,是数据库系统的中心枢纽。能科学的组织和储数据,高效的获取和维护数据。数据库管理系统的主要功能:数据定义功能数据操纵功能数据库的运行管理数据库的建立与维护功能数据库系统:在计算机系统中引入数据库之后组成的系统,用来组织和存取大量数据的管理系统。数据库系统是由计算机系统(硬件和软件系统)、数据库、数据库管理系统、数据库管理员和用户组成的具有高度组织性的整体。通常把数据库系统简称为数据库。1.1.2 数据库系统的特点:数据的结构化数据的共享性数据的独立性数据的存取粒度数据库管理系统对数据进行统一的管理和控制为用户提供了友好的接口1.1.3 高级数据库阶段1、分布式数据库系统2、数据库的发展方向一是改造和扩充关系数据库,以适应新的应用要求;二是改用新的数据库模型。1.2 数据模型数据模型:是现实世界数据特征的抽象,是工具,是用来抽象、表示和处理现实世界中的数据和信息的工具。数据模型应满足以下三个方面的要求:1、能够比较真实的模拟现实世界2、容易被人理解3、便于在计算机系统中实现数据模型的组成要素:数据模型是由数据结构、数据操作和数据的约束条件三部分组成的。数据结构:所研究对象的集合,这些对象是数据库的组成部分。数据结构分为两类:一类是与数据类型、内容、性质有关的对象;一类是与数据之间联系有关的对象。数据操作:是指对数据库中各种对象的实例允许执行的操作的集合,包括操作及有关的操作规则。数据的约束条件:是一组完整性规则的集合。概念模型概念模型涉及以下术语:1、实体:客观存在并可相互区别的事物称为实体。实体可以是实际事物,也可以是抽象事件。2、属性:描述实体的特性称为属性。属性的具体取值称为属性值,用以刻画一个具体实体。3、关键字:如果某个属性或属性组合能够唯一的标识出实体集中的各个实体,可以选做关键字,也称为码。4、联系:实体集之间的对应关系称为联系,它反映现实世界事物之间的相互关联。联系分为种,一种是实体内部各属性之间的联系,另一种是实体之间的联系。5、E-R 图:常用实体短横线联系方法来描述现实世界的概念模型。E-R 图有三个要素。实体:用矩形并在框内标注实体名称来表示。属性:用椭圆表示,并用连线将其与相应的实体连接起来。联系:用菱形表示,菱形框内写明联系名,并用连线分别与有关实体连接起来,同时在连线上标上连线的类型(1:1、1:n 或 m:n)精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 40 页联系有三种类型。1、一对一联系:如果对于实体集A 中的每一个实体,实体集B 中至多有一个实体与之联系反之亦然,则称实体集A 与实体集B 具有一对一联系,记为1:1。例如:系和主任2、一对多联系:如果对于实体集A 中的每一个实体,实体集B 中有 n 个实体( n0)与之联系,反之,对于实体集B 中的每一个实体,实体集A 中至多有一个实体与之联系,则称实体A与实体集 B 具有一对多联系,记为1:n。例如:系和学生3、多对多联系:如果对于实体集A 中的每一个实体,实体集B 中有 n 个实体( n0)与之联系,反之,对于实体集B 中的每一个实体,实体集A 中也有 m 个实体( m0)与之联系,称实体集 A 与实体集B 具有多对多联系,记为m:n。例如:学生和课程常用的数据模型层次模型 :该模型的基本数据结构是层次结构,也称树型结构, 树中每个节点表示一个实体类型。这些节点应满足:有且只有一个节点无双亲结点(根节点);其他节点有且仅有一个双结点。网状模型 :网状模型的数据结构是一个网状结构。应满足以下两个条件的基本层次联系集合:个节点可以有多个双亲结点;多个节点可以无双亲结点。关系模型 :关系模型的数据结构是二维表,由行和列组成。一张二维表称为一个关系。关系模中的主要概念有:关系、属性、元组、域和关键字。面向对象模型 :面向对象的数据模型中的基本数据结构是对象,一个对象由一组属性和一组方组成,属性用来描述对象的特征,方法用来描述对象的操作。一个对象的属性可以是另一个对象,另一个对象的属性还可以用其他对象描述,以此来模拟现实世界中的复杂实体。数据库的体系结构数据库系统的三级模式结构数据库系统的二级映像功能1.3 关系数据库关系的一些术语1、关系:在关系模型中, 一个关系就是一张二维表,每一个关系都有一个关系名。在数据库中,一个关系存储为一个数据表。2、属性:表中的列称为属性,每一个列都有一个属性名,对应数据表中的一个字段。3、元组:表中的行称为元组。一行就是一个元组,对应数据表中的记录,元组的各分量分别对应于关系的各个属性。关系模型要求每个元组的每个分量都是不可再分的数据项。4、域:具有相同数据类型的值的集合称为域,域是属性的取值范围,即不同元组对同一个属性的取值所限定的范围。5、候选码:如果通过关系中的某个属性或属性组能唯一地标识一个元组,称该属性或属性组为候选码。6、主码(主键) :在一个关系中有多个候选码,则选定其中一个为主码(主键)。主码的属性称为主属性。7、外码(外键) :如果表中的一个字段不是本表的主码,而是另外一个表的主码或候选码,这个字段(属性)就称为外码。关系模型关系数据库采用关系数据模型(简称关系模型)作为数据组织方式,而关系模型是用二维表格结构来表示实体及实体间联系的模型。二维表中的每一列代表实体或实体间关系的某种属性,二维表中的一行叫做一个元组,是记录类型的实例,代表了某个具体的实体或具体实体间的特定关系。关系模型不仅可以方便的表示两个实体类型间的1:1、1:n 关系,而且可以直接描述他们之间的m :n 关系。关系模型由关系数据结构、关系操作集合和完整性规则三部分组成。关系运算1、传统的集合运算并运算:设有两个关系R 和 S,它们具有相同的结构,R 和 S 的并是由属于R 或属于 S 的元组组成的集合,运算符为U。记为 T= RUS 差运算:R 和 S的差是由属于R 但不属于S 的元组组成的集合,运算符为-。记为 T= R-S 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 40 页交运算: R 和 S 的交是由既属于R 又属于 S 的元组组成的集合,运算符为n。记为 T= RnS=R- (R-S)2、专门的关系运算选择运算 : 选择关系中满足一定条件的元组。从关系中找出满足给定条件的那些元组称为选择。其中的条件是以逻辑表达式给出的,值为真的元组将被选取。投影运算 :选取关系中的某些列,并且将这些列组成一个新的关系。从关系模型中挑选若干属性组成新的关系称为投影。联接运算 :选择和投影运算都属于一目运算,它们的操作对象只是一个关系。联接运算是二目运算,需要两个关系作为操作对象。联接是将两个关系模式通过公共的属性名拼接成一个更宽的关系模式,生成的新关系中包含满足联接条件的元组。关系完整性实体完整性实体完整性规则:若属性 A 是基本关系R 的主码, 则属性 A 不能取空值。 实体完整性规则规定基本关系的所有主属性都不能取空值,而不仅是主码整体不能取空值。参照完整性参照完整性规则:若属性(或属性组)F 是基本关系R 的外码,它与基本关系S 的主码 K 相对应(基本关系R 和 S 不一定是相同的关系) ,则 R 中的每个元组在F 上的值必须如下:(1) 、或者取空值(F 的每个属性值均为空值)(2) 、或者等于S中的某个元组的主码值。参照完整性规则就是定义外码与主码之间的引用规则。用户定义的完整性用户定义的完整性就是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。1.4 数据库设计基础1.4.1 数据库设计步骤1、设计原则关系数据库的设计应遵从概念单一化“ 一事一地” 的原则避免在表之间出现重复字段表中的字段必须是原始数据和基本数据元素用外部关键字保证有关联的表之间的联系2、 设计的步骤和过程(1) 、需求分析信息需求处理要求安全性和完整性要求(2) 、确定需要的表每个表应该只包含关于一个主题的信息表中不应该包含重复信息,并且信息不应该在表之间复制(3) 、确定所需字段每个字段直接和表的实体相关以最小的逻辑单位存储信息表中的字段必须是原始数据确定主关键字字段(4) 、确定联系一对多联系多对多联系一对一联系(5) 、设计求精是否遗忘了字段是否存在保持大量空白字段是否有包含了同样字段的表表中是否带有大量不属于某实体的字段是否在某个表中重复输入了同样的信息是否为每个表选择了合适的主码是否有字段很多而记录很少的表,而且许多记录中的字段值为空1.5 Access 2003 数据库简介Access 的发展过程Access 2003 新增功能第二章Access 2003 数据库2.1 Access 2003 数据库开发环境2.2 Access 2003 数据库操作与管理2.3 Access 2003 数据库安全性2.4 安全机制管理2.5 加密数据库2.1 Access 2003 数据库开发环境2.1.1 Access 2003 数据库的安装、启动与关闭安装启动关闭2.1.2 Access 2003 数据库组成1、表:表是数据库最基本的组件,是存储数据的基本单元,由不同的列、行组合而成,每一列精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 40 页代表某种特定的数据类型,称为字段;每一行由各个特定的字段组成,称为记录。2、查询:通过设置某些条件,从表中获取所需要的数据。按照指定规则,查询可以从一个表、一组相关表和其他查询中抽取全部或部分数据,并将其集中起来,形成一个集合供用户查看。3、窗体: 是数据库和用户的一个联系界面,用于显示包含在表或查询中的数据和操作数据库中的数据。在窗体中,不仅可以包含普通的数据,还可以包含图片、图形、声音、视频等多种对象。4、报表:通常作为数据统计的方式来使用。5、页:是Access 2000 之后新增的对象,指的就是网页。6、宏:是由一系列命令组成的集合,以实现自动执行重复性工作的功能。使用宏可以简化一些经常性的操作。7、模块:是用VBA 语言编写的程序段,它以Visual Basic 为内置的数据库程序语言。对于数据库的一些较为复杂或高级的应用功能,需要使用VBA 代码编程实现。2.1.3 Access 2003 数据库操作环境1、数据库窗口2、组3、Access 2003 帮助系统2.2 Access 2003 数据库操作与管理2.2.1 创建数据库使用向导创建数据库自定义创建数据库数据库的打开与关闭2.2.2 数据库管理转换数据库压缩和修复数据库拆分数据库同步复制2.3 Access 2003 数据库安全性2.3.1 设置数据库密码设置密码使用密码撤销密码2.3.2 用户集安全机制用户、组和权限工作组信息文件2.3.3 使用权限显示权限和隐式权限权限所适用对象2.4 安全机制管理增加帐户删除帐户更改账户权限打印帐户和组帐户列表2.5 加密数据库数据库加密是指对数据库文件进行压缩,加密后的数据库无法通过工具程序或字处理程序解密。加密后的数据库依然可以在Access 2003 系统中打开,不限制用户对对象的访问。第 3 章表3.1 创建表3.2 管理与维护表3.3 操作表3.4 数据的导入与导出3.1 创建表Access 2003 提供三种创建表的方法:1、使用设计器创建表2、使用向导创建表3、通过输入数据创建表使用设计视图创建表步骤: 1.在数据库窗口中选择表对象,双击使用设计器创建表2.或者单击【新建】按钮,选择设计视图3.在表设计视图中, 【字段名称】列输入字段名,【数据类型】列选择字段的数据类型,【说明】栏中输入有关此字段的说明,窗口下部的【字段属性】区用于设置字段的属性。4.所有的字段名、数据类型、说明及字段属性都设置完后,选择【文件】| 【保存】或者单击工具栏中的【保存】按钮。5.如果在保存表之前未定义主码字段,则Access2003 将询问是否由系统自动添加一个主码。选择【是】表示确认,选择【否】表示不需要自动添加主码字段。关于字段名称、数据类型、说明字段名称在 “ 字段名称” 列中可以添加或显示已有字段名称,字段名的命名必须符合精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 40 页Access2003 的对象命名规则。(1) 、长度最多可达64 个字符;( 2) 、可以包括字母、数字和空格,以及除句点、惊叹号、重音符号和方括号外的所有特殊字符;(3) 、不能使用前导空格或者控制字符(ASCII值从031的字符)。2. 数据类型:用于指定在字段中存储的数据类型。3. 说明该列用于对字段进行必要的说明。例如:字段的含义及用途等字段属性:决定了如何存储和显示字段中的数据查阅属性 :字段的查阅属性选项卡只有一个【显示控件】属性,该属性仅对文本、数字和是/否类型的字段有效。1.对文本和数字类型的字段提供了三个选项值:文本框(默认值)、列表框和组合框2.对是 /否类型的字段提供了3 个选项值:复选框(默认值)、文本框和组合框主 码主码 (也称主键、主关键) :用于唯一标识表中每条记录的一个或一组字段。表设计主码,可以确保唯一性,避免任何重复的数值或Null (空)值保存到主码字段中。在 Access 2003 中,可以定义3 种主码:自动编号、 单字段及 多字段主码自动编号主码 : 创建一个空表时,在保存表之前如果未设置表的主码,Access2003 会询问是否需要设置一个自动编号的主码。它的作用是在表中添加一个自动编号字段,在输入记录时,自动编号字段可设置为自动输入连续数字的编号。单字段主码 :在表中,如果某一字段的值能唯一标识一条记录,就可以将此字段指定为主码。如果选择作为主码的字段有重复值或Null (空)值, Access 2003 就不会将它设置为主码。多字段主码 :在表中,可以将两个或更多的字段指定为主码(至多包括10 个字段)。设置主码的操作步骤:1、在设计视图中打开表;2、单击行选择器,选择主码字段所在的行,如果要设置多字段主码,先按住Ctrl 键,然后单击行选择器选择所需的字段;3、单击工具栏中的【主码】按钮,或右击,从弹出的快捷菜单中选择【主码】命令。索引创建索引1、创建单字段索引在设计视图中打开需要设置单字段索引的表;单击要设置索引的字段行;在【字段属性】选项卡中,单击【索引】属性框,根据字段的数据值,选择【有(无重复 )】 或【有 (有重复 )】选项。2、创建多字段索引在设计视图中,打开需要创建多字段索引的表;选择【视图】 | 【索引】命令,或者单击工具栏中的【索引】按钮,打开在【索引名称】列中输入索引名称;在【字段名称】列中,单击右边向下箭头,从下拉列表中选择索引的第一字段;在【排序次序】列中,选择【升序】或【降序】选项;根据需要可继续定义其他需要索引的字段。查看与编辑索引在设计视图中打开包含索引的表;选择【视图】 | 【索引】命令,或单击工具栏中【索引】按钮,打开【索引】对话框;在【索引】对话框中列出当前表中已定义的索引名称、索引字段、索引的排序次序等;要删除某个索引,可以单击行选定器选择索引,然后按 Delete 键删除。使用向导创建表步骤: 1.在数据库窗口中选择表对象2.单击新建按钮,选择表向导3.直接双击使用向导创建表通过输入数据创建表精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 40 页1.在数据库窗口中选择表对象,双击通过输入数据创建表2.此时系统打开一个空表3.如果要对字段重新命名,可双击字段名,然后输入新名称。4.在各字段中输入相应的数据。5.输入数据后,单击工具栏中的【保存】按钮,或者选择【文件】菜单中【保存】命令,在显示的【另存为】对话框中输入表的名称,单击【确定】按钮保存表。3.2 管理与维护表3.2.1 表间关系的建立如果两个表使用了共同的字段,就应该为这两个表建立一个关系,通过表间关系就可以指出一个表中的数据与另一个表中的数据的相关方式。表间关系的类型有:一对一、一对多、多对多当创建表间关系时,必须遵从参照完整性规则,这是一组控制删除或修改相关表数据方式的规则。参照完整性规则:1、在将记录添加到相关表中之前,主表中必须已经存在了匹配的记录;2、如果匹配的记录存在于相关表中,则不能更改主表中的主码;3、如果匹配的记录存在于相关表中,则不能删除主表中的记录。创建表间关系1、在数据库窗口中,单击工具栏中的【关系】按钮,或在数据库窗口中右击,在快捷菜单中选择【关系】命令2、在窗口中右击,从快捷菜单中选择【显示表】命令3、在【关系】窗口中,将显示添加的表及字段,主码自动用粗体标志。4、在【编辑关系】对话框中选中【实施参照完整性】和【级联更新相关字段】复选框。5、单击【联接类型】按钮,打开【联接属性】对话框。6、在【编辑关系】对话框中,单击【创建】按钮,即在关系表之间用一条线将二者连接起来,表示已经创建好表之间的关系。7、关闭【编辑关系】对话框,保存设定的关系。编辑与删除表间关联对已经存在的关系,单击关系连线,连线会变黑,右击,从快捷菜单中选择【编辑关系】命令,或者双击关系连线,系统会打开【编辑关系】对话框,从中可以对创建的关系进行修改。单击关系连线后按Delete 键或右击并从快捷菜单中选择【删除】命令,可删除表间的关系。3.2.2 修改表结构添加、删除、重命名字段和移动字段的位置在【设计】视图中,可以进行添加新字段的操作1、添加字段2、删除字段3、重命名字段4、移动字段的位置修改字段的数据类型修改字段的属性3.3 操作表3.3.1 数据输入在数据库窗口中,选中要打开的数据表,在表名上双击,或者单击工具栏中的【打开】按钮,即进入数据表视图窗口。窗口的主要组件:记录选择器按钮星号记录导航器输入 “ 是/否” 型数据输入 “ 日期 /时间 ” 型数据输入 “OLE对象 ” 型数据输入 “ 超链接 ” 型数据输入 “ 查阅向导 ” 型数据3.3.2 排序记录排序就是按照某个字段的内容值重新排列数据记录。默认情况下,Access 2003 按主码字段排序记录,如果表中没有主码,则以输入的次序排序记录。在数据检索和显示时,可按不同的顺序来排列记录。1、单字段排序:若要对表或窗体中的某个字段排序,先单击要排序的字段,然后进行下列操作之一:单击工具栏中的【升序】或【降序】按钮。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 40 页使用【记录】 | 【排序】命令,选择【升序排序】或【降序排序】。右击字段并从快捷菜单中选择【升序排序】或【降序排序】命令。若要将记录恢复到原来的顺序,使用【记录】| 【取消筛选 /排序】命令,或右击数据表并从快捷菜单中选择【取消筛选/排序】命令。2、多字段排序:如果要将两个以上的字段排序,这些字段在数据表中必须相邻。排序的优先权从左到右。在确保要排序的字段相邻后,选择这些字段,再选择【升序】或【降序】排列。3、保存排序顺序:改变记录的排序后,在关闭表时,Access 2003 会提示是否保存对设计(包括排序顺序)的更改。选择【是】,就保存排序,再打开时将按该排序显示。3.3.3 筛选记录 :当要显示数据表或窗体中的某些而不是全部记录时,可使用筛选操作。筛选处理是对记录进行筛选,选择符合准则的记录。准则是一个条件集,用来限制某个记录子集的显示。 Access 2003 提供了 5 种筛选记录的方法。按窗体筛选按选定内容筛选内容排除筛选高级筛选 /排序输入筛选3.3.4 设置数据表格式1、设置行高和列宽2、数据字体的设置3、表格样式的设置4、隐藏列5、冻结列3.4 数据的导入与导出3.4.1 导入、导出数据导入数据 :使用导入操作可以将外部数据源数据变为Access 格式。导出数据 :导出数据是将Access 数据库中的表、查询或报表复制到其它格式的数据文件中。3.4.2 链接数据链接数据就是在源数据和目标数据之间建立一个同步的影像,所有对外部数据源数据的改动都会及时地反映到目标数据库中,同时如果在Access 2003 中对链接数据进行了修改也会同步反映到外部数据源数据中。操作方法:打开目标数据库,选择【文件】| 【获取外部数据】| 【链接表】命令,在打开的对话框中,选择需要链接的文件及相关选项。取消链接:在数据库窗口中删除链接表即可。第四章查询4.1 查询的种类与应用4.2 查询的建立方法4.3 查询条件 4.4 查询设计4.5 SQL 查询4.1 查询的种类与应用查询 是 Access 处理和分析数据的工具,它能够把多个表中的数据抽取出来,供用户查看、 更改和分析使用。4.1.1 查询的种类1、选择查询 :选择查询可以从一个或多个表或者其他的查询中获取数据,并按照所需要的排列次序显示,利用选择查询可以方便地查看一个或多个表中的部分数据。查询的结果是一个数据记录的动态集,用户可以对动态集中的数据记录进行修改、删除,也可以增加新的记录,对动态集所做的修改会自动写入相关联的表中。2、操作查询 :操作查询就是在一个操作中对查询中所生成的动态集进行更改的查询。操作查询可以分为生成表查询、追加查询、 更新查询和删除查询。操作查询只能更改和复制用户的数据,而不能返回数据记录。生成表查询:可以利用从一个或多个表及查询中的查询结果创建一个新表。追加查询:将查询结果添加到现存的一个或多个表或者查询的末尾。生成表查询和追加查询可以复制原有的数据。更新查询:根据查询中指定的条件,更改一个或多个表中的记录。删除查询:根据查询中指定的条件,从一个或多个表中删除相关记录。更新查询和删除查询可以更改现存的数据。3、SQL 查询SQL 是一种结构化查询语言,是数据库操作的工业化标准语言,使用SQL 语言可以对任何数据库管理系统进行操作。SQL 查询就是使用SQL 语言创建的查询,它又可以分为联合查询、传精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 40 页递查询和数据定义查询等。4、交叉表查询:交叉表查询可以汇总数据字段的内容。在这种查询中,汇总计算的结果显示在行与列交叉的单元格中。交叉表查询还可以计算平均值、总计、最大值或最小值等。5、参数查询 :参数查询可以在运行查询的过程中输入参数值来设定查询准则,而不必重新创建一个新查询。参数查询不是一种独立的查询,它扩大了其他查询的灵活性。执行参数查询时,系统会显示一个对话框提示输入参数的值。4.1.2 查询的应用1、选择字段在查询中,可以只选择表中的部分字段生成所需的多个表。2、选择记录根据指定的条件查询表中的记录。3、编辑记录编辑记录主要是添加记录、修改记录和删除记录等。4、 实现计算可以在查询中进行各种统计计算,还可以建立一个计算字段来保存计算结果。5、利用查询的结果生成窗体或报表6、利用查询的结果创建表4.2 查询的建立方法4.2.1 使用查询向导4.2.2 使用查询设计器4.2.1 使用查询向导简单查询是应用最广泛的一种查询,它可以从一个或多个表、查询中查找相关记录。使用简单查询向导创建的查询具有以下特点:不能添加选择准则或者指定查询的排序次序。不能改变查询中字段的次序,字段将一直以第一个向导对话框中添加它们时的顺序出现。1、简单查询向导(1)在数据库窗口中,选择【查询】对象双击【使用向导创建查询】,系统打开【简单查询向导】的第一个对话框,如图(2)在【表 /查询】下拉列表框中选择【表:学生】,学生表的所有字段都将出现在【可用字段】列表框中。(3)在【可用字段】列表框中选择查询字段并按按钮将其添加到【选定的字段】列表框中,也可以通过双击字段将其添加到【选定的字段】列表框中。重复步骤(2)和( 3) ,完成表中字段的添加。(4)单击【下一步】按钮,打开第二个向导对话框,选择是使用明细查询还是使用汇总查询。默认明细查询。(5)单击【下一步】按钮,打开最后一个对话框,如图在【请为查询指定标题】文本框中,输入查询名字,单击【完成】按钮,在数据表视图中显示查询结果。2、向导的汇总查询(1)在数据库窗口中,选择【查询】对象,双击【使用向导创建查询】,系统打开【简单查询向导】的第一个对话框;在【表/查询】下拉列表框中选择【表:学生】,添加学生表的“ 姓名 ”字段到【选定的字段】列表框中;在【表/查询】下拉列表框中选择【表:选课成绩】项,添加选课成绩表的“ 成绩 ” 字段到【选定的字段】列表框中,(2)单击【下一步】按钮,在打开的对话框中,选择【汇总】选项,单击【汇总选项】按钮,打开对话框选中【汇总】、 【平均】、 【最小】和【最大】复选框分别计算学生的总成绩、平均成绩、最低成绩和最高成绩。选中【统计选课成绩中的记录数】复选框,为分组查询添加一列,提供记录计数。(3)单击【确定】按钮,返回第二个向导对话框,然后单击【下一步】按钮,转向第三个向导对话框,为查询命名。(4)单击【完成】按钮,执行该汇总查询。结果如图。4.2.2 使用查询设计器在 Access 2003 中,查询有三种视图:设计视图、数据表视图和SQL 视图。使用设计视图,不仅可以创建各种类型的查询,而且可以对已有的查询进行修改。例如:要打开利用向导创建的“ 学生成绩查询” ,可在数据库窗口中选中该查询,然后单击工具栏中的【设计】按钮,结果如图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 40 页1、查询设计视图设计视图的窗口分两部分,上半部分显示查询所使用的表对象,下半部分定义查询设计的表格。字段:选择查询中要包含的表字段。表:选择字段的来源表。排序:定义字段的排序方式。显示:设置是否在数据表视图中显示所选字段。条件:设置字段的查询条件。或:用于设置多条件之间的或条件。2、查询设计视图的工具栏3、创建查询在设计视图中创建查询,首先应单击【显示表】按钮,在打开的【显示表】对话框中选择查询所依据的表、查询,并将其添加到设计视图的窗口中。如果选择多个表,多个表之间应先建立关联。例:利用学生、课程和选课成绩表,创建一个不及格学生的成绩查询。(1)在【显示表】对话框中,把学生、课程和成绩表添加到设计视图的窗口中。(2)依次拖入或在【字段】行中选择“ 姓名 ” 、“ 课程名称 ” 和“ 成绩 ” 字段。(3)在【成绩】列中的【条件】行中输入条件“、=、=、。用关系运算符连接的两个表达式构成关系表达式,结果为一个逻辑值True 或者 False。连接运算表达式连接运算符包括&和+。连接运算符具有连接字符串的功能。逻辑运算表达式逻辑运算符包括And、Or、Not。逻辑运算主要用于对真、假进行判断。And 表示两个操作数都为True 时,表达式的值才为True;Or 表示两个操作数只要有一个为True,表达式的值就为True ; Not 表示取操作数的相反值。Between And:用于指定一个字段值的取值范围指定的范围之间用And 连接。In:用于指定一个字段值的列表,列表中的任何一个值都可与查询的字段相匹配。当表达式中包含的值较多时,使用In 运算符会使表达式更简洁。Is:指定所在字段中是否包含数据,Is Null 表示查找该字段没有数据的记录,Is Not Null 表示查找该字段有数据的记录。Like:查找相匹配的文字,用通配符来设定文字的匹配条件。Access 2003提供的通配符:?:代表任意一个字符* :代表任意多个字符# :代表任意一个数字位(0-9) 【字符表】:代表在字符表中的单一字符【!字符表】 :代表不在字符表中的单一字符可以使用一对方括号为字符串中该位置的字符设置一个范围,如【0-9】 【a-z】4.3.2 标准函数1、求和函数格式: Sum()功能:返回字段中值的总和。说明: “ 字符串表达式 ” 可以是一个字段名(数值类型),或者是含有数值类型字段的表达式。例如: Sum(单价 * 数量)2、求平均函数格式: Avg()功能:求数值类型字段的平均值。说明: (1)“ 字符串表达式” 可以是一个字段名 (数值类型) ,或者是含有数值类型字段的表达式。(2)Avg 不计算任何Null 值字段。例如: Avg(成绩)3、统计记录个数函数格式: Count()功能:统计记录个数。说明: (1)“ 字符串表达式” 可以是一个字段名 (数值类型) ,或者是含有数值类型字段的表达式。(2)当用格式Count(* )时,将统计所有记录的个数,包括有Null 值字段的记录。例如: Count(姓名)4、最大、最小值函数格式: Max() Min ()精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 40 页功能:返回一组指定字段中的最大、最小值。说明: “ 字符串表达式 ” 可以是一个字段名(数字类型),或者是含有数字类型字段的表达式。例如: Max(成绩)Min (成绩)4.4 查询设计4.4.1 条件选择查询4.4.2 交叉表查询4.4.3 参数查询 4.4.4 操作查询4.4.5 重复项、不匹配项查询4.4.1 条件选择查询例:查询中医系1998 年 9 月 1 日入学的中医专业的学生,显示学生编号、姓名、性别、入学日期和系别。操作步骤:1、在 “ 教学管理 ” 数据库窗口中,单击【查询】对象,然后双击【在设计视图中创建查询】项,系统打开如图所示的查询设计视图,同时在此视图上面还出现一个【显示表】对话框。2、在【显示表】对话框中,把学生表添加到设计视图上半部分的窗口中。3、分别双击 “ 学生编号 ” 、“ 姓名 ” 、“ 性别 ” 、“ 入校日期 ” 和“ 系别 ” 等字段,这时5 个字段将依次显示在【字段】行上的第1 列到第 5 列中,同时【表】行将显示出这些字段所在表的名称,【显示】行复选框均选中,代表查询结果中显示这些字段。但由于查询要求显示的字段没有“ 专业 ”字段,该字段仅作为查询的一个条件,所以应取消选中“ 专业 ” 字段【显示】行上的复选框,结果如图4、在 “ 入校日期 ” 字段列的【条件】行中可以输入以下等价条件:Date( 入学日期 )=1998-9-1 或者#1998-9-1# 在“ 系别 ” 和“ 专业 ” 字段列的【条件】行中分别输入条件:“ 中医 ” 和“ 中医 ” 。设计结果如图:5、单击工具栏中的【保存】按钮,在出现的【另存为】对话框中,命名查询为“ 学生信息查询” ,然后单击【确定】按钮,保存创建的查询。6、运行查询,查看查询结果。与( And)条件:或( Or)条件:4.4.2 交叉表查询交叉表查询以行和列的字段作为标题和条件选取数据,并在行和列的交叉处对数据进行汇总、统计计算等。设计交叉表查询,需要指定3 种字段:一是放在数据表最左端的行标题,它把某一字段或相关的数据放入指定的一行中;二是放在数据表最上边的列标题,它对每一列指定的字段或表进行统计,并将统计结果放在该列中三是放在数据表行与列交叉位置上的字段,需要为该字段指定一个总计项,如Sum、Avg 和 Count 等。对于交叉表查询,只能指定一个总计类型的字段。1、使用向导创建交叉表查询例:建立学生选课成绩交叉表查询(1)在 “ 教学管理 ” 数据库窗口中,单击【查询】对象,再单击【新建】按钮,在【新建】查询对话框中选择交叉表查询向导】,如图打开如图所示的【交叉表查询向导】对话框之一,在【视图】选项组中选择【查询】单选按钮,在上方的列表框中选择 “ 学生成绩查询” 。(2)单击【下一步】按钮,在向导对话框之二中选择“ 姓名 ” 字段作为交叉表的行标题单击【下一步】按钮,选择“ 课程名称 ” 作为交叉表的列标题,如图(3)单击【下一步】 按钮,为行和列的交叉点指定一个值。因为要显示学生选课的成绩,在【字段】列表框中选中“ 成绩 ” ;在【函数】列表框中选择一个总计函数由于所建交叉表只需显示成绩,不需做其它计算,所以选择“ 第一项 ” ,并取消选中【是,包括各行小计】复选框,如图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 40 页(4)单击【下一步】 ,为所创建的交叉表查询指定一个名字“ 交叉表成绩查询” ,单击【完成】按钮。创建交叉表查询的运行结果2、在设计视图下创建交叉表查询例:在 “ 教学管理 ” 数据库中,使用“ 学生 ” 、“ 课程 ” 和“ 选课成绩 ” 表创建一个交叉表查询,使其显示每位学生各门课的成绩。步骤: (1)在 “ 教学管理 ” 数据库窗口中,单击【查询】对象,然后双击【在设计视图中创建查询】项,系统打开查询设计视图,同时在此视图上面还出现一个【显示表】对话框。(2)在【显示表】对话框中,把“ 学生 ” 、“ 课程 ” 和“ 成绩” 表添加到设计视图上半部分的窗口中,然后关闭【显示表】对话框。(3)分别双击学生表中的“ 姓名 ” 字段、课程表中的“ 课程名称 ” 字段和选课成绩表中的“ 成绩 ”字段,依次添加到【字段】行的第1 列到第 3 列。(4)单击工具栏中的【查询类型】按钮,然后从下拉列表中选择【交叉表】命令。(5)单击 “ 姓名 ” 列的【交叉表】行单元格,选择其下拉列表中的“ 行标题 ” 选项,使 “ 姓名 ” 放在每行的左边;单击“ 课程名称 ” 列的【交叉表】行单元格,选择其下拉列表中的“ 列标题 ” 选项,使“ 课程名称 ” 放在第一行上;单击“ 成绩 ” 列的【交叉表】行单元格,选择其下拉列表中的“ 值”选项,使在行列的交叉处显示成绩数值;单击“ 成绩 ” 列的【总计】行单元格,选择其下拉列表中的 “ 第一条记录 ” 函数。设计结果如图:(6)保存与运行创建的交叉表查询,结果如图4.4.3 参数查询参数查询可以在运行查询的过程中根据参数输入值自动设定查询的准则,用户在执行参数查询时会显示一个输入对话框以提示用户输入信息,这种查询叫做参数查询。当需要对某个字段进行参数查询时,首先切换到这个查询的设计视图,然后在作为参数使用的字段下的“ 条件 ” 单元格中的方括号内输入相应的提示文本,此查询运行时,Access 2003 将显示该提示。参数查询是建立在选择查询或交叉表查询的基础之上的,如果希望根据某个或某些字段的不同值来查找记录,就可以使用参数查询。在参数查询中,可以建立单参数查询,也可以建立多参数查询。例:以学生、课程和成绩表为数据源,查询某班级、某门课程和某分数之上的学生选课情况假定学生编号的前4 位为班级号码。步骤: (1 )在 “ 教学管理 ” 数据库窗口中,单击【 查询】对象,然后双击【在设计视图中创建查询】,打开查询设计视图,同时显示【显示表】对话框。(2 )在【显示表】对话框中,把“ 学生 ” 、“ 课程” 和 “ 选课成绩 ” 表添加到设计视图上半部分的窗口中,然后关闭【显示表】对话框。(3 )分别双击学生表中的“ 学生编号 ” 和“ 姓名 ” 字段、课程表中的“ 课程名称 ” 字段和成绩表中的“ 成绩 ” 字段,依次添加到【字段】行的第 1 列到第 4 列。(4)在【字段】行的第1 列单元格中,把“ 学生编号 ” 字段名改为 “ 班级: left(学生!学生编号, 4)” ,在 【条件】行单元格输入“ 输入班级: ” 。其含义是:在查询结果中,显示别名“ 班级” ,取每个记录“ 学生编号 ” 字段值的前4 位与 “ 输入班级 ” 参数值进行比较,确定是否是要查询的班级。(5)单击工具栏中的【视图】按钮,或单击工具栏中的【运行】按钮,系统将依次显示输入班级的【输入参数值】 对话框, 可以根据需要输入参数值,查询需要的班级所选课程的成绩信息。4.4.4 操作查询1、生成表查询:用查询结果集中的数据创建新表。从表中查询数据要比从查询中访问数据快,如果经常需要从多个表中提取数据,最好的办法使用生成表查询,即从多个表中提取数据组合起来生成一个新表永久保存。2、删除查询:用于从表中删除与查询结果集中的行相对应的记录。3、追加查询:把查询结果添加到另一个表,但要注意两者之间的格式与类型要相同。4、更新查询:根据查询结果集中的行改变表中现有记录的相应字段的值。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 40 页1、创建生成表查询例:将学生选课成绩在90 分以上的学生信息保存到一个新表中。步骤: (1)打开查询设计器,将“ 学生 ” 、“ 课程 ” 、“ 选课成绩 ” 表添加到窗口中。(2)单击【查询类型】按钮或选择【查询】|【生成表查询】命令,打开如图所示的【生成表】对话框。在对话框中输入新表名称,并选择保存位置。(3)在查询设计视图中设置所需的各个选项,与选择查询设计相同,结果如图(4)保存所做的设置,单击【运行】按钮,系统会弹出【创建新表】对话框,通过选择“ 是 /否” 向新表粘贴记录,确定是否创建新表。2、创建删除查询删除查询可以从表中删除符合条件的记录,且所做的删除操作无法撤销。删除查询可以从单个表中删除记录,也可以从多个相互关联的表中删除记录。如果要从多个表中删除相关记录,多个表之间必须满足以下条件:在【关系】窗口定义相关表之间的关系,在【关系】窗口中选中【实施参照完整性】复选框与【级联删除相关记录】复选框。例:将学生选课成绩在60 分以下的记录删除。步骤: (1)打开查询设计视图,将“ 选课成绩 ” 表添加到窗口中。(2)单击【查询类型】按钮,从下拉菜单中选择【删除查询】命令。(3)单击 “ 选课成绩 ” 字段列表中的 “*”号,并将其拖到【字段】行的第1 列上,第1列将显示“ 选课成绩 .* ” ,同时,在该字段【删除】单元格中显示From,表示从何处删除记录。(4)将 “ 选课成绩 ” 字段拖到【字段】行的第2 列上,同时,在该字段【删除】单元格中显示Where,表示要删除哪些记录。在该字段的【条件】单元格中输入条件:60。结果如图(5)单击工具栏中的【视图】按钮,可以先预览要删除的记录,若不是要删除的记录,可以返回查询设计视图修改查询条件;若是要删除的记录,可以单击工具栏中的【运行】按钮,这时系统打开【确认删除】对话框,单击【是】按钮,将从成绩表中永久删除查询到的记录。3、创建追加查询生成表查询用查询选择的字段创建新表结构,然后写入查询记录。而追加查询是对原数据库表进行追加记录的操作,它提供了一个不用到表中就可以增加记录的方法。例: 利用追加查询将选课成绩在8090 分之间的学生追加到已建立的“90 分以上学生情况” 表中。步骤: (1)打开查询设计视图,将“ 学生 ” 表和 “ 选课成绩 ” 表添加到窗口中。(2)单击【查询类型】按钮,从下拉菜单中选择【追加查询】命令,弹出如图所示【追加】对话框。在【表名称】下拉列表框中输入要追加记录的表:90 分以上学生情况,单击【确定】按钮,这时查询设计视图中就添加了一个【追加到】行。(3)设置需要追加到目标表的各个选项,在【追加到】一栏中选择目标表对应的字段,结果如图:(4)单击【视图】按钮,可以查看要追加的记录。确认无误后,单击【运行】按钮,系统会弹出追加记录提示框,单击【是】按钮,将选择记录追加到目标表中。4、创建更新查询更新查询可以改变表中记录的数据值。当需要用相同表达式更新许多记录的字段值时,这种查询是很有用的。要更新的记录就是查询中通过设置条件所查询到的记录。例:在选课成绩表中,把所有选课成绩不及格的“ 成绩 ” 字段值置为0。步骤:(1 )打开查询设计视图,将“ 选课成绩 ” 表添加到窗口中。(2 )单击【查询类型】按钮,从下拉菜单中选择【 更新查询】命令,这时查询设计视图中添加了一个【更新到】行。(3)单击 “ 选课成绩 ” 字段列表中的“ 成绩 ” 字段,并将其拖到【字段】行的第1列上,在【更新到】一行输入数值:0,在【条件】行输入更新条件:60。如图(4)单击【视图】按钮,可以查看要更新的记录。确认无误后,单击执行查询按钮,系统会弹出更新提示框,单击【是】按钮,将完成对成绩表中选课成绩不及格记录的“ 成绩 ” 字段更新。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 40 页4.4.5 重复项、不匹配项查询1、创建查找重复项查询在数据表中,除设置为主键的字段不能重复外其他字段允许有重复值。例:查找成绩表中每门课被学生选修的情况。利用向导创建查找重复项查询(1)在新建查询对话框中,选择【查找重复项查询向导】在向导对话框中选择所基于的表或查询(2)选取设为重复值的字段,系统会按照选取的字段自动对数据表中的记录进行检索。(3)选择另外查询的字段(4)为查询指定一个名字,单击【完成】按钮2、建立不匹配查询不匹配查询就是在一个表中搜索另一个表中没有相关记录的记录行。例:查找课程表中没有被学生选修的课程有哪些。利用向导创建查找不匹配项查询(1)在新建查询对话框中,选择【查找不匹配项查询向导】在向导对话框中选择所基于的表或查询(2)选择不包含匹配记录的表(3)选择在两个表中的匹配字段(4)为查询指定一个名字后,单击【完成】按钮4.5 SQL 查询SQL 包括数据定义、数据查询、数据操纵和数据控制4 个部分,是一种功能齐全的数据库语言。 SQL 有两种使用方法:一种是以与用户交互的方式联机使用,另一种是作为子语言嵌入到其他程序设计语言中使用。4.5.1 SQL 的数据定义SQL 的数据定义功能是指定义数据库的结构,包括定义基本表、 定义视图和定义索引3 个部分。由于视图是基于基本表的虚表,索引是依附于基本表的,因此 SQL 通常不提供修改视图定义和修改索引定义的操作。如果想修改视图定义和修改索引定义,只能先将它们删除,然后再重建。SQL 的数据定义语句1、定义基本表命令: CREATE TABLE 格式:CREATE TABLE ( 列级完整性约束条件 列级完整性约束条件 )2、修改基本表命令: ALTER TABLE 格式:ALTER TABLE ADD 完整性约束条件 DROP MODIFY 3、删除基本表命令: DROP TABLE 格式:DROP TABLE 4.5.2 SQL 的数据操纵数据操纵是指对表中的数据进行查询、插入、删除和更新等操作。1、SQL 查询SELECT 查询是数据库的核心操作。其命令格式为:SELECT ALL|DISTNCT , FROM WHERE GROUP BY HA VING 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 40 页ORDER BY ASC|DESC SELECT 语句的含义:从指定的表或视图中找出符合条件的记录,按目标列表达式的设定,选出记录中的字段值形成查询结果。:要查询的数据,一般是列名或表达式。FROM 子句:数据来源,即从哪些表或视图中查询。WHERE 子句:查询条件,即选择满足条件的记录。GROUP BY 子句:对查询结果进行分组。HAVING 子句:限定分组的条件,必须在GROUP BY 子句后用。ORDER BY 子句:对查询结果进行排序,ASC 表示升序DESC 表示降序。2、插入操作INSERT 语句可以向基本表中插入数据。(1)插入单个元组语句格式: INSERT INTO (,)VALUES(, )功能:将新元组插入指定表中,其中新元组属性1 的值为常量1 属性 2 的值为常量2,依此类推。(2)插入子查询结果语句格式: INSERT INTO (,)功能:批量插入,一次将子查询的结果全部插入指定表中。(3)删除记录语句格式: DELETE FROM WHERE 功能:从表中删除一个或多个元组。(4)更新操作语句格式:UPDATE SET =, =, WHERE 功能:修改指定表中满足条件的元组,用表达式1 的值替代属性名1 的值,用表达式2 的值替代属性名2 的值,依此类推。4.5.3 SQL 视图例:将已建立的“ 学生信息查询 ” 中的 “ 中医专业或者2009 年入学的学生 ” 的条件改为 “ 中西医专业或者 2010 年入学的学生” 。步骤:(1 )在设计视图中打开已建立的查询(2)选择【视图】|【SQL 视图】命令,或单击工具栏中的【视图】按钮,从下拉列表中选择【SQL 视图】 ,打开如图所示SQL 视图窗口。(3)在 SQL 视图窗口中,可以直接修改WHERE 子句后面的条件(4)单击工具栏中的【视图】按钮,可以预览查询的结果。单击【保存】按钮,可以保存通过 SQL 视图对查询所做的修改。第 5 章窗体5.1 窗体基础知识5.2 创建窗体5.3 自定义窗体5.4 窗体与控件的其他应用设计5.5 窗体外观格式设计5.1 窗体基础知识5.1.1 窗体的概念和作用窗体是操作应用系统的界面,靠菜单或按钮提示用户进行业务流程操作,不论数据处理系统的业务性质如何不同,必定有一个主窗体,提供系统的各种功能,用户通过选择不同操作进入下一步操作的界面,完成操作后返回主窗体。窗体的作用: (1)显示与编辑数据。可以通过窗体录入、修改、删除数据表中的数据。(2)使用窗体查询或统计数据库中的数据。可以通过窗体输入数据查询或统计条件,查询或统计数据库中的数据。(3)显示提示信息。用于显示提示、说明、错误、警告等信息,帮助用户进行操作。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 40 页5.1.2 窗体构成窗体页眉页面页眉主体页面页脚窗体页脚5.1.3 窗体类型5.1.4 窗体视图设计视图窗体视图数据表视图数据透视表视图数据透视图识图5.2 创建窗体5.2.1 自动创建窗体如果只需要创建一个简单的数据维护窗体,显示选定表或查询中所有字段及记录,可使用自动创建窗体向导。自动创建窗体有纵栏式、表格式、数据表3 种格式(1)在数据库窗口中,选择【窗体】对象。(2)单击工具栏中的【新建】按钮。(3)在【新建窗体】对话框中,选择下列向导之一【自动创建窗体:纵栏式】,每个字段都显示在一个独立的行上,并且左边带有一个标签(标题为对应字段名【自动创建窗体:表格式】,每条记录的所有字段显示在一行上,标签显示在窗体的顶端。【自动创建窗体:数据表】,每条记录的字段以行和列的格式显示,即每条记录显示为一行,每个字段显示为一列。字段的名称显示在每一列的顶端。(4)窗体数据源选择,在【请选择该对象数据的来源表或查询: 】下拉列表框中选择作为窗体数据来源的表或查询。(5)单击【确定】按钮,保存窗体,结束窗体的创建。5.2.2 窗体向导1、使用向导创建基于一个表或查询的窗体(1)在【新建窗体】对话框中,双击【窗体向导】选项,进入【窗体向导】对话框。(2)在【表 /查询】下拉列表框中选择作为窗体数据源的表或查询。(3)在【可用字段】列表框中选择需要在新建窗体中显示的字段。(4)单击【下一步】 ,选择窗体布局格式。 (5)单击【下一步】 ,选择窗体所采用的样式(6)单击【下一步】 ,为窗体指定标题。 ( 7)单击【确定】按钮,保存窗体,结束创建。2、创建基于多个表的窗体基于多表的窗体一般称为多表窗体,从多个表或查询中提取数据。常用的方法是建立主/子窗体,但在创建窗体之前要确保作为主窗体的数据源与作为子窗体的数据源之间建立了一对多的关系。二是将已有的窗体作为子窗体添加到另一个已有窗体中。例:在 “ 教学管理 ” 数据库中,以 “ 学生 ” 表和 “ 成绩 ” 表作为数据源,创建窗体。步骤: (1 )在【新建窗体】对话框中单击【窗体向导】,然后单击【确定】,或者双击【窗体向导】进入对话框。(2)在【表 |查询】下拉列表中选择【表:学生】,在【可用字段】列表框中选择要显示的字段。在【表 |查询】下拉列表中选择【表:选课成绩】,在【可用字段】列表框中选择要显示的字段。单击【下一步】 。(3)由于数据来源于两个表,有两个选项: 通过 “ 学生 ” 表或 “ 成绩 ” 表查看。 由于 “ 学生 ” 表和 “ 成绩” 表之间具有一对多关系,“ 学生 ” 表位于一对多关系中的“ 一” 方,所以应选择“ 学生 ” 表。选择【带有子窗体的窗体】单选按钮。单击【下一步】(4)确定窗体所采用的布局。选中【数据表】单选按钮,单击【下一步】(5)确定窗体所采用的样式。选中【标准】,单击【下一步】按钮。(6)确定主 |子窗体的标题。在【窗体】文本框中输入主窗体标题“ 学生成绩主窗体” , 【子窗体】文本框中输入子窗体标题“ 选课成绩子窗体” 。(7)单击【完成】按钮。5.2.3 图表向导例:在 “ 教学管理 ” 数据库中,以 “ 教师 ” 表为数据源,使用图表向导创建窗体,统计并显示各系精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共 40 页不同职称的人数。步骤: (1)在【新建窗体】对话框中选择【图表向导】选项,选择“ 教师 ” 表为数据源。(2)单击【确定】按钮,启动【图表向导】对话框。(3)在【可用字段】列表框中选择“ 系别 ” 、 “ 职称 ” 和“ 教师编号 ” 字段,单击 按钮添加到 “ 用于图表的字段 ” 列表中,单击【下一步】。(4)在图中选择【三维柱形图】,单击【下一步】按钮。(5)在图中,选择“ 系别 ” 为横坐标, “ 数据 ” 为纵坐标,单击【下一步】按钮。在对话框中【请指定图标的标题】文本框最后输入图表名称“ 统计各系不同职称教师的人数”单击【完成】按钮。5.2.4 自动窗体:数据透视表数据透视表窗体是一种交互式的表,可以进行选定的计算,例如求和和计数。数据透视表也可以将字段值作为行号或列标,在每个行列交汇处计算出各自的数量,然后计算小计和总计。例:创建计算各系不同职称教师人数的数据透视表窗体基本思想:将“ 职称 ” 作为列标题放在数据透视表的顶端,“ 系别 ” 作为行标题放在数据透视表的左列,在行列的交叉处显示计算出来的相应教师人数。步骤: (1)在【新建窗体】对话框中,选择【自动窗体:数据透视表】,并在【请选择该对象数据的来源表或查询】下拉列表中选择“ 教师 ” 表,单击【确定】按钮。(2)打开数据透视表设计窗口。(3)将【数据透视表字段列表】中的“ 系别 ” 字段拖至行字段区域,将“ 职称 ” 字段拖至列字段区域,选中 “ 教师编号 ” 字段,在右下角的下拉列表框中选择【数据区域】项,单击【添加到】按钮。可以见到在字段列表中新生成一个“ 汇总 ” 字段,该字段的值是选中的“ 教师编号 ” 字段的计数,同时在数据区域产生了在 “ 系别 ” 和“ 职称 ” 分组下有关 “ 教师编号 ” 的计数,也就是各系不同职称的人数。5.2.5 自动窗体:数据透视图数据透视图是一种交互式的图表,功能与数据透视表类似,只不过以图形化的形式来表现数据。数据透视图能较为直观地反应数据之间的关系。例:以 “ 教师 ” 表为数据源,创建计算各系不同职称人数的数据透视图窗体。步骤: (1)在【新建窗体】对话框中,选择【自动窗体:数据透视图】,选择 “ 教师 ” 表为数据源。(2)单击【确定】按钮,打开数据透视图设计窗口(3)将【图表字段列表】中的“ 系别 ” 字段拖至分类字段区域,将 “ 职称 ” 字段拖至系列字段区域,选中 “ 教师编号 ” 字段,在右下角的下拉列表框中选择【数据区域】项,单击【添加到】按钮。生成如图所示的数据透视图。5.3 自定义窗体5.3.1 窗体设计视图的组成与主要功能1、窗体设计工具栏2、格式工具栏3、窗体弹出式菜单4、控件工具箱(1)打开与关闭工具箱【视图】|【工具箱】命令或者单击窗体设计工具栏中的【工具箱】按钮,可以打开或关闭【工具箱】。(2)工具箱的移动与锁定要锁定某个某个控件对象,双击要锁定的对象即可;要解除锁定,按ESC 即可。(3)使用工具箱向窗体中添加控件5.3.2 属性、事件与方法1、属性(1)属性的概念(2)属性的设置方法(3)属性的分类2、事件( 1)事件的概念(2)事件的设置方法3、方法方法的概念5.3.3 窗体与对象的属性及设置方法1、窗体的主要属性精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 40 页2、控件属性(1)标签控件(2)文本框控件(3)组合框控件(4)列表框控件(5)命令按钮控件3、设置窗体属性(用属性表设置)(1)在窗体设计视图中,单击窗体左上角的【窗体选定器】来选择一个窗体。(2)右击,然后选择快捷菜单中的【属性】命令,或单击工具栏中的【属性】按钮,显示【属性表】(3)单击需要设置其值的属性,然后执行以下操作之一:在属性对话框中,输入适当的设置或表达式。如果属性对话框包含箭头,单击该箭头,打开下拉列表,然后单击列表中的值。如果【生成器】按钮显示在属性框的右边,单击该按钮以显示生成器或显示能够选择生成器的对话框。4、在窗体中添加当前日期和时间5、使用属性表设置控件属性6、在 VBE 中设置窗体和控件属性5.3.4 窗体和对象的事件1、窗口事件窗口事件是指操作窗口时引发的事件,正确理解此类事件发生的先后顺序,对控制窗体和报表的行为非常重要。2、数据事件数据事件指与操作数据有关的事件,又称操作事件当窗体或控件的数据被输入、修改或删除时将发生数据事件。3、焦点事件鼠标或键盘操作的当前状态,当窗体、控件失去或获得焦点时,或窗体、报表成为激活或失去激活状态时,将发生焦点事件。4、键盘事件键盘事件是操作键盘引发的事件。5、鼠标事件鼠标事件是用户操作鼠标引发的事件。鼠标事件应用较多,特别是 “ 单击 ” 事件,命令按钮的功能处理大多用鼠标事件来完成。6、打印事件在打印报表或设置打印格式时发生打印事件。7、Timer 和 Error 事件5.3.5 常用控件的创建方法1、命令按钮(1)利用向导(2)手工创建命令按钮手工创建命令按钮,通过事件代码处理,可使命令按钮具有更强的功能、更多的灵活性。其方法是:首先将命令按钮放置在窗体中,然后通过命令按钮的属性设置及事件代码编写,来达到用户特定的目的。2、列表框和组合框3、创建选项卡控件4、创建图像控件5、创建选项组控件6、添加 ActiveX 控件 7、删除控件5.4 窗体与控件的其他应用设计5.4.1 创建计算控件1、表达式生成器在窗体设计视图中,打开【属性设置】对话框单击表达式生成器按钮“”,打开【选择生成器】对话框。在【选择生成器】对话框中,选中【表达式生成器】项,单击【确定】按钮,系统进入【表达式生成器】对话框。2、创建计算控件例:在 “ 学生信息管理” 窗体设计中,不显示学生的出生年月,要显示年龄可以通过添加计算控精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 40 页件实现。(1)进入 “ 学生信息管理” 窗体设计视图,添加一个文本框控件,命名其标签标题为“ 年龄 ” 。(2)打开文本框控件的属性设置对话框,设置其控件来源属性。可以使用表达式生成器来创建表达式,也可以利用组合表达式元素来创建表达式。使用表达式生成器在“ 学生信息管理” 窗体中,右击【年龄】文本框,打开属性设置对话框;单击【控件来源】文本框右侧的【表达式生成器】按钮,进入【表达式生成器】对话框(3)使用 “ 函数 ” 和“ 表” 文件夹选项,选择生成表达式元素,如图单击【确定】按钮,即完成“ 年龄” 计算控件的创建。使用手动方式创建假如对函数及表达式的语法比较熟悉,可以使用手动方法创建计算表达式。在“ 学生信息管理”窗体中,右击“ 年龄 ” 文本框,打开属性设置对话框;在其【控件来源】文本框中直接输入表达式“=Year (Date() )-Year( 出生日期 )” 。5.4.2 查找记录5.4.3 显示提示信息5.4.4 创建与使用主|子窗体 5.4.5 打印与预览窗体5.5 窗体外观格式设置5.5.1 加线条 5.5.2 加矩形 5.5.3 设置控件格式属性5.5.4 使用 Tab 键设置控件次序第六章报表本章概要6.1 报表的作用与组成报表就是将表格、查询中的数据按照指定格式要求打印输出。报表主要功能:数据的格式化、分类汇总数据创建子报表和图表数据报表组成报表页眉、报表页脚页面页眉、页面页脚组页眉、组页脚主体在 Access 中演示各部分报表视图报表视图有三种设计视图该视图最重要,是需要重点掌握版面预览打印预览演示三种视图6.2 报表的分类纵栏式报表表格式报表图表报表标签报表不同类型的报表只是展示数据的形式上区别,本质上都是显示数据。演示不同形式的报表。注意使用同一个数据源!看清内容与形式的关系!6.3 创建报表(本章重点)创建方法:报表向导,通过向导方式设置。该方法简便但缺乏灵活性。自动创建,比向导还简单,但局限性更大。手工创建报表。该方法相对困难,但功能强大。这部分是重点和难点。子报表。子报表与子窗体很类似。6.4 报表编辑该部分主要讲解手动创建、修改、设计报表,以及报表版面设计、数据计算。该节是本章重点和难点。报表控件以及格式设置认识报表控件,最常用的是标签、文本框、分割线、子报表等例题 6.1 建立 ” 学生基本信息报表“ 该报表可以通过向导或者手工方法创建。练习使用报表工具。如果使用手工创建,关键是选择数据源。演示该例题!例题 6.2 添加页码和日期该例题主要涉及页脚部分的操作。如果使用手工方法创建,用到了=date()和=time()两个函数。添加直线、设置字体、颜色等修饰演示上述操作。排序、分组打印数据的时候可以按照某种规则排序或者分组。这个很类似于excel 中的分类汇总。单纯排序:可以选择某列进行升序或者降序排列。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 19 页,共 40 页分组:按照某字段分类,相同类别内容将集中显示。例题 6.5 设计分组报表,输出学生选课成绩信息。在此例题中讲解排序和分组对话框,以及页眉页脚的使用。报表中的计算报表中的数据直接来源于表或者查询,但是有时候我们需要的数据在表中没有直接给出,就必须经过计算得到。例题 6.6 根据教师信息表中” 工作时间 “ 计算工龄分析:所需信息为” 工龄 “ ,但是表中没有直接给出,必须通过计算。已知当前年份和工作时间,两年份相减就是” 工龄 “=year(date() -year(工作时间 ) 例题 6.7 所需信息 ” 成绩是否通过 “ ,但是表中没有直接给出,也需要判断计算得到结果。6.5 复杂报表以上介绍的都是报表的常规使用。报表中的每一个控件、每一部分都还有各自的属性可以设置,进而制作更加复杂和实用的报表。报表属性节属性报表添加分隔页预定义格式美化报表制作图表报表6.6 打印报表报表最终就是要将数据落到纸面上,打印是报表的最后一个环节。打印之前可以预览效果,经过修改预览之后,最终打印。小结在二级考试中,该节有比较重要的地位,尤其是操作题部分,很多涉及到报表设计、分组、计算等操作。报表也是数据展示的一种形式,该章节有自己独特的地方,但是很多知识与窗体类似,大家在学习的时候可以相互比较学习。后续的 ” 页“ 将是对报表的巩固,因为” 页“ 也是展示数据的形式,很多操作与报表类似。报表、窗体、页这三种对象都是表、查询的外在表现。第七章数据访问页概述学会使用页向导自动创建页页设计视图以及控件使用包含图表的数据访问页7.1 数据访问页的基本概念数据访问页实际就是一种WEB 页,也是将表中的数据展现给用户。页的几种视图:页视图设计视图(重点)网页预览(在浏览器中)7.2 创建数据访问页创建数据访问页的方法与窗体、报表类似。自动创建数据访问页该方法快,但是只能使用纵栏式。例题 7.1 自动创建学生基本信息的页向导方法创建页例题 7.2 使用向导创建学生基本信息的页使用设计视图创建页注意控件属性都是英文。7.3 编辑数据访问页添加标签添加命令按钮添加滚动文字设置背景第八章宏八宏是一些操作的集合。通过本章的学习,应该掌握宏的概念与用途序列宏、条件宏和宏组的创建ACCESS2003 中常用的宏操作宏调用8.1 宏的功能宏是指一个或者多个操作的集合,没个操作都实现特定的功能。这些操作的实质是代码。设置宏操作宏设计器中可以使用系统提供的宏命令,配合相应的参数,可以完成很多实用的操作。常用宏命令参看表8.1 8.2 创建、调试、运行宏创建宏,在宏设计器中选择所需要的功能,并且设置相应参数。创建宏组,宏组中包含多个宏命令,为了便于管理多个宏。操作方法与创建单个宏类似。创建条件宏,上述两种宏都是顺序执行。条件宏可以根据特定条件而有选择性的执行某些宏命精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 20 页,共 40 页令。调试宏运行宏8.3 通过事件触发宏事件是在数据库中执行的一种特殊操作,是对象所能辨识和检测的动作,当此动作发生于某一个对象上时,其对应的时间便会被触发。通过事件触发宏例题 8.2 建立一个窗体,添加两个命令按钮,分别触发两个不同的宏。第九章模块与 VBA 编程基础概述本章要涉及到编程。了解编程基础知识,掌握程序的三种结构在VBA 中的实现,能够读懂程序并写(填)出程序片段模块基本概念创建模块VBA 设计基础VBA 流程控制过程调用和参数传递程序错误处理和调试9.1 模块基本概念模块就是一些程序的集合,完成特定的功能。模块分类:类模块(与Access 内置对象关联,如窗体、报表)标准模块9.2 创建模块模块以过程为单元组成,一个模块包含一个声明区域和若干个过程Sub、函数 Function。过程创建一般格式public|privatestatic 过程名 (形参表 ) 语句Exit sub End sub 调用过程Call 过程名 (参数表 ) Function 函数public|privatestatic 函数名 (形参表 ) 语句End Function 例题 9.1 编写一个求圆面积的函数Area()对于该例题中出现的语句只要大体了解即可。9.3 VBA 编程基础VBA 是一种计算机语言。对象在Access 中指表、查询、窗体、报表、页、宏、模块、DoCmd等认识 VBE 窗口例题 9.2 新建窗体,放置一个按钮,该按钮的单击事件响应某过程。VBA 语句书写原则一行一句,如果特别长可以用_(下划线 )隔开如果节省空间,可以用: (冒号 )将多条语句写在同行VBE 可以自动识别语法错误,有颜色提示。注释,给程序员看,对机器无用 (单引号后面就是注释内容)rem 后面是注释内容数据类型Access 中提供了若干数据类型,如下:整数 Integer 长整数 Long 单精度数Single 双精度数Double 货币 Currency 字符串 String 布尔型 Boolean 日期型 Date 变体类型Variant 用户自定义类型数据库对象Datebase Connection Form Report Control QueryDef TableDef Command RecorderSet 常量、变量、数组常量:不能改变的量。直接常量符号常量 Const 定义的常量内部常量, Access定义的常量系统常量, True、False、Null 、Yes、No、On、Off 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 21 页,共 40 页变量变量,可以改变的量。变量命名包含字母、数字、下划线、汉字,且不以数字、下划线开头,不区分大小写,不能与系统关键字冲突。声明变量:在VBA 中可以隐式声明显式声明, Dim 变量作用域局部变量、模块变量、全局变量数据库对象变量的引用方法窗体名称 !控件名称 .属性名称注意叹号和点号的使用Function SafeSqr(num) Val_Temp=Abs(num) SafeSqr=Sqr(Val_Tem) End Function 例如:intX1%=1243 定义 intX1 为一个整型变量DouX2#=45665.456 定义 douX2 为一个双精度变量StrX3$=Access 定义 strX3 为一个字符串变量声明变量的一般方法是用Dim.AsDataType 结构,其中As 指定变量数据类型。Dim 语句使用格式为:Dim 变量名 As 数据类型 如果不使用 “ 数据类型 ” 可选项, 默认定义的变量为Variant 数据类型。 可以使用 Dim 语句在一行中声明多个变量。例如:Dim strX As String 定义了 1 个字符型变量strX Dim intX As Integer,strZ As String 定义了 1 个整型变量intX 和 1 个字符型变量strZ Dim x 定义了 1 个变体 (Variant)类型变量x Dim I,j,k As integer 只有 k 是 integer 型, I 与 j 都是 Variant 型数组数组是相同类型变量的集合定义数组Dim 数组名 (下界to 上界 ) AS 类型默认下界为0 零数组引用通过数组明 (下标 )方法引用二维数组Dim 数组名 (a to b,m to n) AS 类型列举一些关于数组定义、引用的例子单独考数组很少,一般与循环部分结合!数组变量由变量名和数组下标组成,在VBA 中不允许隐式说明数组,可用Dim 语句来声明数组。数组声明方式为:Dim 数组名 (下标下界to 下标上界 ) As 数据类型下标下界的缺省值为0,数组元素为:数组名(0)至数组名 (下标上界 );如果设置下标下界非0,要使用 to 选项。在使用数组时, 可以在模块的通用声明部分使用Option Base 来指定数组的默认下标下界是0 或l:Option Base 1 设置数组的默认下标下界为l Option Base 0 语句的默认形式数组有两种类型:固定大小的数组和动态数组。前者总保持同样的大小,而后者在程序中可根据需要动态地改变数组的大小。(1)固定大小的数组例如:Dim IntArray(l0) As Integer 这条语句声明了一个有11 个整型数组元素的数组,数组元素从IntArray(0) 至 IntArray(l0) ,每个数组元素为一个整型变量,这里指定数组元素下标上界来定义数组。VBA 中允许指定数组下标范围时使用To,如下例所示:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 22 页,共 40 页Dim IntArray(-2 to 3) As Integer 该语句定义一个有6 个整型数组元素的数组,数组元素下标从-2 到 3。如果要定义多维数组,声明方式为:Dim 数组名 (数组第 1 维下标上界,数组第2 维下标上界 ) As 数据类型例如:Dim IntArray(3,5) As Integer 语句定义了一个二维数组,第一维有4 个元素,第二维有6 个元素。类似的声明也可以用在二维以上的数组中。例如:Dim MultArray(3,1 to 5,0 to 5) As Long 语句定义了一个三维数组,第一维有4 个元素,第二维有5 个元素,第三维有6 个元素,其中数组元素的总数为三个维数的乘积:456=120。(2)动态数组在 VBA 中,还允许用户定义动态数组。很多情况下,不能明确知道数组中应该有多少元素,可使用动态数组。动态数组中元素的个数是不定的,在程序运行中可以改变其大小。动态数组的定义方法是:先使用Dim 来声明数组,但不指定数组元素的个数,而在以后使用时再用 ReDim 来指定数组元素个数,称为数组重定义。在对数组重定义时,可以使用ReDim 后加保留字 Preserve来保留以前的值,否则使用ReDim 后,数组元素的值会被重新初始化为默认值。【例 9.4】定义动态数组IntArray ,设默认下界为1,并用循环赋值。Dim IntArray() As Integer 声明动态数组ReDim IntArray(5) 数组重定义,分配5 个元素For I = 1 To 5 使用循环给数组元素赋值IntArray(I) = I Next I Rem 数组重定义,调整数组的大小,并抹去其中元素的值。ReDim IntArray(10) 重新设置为10 个元素, IntArray(1) 至 IntArray(5) 的值不保留For I = 11 To 20 使用循环给数组元素重新赋值IntArray(I) = I Next I Rem 数组重定义,调整数组的大小,使用保留字Preserve来保留以前的值。ReDim Preserve IntArray(15) 重新设置为15 个元素, IntArray(1) 至 IntArray(10) 的值保留For I = 11 To 15 使用循环给未赋值数组元素赋值IntArray(I) = I Next I Redim 语句只能出现在过程中,可以改变数组的大小和上下界,但不能改变数组的维数。执行不带 Preserve关键字的Redim 语句时, 数组中存储的数据会全部丢失。VBA 将重新设置其中元素的值。对于Variant 变量类型的数组,设为Empty;对于 Numeric 类型的数组,设为0;对于 String 类型的数组则设为空字符串;对象数组则设为Nothing 。使用 Preserve关键字,可以改变数组中最后一维的边界,但不能改变这一维中的数据。例如:Redim IntArray(10,10,10) Redim Preserve IntArray(10,10,15) 也就是说,在使用Preserve 关键字时,只能通过改变数组的上界来重新设置数组的大小,改变数组的下界将会导致一个错误。如果改变后的数组比原来小,那么多出来的数据将会丢失。(3)数组的使用数组声明后,数组中的每个元素都可以当作单个的变量来使用,其使用方法同相同类型的普通变量。数组元素的引用格式为:数组名(下标值 )。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 23 页,共 40 页其中:如果该数组为一维数组,则下标值为一个范围为数组下标下界,数组下标上界的整数;如果该数组为多维数组,则下标值为多个(不大于数组维数)用逗号分开的整数序列,每个整数 (范围为 数组该维下标下界,数组该维下标上界)表示对应的下标值。例如,可以如下引用前面定义的数组,设默认下界为1。IntArray(2) 引用一维数组IntArray 的第 2 个元素。IntArray(2,2) 引用二维数组IntArray 的第 2 行第 2 个元素。【例 9.5】若要存储一年中每天的支出,可以声明一个具有365 个元素的数组变量,而不是365个变量,数组中的每一个元素都包含一个值。下列的语句声明数组CurArray 具有 365 个元素,设默认下界为1。Dim CurArray (1 to 365) As Currency 声明一个具有365 个元素的一维数组Dim intI As Integer For intI=1 to 365 CurArray(intI) = 10 每个数组元素都赋予一个初始值10 Next 运算符、表达式运算符算术运算符 + - * / mod 字符串运算符 + &,推荐使用 & 关系运算符 = = like is between.and 逻辑运算符and or not 对象运算符! . 【例 9.6】算术运算符应用示例。28 计算 2的 8 次方2(1/2)或 20.5 计算 2 的平方根7/2 标准除法,结果为3.5 72 整数除法,结果为3 10 Mod 4 取模运算,结果为2 10 Mod 2 结果为 0 10 Mod -4 结果为 2 -10 Mod -4 结果为 -2 -8.8 Mod 5 结果为 -4 20 True 结果为 21,逻辑量True 转化为数值 -1 20 + False +6 结果为 26,逻辑量False 转化为数值0 【例 9.7】“&” 运算符应用示例。Strx =ABC Strx& 是大写英文字母 出错Strx & 是大写英文字母 结果为 “ ABC 是大写英文字母”Access & 数据库教程 结果为 “ Access 数据库教程 ”abcd & 1234 结果为 “ abcd1234 ”abcd & 1234 结果为 “ abcd1234 ”4321 & 1234 结果为 “ 43211234 ”4321 & 1234 结果为 “ 43211234 ”2+3 & = & (2+3) 结果为 “ 2+3=5”【例 9.8】“+”运算符应用示例。4321+1234 结果为 5555 4321+1234 结果为 “43211234 ”abcd+1234 出错4321+1234 & 100 结果为 “ 5555100 ”精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 24 页,共 40 页【例 9.9】Is 关系运算符应用示例。Dim s1,s2 As Control Set s1=Me!text1 Set s2=Me!text1 strx=s1 Is s2 strx 值为 “True ”【例 9.10】关系运算符应用示例。Dim S 定义变量S S=(52) 结果为 True S=(2=5) 结果为 False S=(abcdabc) 结果为 True S=(王力 刘力 ) 结果为 True S=(#2005/10/10#2004/10/12#) 结果为 True 【例 9.11】逻辑运算符应用示例。Dim S 定义变量S S=(52 And 3=4) 结果为 False S=(52 Or 3=4) 结果为 True S=(abcdabc And 3=4) 结果为 False S=Not(3=4) 结果为 True S=(52 Xor 3=4) 结果为 True S=(52 Xor 4=3) 结果为 False S=(25 Eqv 3=4) 结果为 True S=(52 Eqv 3=4) 结果为 False S=(52 Imp 3=4) 结果为 False S=(52 Imp 4=3) 结果为 True 表达式表达式就是由常量、变量、运算符构成的字符串,表达式具有特定的唯一值。表达式运算优先级参看表9.9 P222 (1)表达式的组成表达式由字面值、常量、变量、运算符、函数、标识符、逻辑量和括号等按一定的规则组成,表达式通过运算得出结果,运算结果的类型由操作数的数据和运算符共同决定。注意:在VBA 中,逻辑量在表达式中进行算术运算时,True 值被当成 -1、False 值被当成0 处理。(2)表达式的书写规则只能使用圆括号且必须成对出现,可以使用多个圆括号,但必须配对。乘号不能省略。X 乘以 Y 应写成 X*Y ,不能写成XY 。表达式从左至右书写,无大小写区分。(3)算术运算表达式的结果类型在算术运算表达式中,参与运算的操作数可能具有不同的数据精度,VBA 规定运算结果的数据类型采用精度高的数据类型。(4)运算优先级如果一个表达式中含有多种不同类型的运算符,运算进行的先后顺序由运算符的优先级决定。VBA 常用运算符的优先级划分如9.9 所示。函数数学函数绝对值函数abs(数值表达式 ) 向下取整Int(数值表达式 ) 取整 Fix(数值表达式 ) 四舍五入 Round(数值表达式 ) 自然指数Exp( 数值表达式 ) 自然对数Log(数值表达式 ) 开平方 Sqr(数值表达式 ) 正弦函数 Sin(数值表达式 ) 余弦函数Cos(数值表达式 ) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 25 页,共 40 页正切函数 Tan(数值表达式 ) 随机函数 Rnd(数值表达式 ) 函数字符串函数字符串检索InStr( 起始位置 ,串 1,串 2,Compare) 在串 1 中寻找串2 的起始位置。- 串长函数len(字符串 ),返回串长,汉字算一个- 字符串截取left(str,n) Right(str,n) mid(str,start,n) 字符串函数生成空格space(n),产生 n 个空格大小写转换Ucase(str)转换成大写Lcase(str)转换成小写删除空格Ltrim(str) 消除前面空格Rtrim(str) 消除后面空格Trim(str) 消除前后空格注意:没有直接消除中间空格函数日期、时间函数Date() Time() Now() Year(日期 ) month(日期 ) Day(日期 ) Hour() minute() second() DateAdd( 间隔类型 ,间隔值 ,基准日期时间 ) DateDiff( 间隔类型 ,日期 1,日期 2) 类型转换字符转成 ASCII 码 ASC(字符串 ),只转换第一个ASCII 转成字符Chr(代码 ) 数字转字符Str(数值表达式 ) 字符转数字Val(字符串 ) 流程控制语句声明语句:命名或定义变量、常量、函数等赋值语句:将表达式值赋给变量变量名 =表达式Goto 语句不推荐使用9.4.1 声明语句通过声明语句可以命名和定义过程、变量、数组或常量。当声明一个过程、变量或数组时,也同时定义了它们的作用范围,此范围取决于声明位置(子过程、模块或全局)和使用什么关键字(Dim 、Public 、Static 或 Global 等)来声明它。例如,有如下程序段:Sub Myproc( ) Dim SinS as Single,SinR as Single Const P=3.14159 End Sub 上述语句声明定义了一个名为Myproc 的子过程, Dim 语句定义了2 个名称分别为SinS 和 SinR的单精度数据变量,Const 语句定义了1 个名为 P 的符号常量。当这个子过程被调用或运行时,所有包含在Sub 和 End Sub 之间的语句都会被执行。9.4.2 赋值语句赋值语句用于指定一个值或表达式给变量或常量。使用格式为:Let 变量名 = 值或表达式其中: Let 为可选项,在使用赋值语句时,一般省略。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 26 页,共 40 页例如:Dim SinS as Single,SinR as Single SinS=1234.567 Let SinR=12.3 关于使用赋值语句的说明:(1)当数值表达式与变量精度不同时,系统强制转换成变量的精度。例如:Dim IntN as Integer IntN=10.6 IntN 为整型变量, 10.6 经四舍五入转换后赋值,IntN 值为 11 (2)当表达式是数字字符串,变量为数值型,系统自动转换成数值类型再赋值,若表达式含有非数字字符或空串时,赋值出错。例如:IntN%=123 IntN 值为 123 IntN%=1a2 3 出错,类型不匹配(3)不能在一个赋值语句中,同时给多个变量赋值。例如:以下语句语法没有错误,但结果不正确。x%=y%=z%=10 (4)实现累加作用的赋值语句。例如:n=n+1 取变量 n中的值加1 后再赋给n,与循环语句结合,可实现计数说明:还有一个赋值语句是Set 语句,它用来指定一个对象给已声明为对象类型的变量,Set关键字不能省略。9.4.3 标号和 GoTo 语句GoTo 语句用于在程序执行过程中实现无条件转移。格式为: GoTo 标号程序执行过程中,遇到GoTo 语句,会无条件地转到其后的“ 标号 ” 位置,并从该位置继续执行程序。标号定义时,名字必须从代码行的第一列开始书写,名字后加冒号“: ”。例如:Goto Label1 跳转到标号为 “ Label1 ”的位置执行Label1: 定义的 “ Label1 ”标号位置说明: GoTo 语句在早期的Basic 语言中曾广泛应用。在VBA 中,程序的执行流程可用结构化语句控制,除在错误处理的“On Error GoTo.”结构中使用外,应避免使用GoTo 语句。9.4.4 执行语句顺序结构每条语句执行且执行一次。选择(分支)结构根据条件真假,有些语句可能不执行,但执行部分只运行一次。循环结构根据条件真假,有些语句可能执行多次,但也有可能一次也不执行!分支结构单分支、双分支、多分支单分支if 条件then 语句块双分支精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 27 页,共 40 页if 条件then 语句块 1 else 语句块 2 end if 多分支,即单双分支的嵌套注意: else总与最近的if 配对使用!当嵌套层次太多时,可以考虑使用case语句(1)单分支结构语句格式为:If Then 或If Then End If 功能:当条件表达式为真时,执行Then 后面的语句块或语句,否则不做任何操作。说明:语句块可以是一条或多条语句。在使用上边的单行简单格式时,Then 后只能是一条语句,或者是多条语句用冒号分隔,但必须与If 语句在一行上。例如:比较两个数值变量x 和 y 的值,用x 保存大的值,y 保存小的值。语句如下:If xy Then t=x t 为中间变量,用于实现x 与 y 值的交换x=y y=t End If 或If xy Then t=x: x=y: y=t (2)双分支结构语句格式为:If Then Else 或If Then Else End If 功能:当条件表达式为真时,执行Then 后面的语句1 或语句块 1,否则执行Else 后面的语句2或语句块2。【例 9.12】编写计算如下函数的程序语句。If x=0 Then y=Sqr(x) Else y=Abs(x) End If 或If x=0 Then y=Sqr(x) Else y=Abs(x) 本例亦可用单分支结构语句实现,读者可写出程序语句。双分支结构语句只能根据条件表达式的真或假来处理两个分支中的一个。当有多种条件时,要使用多分支结构语句。(3)多分支结构语句格式为:If Then 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 28 页,共 40 页ElseIf Then Else End If 功能:依次测试条件表达式1、条件表达式2、 ,当遇到条件表达式为真时,则执行该条件下的语句块。如均不为真,若有Else 选项,则执行Else 后的语句块,否则执行End If 后面的语句。说明:不管条件分支有几个,程序执行了一个分支后,其余分支不再执行。当有多个条件表达式同时为真时,只执行第一个与之匹配的语句块。因此,应注意多分支结构中条件表达式的次序及相交性。另外注意ElseIf 中不能有空格。【例 9.13】用窗体实现如下操作:当输入某同学期末考试科目的总平均成绩时,显示该生对应的五级制总评结果。在窗体中添加以下控件:创建 2 个标签控件,其标题分别设为:总平均成绩和总评结果。创建 2 个文本框控件,其名字分别设为:Zpcj 和 Zpjg。创建 1 个命令按钮,其标题为“ 评定 ” ,在其 Click 事件过程中,加入如下代码语句:Private Sub command1_Click( ) If Me!Zpcj=90 Then Me!Zpjg= 优秀 ElseIf Me!Zpcj=80 Then Me!Zpjg= 良好 ElseIf Me!Zpcj=70 Then Me!Zpjg= 中等 ElseIf Me!Zpcj=60 Then Me!Zpjg= 及格 Else Me!Zpjg= 不及格 End If End Sub 运行结果:当在总平均成绩文本框中输入任何数值数据时,单击【评定】按钮,总评结果将显示在总评结果框中。(4)If 语句的嵌套使用:指 If 或 Else 后面的语句块中又包含有If 语句。语句格式为:If Then If Then End If End If 【例 9.14】比较 3 个数值变量x、y 和 z 的值,通过交换,使得xyz。程序语句如下:If xy Then t=x: x=y: y=t 如果 xy If yz Then t=y: y=z: z=t 如果 yz If xy Then t=x: x=y: y=t 此时的 x,y 值已不是原先的值End If 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 29 页,共 40 页End If End If 注意:嵌套If 语句应注意书写格式,为提高程序的可读性,多采用锯齿型。注意If 与 End If 的配对。多个If 嵌套, End If 与它最近的If 配对。2.多分支 Select Case语句Select Case语句格式为:Select Case 变量或表达式Case 表达式 1 Case 表达式 2 Case Else End Select 功能: Select 语句首先计算Select Case后的值, 然后依次计算每个Case子句中表达式的值, 如果 的值满足某个Case值,则执行相应的语句块,如果当前Case值不满足, 则进行下一个Case语句的判断。 当所有 Case语句都不满足时, 执行 Case Else子句。如果条件表达式满足多个Case语句,则只有第一个Case语句被执行。说明:“ 变量或表达式 ” 可以是数值型或字符串表达式。Case表达式与 “ 变量或表达式” 的类型必须相同。Case表达式可以是下列几种格式:单一数值或一行并列的数值,之间用逗号分开。用关键字To 分隔开的两个数值或表达式之间的范围,前一个值必须比后一个值要小。字符串的比较是从它们的第一个字符的ASCII 码值开始比较的,直到分出大小为止。用 Is 关系运算符表达式。例如:Case 1 to 20 Case is20 Case 1 To 5,7,8,10,is20 Case A To Z 【例 9.15】例 9.13 中判定学生总评成绩的代码可改写如下:Select Case Val(me!Zpcj) Case is=90 me!Zpjg= 优秀 Case 80,81,82 to 89 me!Zpjg= 良好 Case 70 to 79 me!Zpjg= 中等 Case 60 to 69 me!Zpjg= 及格 Case Else me!Zpjg= 不及格 End Select 又例如:Dim strx as string *1 Select Case strx Case A to Z, a to z stry=英文字母 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 30 页,共 40 页Case !,?,.,; stry=标点符号 Case Is68 stry=字符的 ASCII 码值小于68 Case Else stry=其他字符 End Select 3.循环语句(1)Do While Loop 循环语句语法格式为:Do While 条件表达式 Exit Do Loop 功能:Do While 循环语句:当条件表达式结果为真时,执行循环体,直到条件表达式结果为假或执行到 Exit Do 语句而退出循环体。(2)Do Until Loop循环语句语法格式为:Do Until 条件表达式 Exit Do Loop Do Until 循环语句:当条件表达式结果为假时,执行循环体,直到条件表达式结果为真或执行到 Exit Do 语句而退出循环体。(3)Do Loop While 循环语句语法格式为:Do Exit Do Loop While 条件表达式说明:关键字 While 用于指明当条件为真(True)时,执行循环体中的语句。(4)Do Loop Until 循环语句语法格式为:Do Exit Do Loop Until 条件表达式说明:关键字 Until 用于指明当条件为真(True)前执行循环体中的语句。对于 (1)和(2)循环语句先判断后执行,循环体有可能一次也不执行;而对于(3)和(4)循环语句为先执行后判断,循环体至少执行一次。在 Do Loop循环体中,可以在任何位置放置任意个数的Exit Do 语句,随时跳出Do Loop 循精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 31 页,共 40 页环。如果 Exit Do 使用在嵌套的Do Loop 语句中,则Exit Do 会将控制权转移到Exit Do 所在位置的外层循环。当省略 While 或 Until 条件子句时,循环体结构变成如下格式:Do Exit Do Loop ?循环结构仅由Do. Loop 关键字组成,表示无条件循环,若在循环体中不加Exit Do 语句,循环结构为 “ 死循环 ” 。【例 9.16】把 26 个小写英文字母赋给数组strx。Dim strx(1 to 26) As String I=1 Do While I=26 strx(I)=Chr(I+96) I=I+1 Loop 5)For Next循环语句主要用于循环次数已知的循环操作。语句格式为:For 循环变量 =初值To 终值step 步长值 Exit For Next 循环变量功能:循环变量先被赋初值。判断循环变量是否在终值内,如果是,执行循环体,然后循环变量加步长值继续;如果否,结束循环,执行Next 后的语句。说明:循环变量必须为数值型。step 步长值:可选参数。如果没有指定,则step 的步长值默认为1。注意:步长值可以是任意的正数或负数。一般为正数,初值应小于等于终值;若为负数,初值应大于等于终值;步长值不能为 0,否则造成 “ 死循环 ” 。【例 9.17】把 26 个大写英文字母赋给数组strx。Dim strx(1 to 26) As String I=1 For I=1 To 26 strx(I)=Chr(I+64) Next I 说明:循环体结束后,循环变量的值为循环终值+步长值,上例循环结束后I 值为 27。【例 9.18】分析下列程序的循环结构:For K=5 To 10 Step 2 K=K*2 Next K 按照公式计算,循环次数为:(10-5+1)/2=3次,但这是错误的。实际上,该循环的循环次数为只有 1 次(循环变量先后取值5 和 12,循环执行1 次之后,循环变量值为12,超过终值10,循环结束 )。【例 9.19】在立即窗口中显示有(*) 组成的 5*5 的正方形。Sub Procedure5( ) 输出 5*5 的正方形Const MAX=5 定义常量精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 32 页,共 40 页Dim Str As String Str= For n=1 to Max Str=Str+* Next n For n=1 to Max Debug.print Str Next n End Sub (6)While Wend 循环语句While Wend循环与 Do While Loop结构类似, 但不能在While Wend循环中使用Exit Do 语句。While Wend循环语句格式为:While 条件表达式 Wend 9.5 过程调用函数调用函数名称 (参数表 ) 例题 9.20 计算圆面积,使用函数调用方法过程调用Call 过程名称 (参数表 ) 参数传递ByVal 传值方式,单向ByRef 传址方式,双向举例子说明!【例 9.20】在窗体对象中,使用函数过程实现任意半径的圆面积计算,当输入圆半径值时,计算并显示圆面积。在窗体中添加以下控件:创建两个标签控件,其标题分别设为:半径和圆面积。创建两个文本框控件,其名字分别设为:SinR 和 SinS 创建一个命令按钮,其标题设为“ 计算 ” ,在其 Click 事件过程中,加入如下代码语句:Private Sub command1_Click( ) me!SinS=Area(me!SinR) End Sub 在窗体模块中,建立求解圆面积的函数过程Area()。代码如下:Public Function Area(R As Single) As Single IF RVal(me!Siny) Then Msgbox x 值大于 y 值,不需要排序,vbinformation, 提示 Me!Sinx.SetFocus Else a= Me!Sinx b= Me!Siny Swap a,b Me!Sinx = a Me!Siny = b Me!Sinx.SetFocus End If End Sub 在窗体模块中,建立完成排序功能的子过程Swap。代码如下:Public Sub Swap(x,y) Dim t t=x x=y y=t End Sub 运行窗体,可实现输入数据的排序。在上面的例子中,Swap(x,y) 子过程定义了两个形参x 和 y,主要任务是:从主调程序获得初值,又将结果返回给主调程序,而子过程名Swap 是无值的。9.5.2 参数传递在 VBA 中,实参向形参的数据传递有两种方式,即传值 (ByVal 选项 )和传址 (ByRef 选项 ),传址调用是系统默认方式。区分两种方式的标志是:要使用传值的形参,在定义时前面加有“ByVal”关键字,有 “ByVal”关键字,为传值方式,否则为传址方式。(1)传值调用的处理方式是:当调用一个过程时,系统将相应位置实参的值复制给对应的形参,在被调过程处理中,实参和形参没有关系。被调过程的操作处理是在形参的存储单元中进行,形参由于操作处理引起的任何变化均不反馈、影响实参的值。当过程调用结束时,形参所占用的内存单元被释放,因此,传值调用方式具有单向性。(2)传址调用的处理方式是:当调用一个过程时,系统将相应位置实参的地址传递给对应的形参。因此,在被调过程处理中,对形参的任何操作处理都变成了对相应实参的操作,实参的值将会随被调过程对形参的改变而改变,传址调用方式具有双向性。【例 9.22】创建有参子过程Test(),通过主调过程Main_click( ) 被调用,观察实参值的变化。被调子过程Test( ):Public Sub Test(ByRef x As Integer) 形参 x 说明为传址形式的整型量x=x+10 改变形参x 的值End Sub 主调过程Main_click( ) :Private Sub Main_click( ) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 34 页,共 40 页Dim n As Integer 定义整型变量n n=6 变量 n 赋初值 6 Call Test(n) MsgBox n 显示 n 值End Sub 当主调过程Main_click( ) 调用子过程Test( )后,“MsgBox n” 语句显示n 的值已经发生了变化,其值变为 16,说明通过传址调用改变了实参n 的值。如果将主调过程Main_click( ) 中的调用语句“Call Test(n)”换成 “Call Test(n+1)”,再运行主调过程Main_click( ) ,结果会显示n 的值依旧是6。表明常量或表达式在参数的传址调用过程中,双向作用无效,不能改变实参的值。在上例中,需要操作实参的值,使用的是系统默认的传址调用方式,若使用传值调用方式,请读者分析处理结果的变化。9.6 程序运行错误处理与调试该节内容可以融入到其他章节中,编写例子的时候进行调试、运行。注意语法错误和逻辑错误的调试调试的方法等第 10 章VBA 数据库编程通过本章的学习,读者应该掌握以下内容:1.VBA 常见操作; 2.VBA 的数据库编程;10.1 VBA 常见操作1.打开和关闭操作(1)打开窗体操作一个程序中往往包含多个窗体,可以用代码的形式关联这些窗体,从而形成完整的程序结构。命令格式为:DoCmd.OpenForm formname,view ,filtername ,wherecondition ,datamode ,windowmode 【例 10.1】以对话框形式打开名为“ 学生信息登录” 窗体。DoCmd.OpenForm 学生信息登录,acDialog 注意:参数可以省略,取缺省值,但分隔符“, ”不能省略。(2)打开报表操作命令格式:DoCmdOpenReport reportname,view,filtername,wherecondition (3)关闭操作命令格式为:DoCmd.Close ,objecttype,objectname,save 【例 10.2】关闭名为 “ 学生信息登录” 窗体。DoCmd.Close acForm, 学生信息登录 如果 “ 学生信息登录” 窗体就是当前窗体,则可以使用语句:DoCmd.Close 。2.输入框 (InputBox )输入框用于在一个对话框中显示提示,等待用户输入正文并按下按钮、返回包含文本框内容的字符串数据信息。它的功能在VBA 中是以函数的形式调用使用,其使用格式如下:InputBox(prompt,title,default,xpos,ypos,helpfile,context) 3.信息框 (MsgBox )消息框用于在对话框中显示消息,等待用户单击按钮,并返回一个整型值告诉用户单击哪一个按钮。其使用格式如下:MsBox(prompt,buttons,title,helpfile,context) 4.VBA 编程验证数据使用窗体和数据访问页,每当保存记录数据时,所做的更改便会保存到数据源表当中。在控件中的数据被改变之前或记录数据被更新之前会发生BeforeUpdate 事件。通过创建窗体或控件的精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 35 页,共 40 页BeforeUpdate 事件过程,可以实现对输入到窗体控件中的数据进行各种验证。例如,数据类型验证、数据范围验证等。【例 10.3】对窗体test 上文本框控件txtAge 中输入的学生年龄数据进行验证。要求:该文本框中只接受1530 之间的数值数据,提示取消不合法数据。添加该文本控件的BeforeUpdate 事件过程代码如下:Private Sub txtAge_BeforeUpdate (Cancel As Integer) If Me!txtAge = Or IsNull (Me!txtAge)Then 数据为空时的验证MsgBox 年龄不能为空 !,VbCritical,警告 Cancel = True 取消 BeforeUpdate 事件ElseIf IsNumeric (Me!txtAge) = False Then 非数值数据输入的验证MsgBox 年龄必须输入数值数据!,VbCritical, 警告 Cancel = True 取消 BeforeUpdate 事件Elseif Me! txtAge 30 Then 非法范围数据输入的验证MsgBox 年龄为 1530 范围数据 !,VbCritical, 警告 Cancel = True 取消 BeforeUpdate 事件Else 数据验证通过MsgBox 数据验证OK!,VbInformation,通告 End If End Sub 5.计时事件 (Timer) VB 中提供 Timer 时间控件可以实现“ 定时 ” 功能。但 VBA 并没有直接提供Timer 时间控件,而是通过设置窗体的“ 计时器间隔 (TimerInterval)”属性与添加 “ 计时器触发 (Timer) ”事件来完成类似“ 定时 ” 功能。其处理过程是: Timer 事件每隔TimerInterval 时间间隔就会被激发一次,并运行 Timer 事件过程来响应。这样重复不断,即实现“ 定时 ” 处理功能。【例 10.4】使用计时事件Timer 在窗体的一个标签上实现自动计数操作(从 1 开始 )。要求: 窗体打开时开始计数,点击其上按钮, 则停止计数, 再点击一次按钮,继续计数。 窗体运行如图10.3所示。操作步骤如下:(1)创建窗体timer,并在其上添加一个标签1Num 和一个按钮bOK。(2)打开窗体属性窗口,设置“ 计时器间隔 ” 属性值为1000 并选择 “ 计时器触发 ” 属性为 “ 事件过程 ” 项,如图10.4 所示。点击其后的【】 ,进入 Timer 事件过程编写事件代码。注意, “ 计时器间隔 ” 属性值以毫秒为计量单位,故输入1000 表示间隔为1 秒。(3)设计窗体 “ 计时器触发 ” 事件、 窗体 “ 打开 ” 事件和 bOK 按钮 “ 单击 ” 事件代码及有关变量的类模块定义如下:Option Compare Datebase Dim flag As Boolean 标记标量,用于存储按钮的单击动作Private Sub bOK_Click ( ) 按钮单击事件flag = Not flag End Sub Private Sub Form_Open (Cancel As Integer) 窗体打开事件flag = True 设置窗体打开时标记变量的初始状态为True End Sub Private Sub Form_timer ( ) 计时器触发事件If flag = True Then 根据标记变量决定是否进行屏幕更新Me!lNum.Caption=CLng(Me!lNum.Caption)+1 标签更新End If End Sub 在利用窗体的Timer 事件进行动画效果设计时,只需将相关代码添加进Form_Timer( ) 事件模板精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 36 页,共 40 页中即可。此外, “ 计时器间隔 ” 属性值也可以安排在代码中进行动态设置(Me.TimerInterval=1000) 。而且可以通过设置 “ 计时器间隔 ” 属性值为零 (Me.TimerInterval=0) 来终止 Timer 事件继续发生。【例 10.5】设计一个用户登录窗体,输入用户名和密码,如用户名或密码为空,则给出提示,重新输入;如用户名或密码不正确,则给出错误提示,结束程序运行;如正确,则显示“ 欢迎使用! ” 信息。要求整个登录过程要在30 秒中完成,如果超过30 秒还没有完成正确的登录操作,则程序给出提示自动终止这个登录过程。代码如下:Option Compare Database Dim flag As Boolean 标志标量,用于存储按钮的单击动作Dim second As Integer 计时器变量Dim lcount As Integer 计次变量Private Sub Form_Open(Cancel As Integer) 窗体打开事件second = 0 事件计数器清0 lcount = 0 登录计次变量清0 End Sub Private Sub Form_Timer( ) 计时器触发事件If second 30 Then MsgBox 请在 30 秒中登录 , vbCritical, 警告 DoCmd.Close Else Me!lNum.Caption = 30 - second 倒计时显示End If second = second + 1 计时器 +1 End Sub Private Sub OK_Click( ) 按钮单击事件lcount = lcount + 1 计次 +1 If Len(Nz(Me!username) = 0 And Len(Nz(Me!userpassword) = 0 And lcount = 3 Then 用户名和密码均为空时的处理MsgBox 用户名和密码不能为空!请输入 + Chr(13) + Chr(13) + 您还有 & 3 - lcount & 次机会 , vbCritical, 提示 Me!username.SetFocus 设置输入焦点在UserName文本框ElseIf Len(Nz(Me!username) = 0 And Count = 3 Then 用户名为空时的处理MsgBox 用户名不能为空!请输入 + Chr(13) + Chr(13) + 您还有 & 3 - lcount & 次机会 , vbCritical, 提示 Me!username.SetFocus 设置输入焦点在UserName文本框ElseIf Len(Nz(Me!userpassword) = 0 And Count = 3 Then MsgBox 请确认用户名和密码后再登录, vbCritical, 警告 DoComd.Close End If End Sub 10.2 VBA 的数据库编程1.数据库引擎及其接口Microsoft Office VBA是通过 Microsoft Jet 数据库引擎工具来支持对数据库的访问。所谓数据库引擎实际上是一组动态链接库(DLL) ,当程序运行时被连接到VBA 程序而实现对数据库的数据访问功能。数据库引擎是应用程序与物理数据库之间的桥梁,它以一种通用接口的方式,使各种类型物理数据库对用户而言都具有同一的形式和相同的数据访问与处理方法。在 Microsoft Office VBA中主要提供了3种数据库访问接口: 开放数据库互连应用编程接口(Open Database Connectivity API ,ODBC API) 、数据访问对象(Data Access Objects ,DAO) 和 ActiveX数据对象 (ActiveX Data Objects , ADO) 。ODBC API :目前 Windows 提供的 32 位 ODBC 驱动程序对每一种客户机/服务器 RDBMS 、最流行的索引顺序访问方法(ISAM) 数据库 (Jet、dBase、Foxbase和 FoxPro)、扩展表 (Excel)和划界文本文件都可以操作。在Access 应用中,直接使用ODBC API 需要大量VBA 函数原型声明(Declare)和一些繁琐、低级的编程,因此,实际编程很少直接进行ODBC API 的访问。DAO :提供一个访问数据库的对象模型。利用其中定义的一系列数据访问对象,如Database、QueryDef 、 RecordSet 等对象,实现对数据库的各种操作。这是 Office 早期版本提供的编程模型,用来支持Microsoft Jet 数据库引擎,像开发者通过ODBC 直接连接到其他数据库一样,连接到Access 数据库。 DAO 最适用于单系统应用程序或在小范围本地分布使用,其内部已经对Jet数据库的访问进行了加速优化,而且使用起来也是很方便的。所以如果数据库是Access 数据库且是本地使用的话,可以使用这种访问方式。ADO :是基于组件的数据库编程接口,是一个和编程语言无关的COM 组件系统。使用它可以方便地连接任何符合ODBC 标准的数据库。Microsoft Office 2000及以后版本应用程序均支持广泛的数据源和数据访问技术,于是产生了一种新的数据访问策略:通用数据访问(Universal Data Access ,UDA) 。用来实现通用数据访问的主要技术是称作OLE DB( 对象链接和嵌入数据库)的低级数据访问组件结构和称为ActiveX 数据对象 ADO 的对应于OLE DB 的高级编程接口。3.数据访问对象(DAO) (2)利用 DAO 访问数据库通过DAO编程实现数据库访问时,首先要创建对象变量,然后通过对象方法和属性来进行操作。下面给出数据库操作一般语句和步骤:程序段:定义对象变量Dim ws As Workspace Dim db As Database Dim rs As RecordSet 通过 Set 语句设置各个对象变量的值精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 38 页,共 40 页Set ws = DBEngine.Workspace(0) 打开默认工作区Set db = ws.OpenDatabase() 打开数据库文件Set rs = db.OpenRecordSet() 打开数据记录集Do While Not rs.EOF 利用循环结构遍历整个记录集直至末尾安排字段数据的各类操作rs.MoveNext 记录指针移至下一条Loop rsclose 关闭记录集dbclose 关闭数据库Set rs = Nothing 回收记录集对象变量的内存占有Set db = Nothing 回收数据库对象变量的内存占有4.ActiveX 数据对象 (ADO) 利用 ADO 访问数据库一般过程和步骤是:定义和创建ADO 对象实例变量。设置连接参数并打开连接 Connection 。设置命令参数并执行命令(分返回和不返回记录集两种情况) Command。设置查询参数并打开记录集 RecordSet。操作记录集 (检索,追加,更新,删除)。关闭、回收有关对象。具体可参阅以下程序段分析:程序段 1:在 Connection 对象上打开RecordSet 创建对象引用Dim cn As new ADODB.Connection 创建一连接对象Dim rs As new ADODB .RecordSet 创建一记录集对象cn.Open 打开一个连接rs.Open 打开一个记录集Do While Not rs.EOF 利用循环结构遍历整个记录集直至末尾安排字段数据的各类操作rs.MoveNext 记录指针移至下一条Loop rs.close 关闭记录集cn.close 关闭连接Set rs = Nothing 回收记录集对象变量的内存占有Set cn = Nothing 回收连接对象变量的内存占有程序段 2:在 Command 对象上打开RecordSet 创建对象引用Dim cm As new ADODB.Command 创建一命令对象Dim rs As new ADODB.RecordSet 创建一记录集对象设置命令对象的活动连接、类型及查询等属性With cm .ActiveConnection = ?.CommandType = .CommandText = 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 39 页,共 40 页End With Rs.Open cm, 设置 rs 的 ActiveConnection 属性Do While Not rs.EOF 利用循环结构遍历整个记录集直至末尾安排字段数据的各类操作rs.MoveNext 记录指针移至下一条Loop rs.close 关闭记录集Set rs = Nothing 回收记录集对象变量的内存占有精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 40 页,共 40 页
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号