为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > ACCESS2010基础教程

ACCESS2010基础教程

2020-02-13 461页 ppt 8MB 20阅读

用户头像 个人认证

真诚文档交流

本人从事临床麻醉五年有余,工作兢兢业业,拥有丰富的临床麻醉经验及临床医学资料,并取得了助理医师资格。

举报
ACCESS2010基础教程数据库基础授课虞卫东Access2010教程简介: MicrosoftOfficeAccess是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。最新的计算机二级Access考试就是用的Access 2010版本。 Access的用途体现在两个方面: 一、用来进行数据分析:access有强大的数据处理、统计分析能力,利用access的查询功能,可以方便地进行各类汇总、平均等统计。并可灵活设置统计的条件。比如在统计分析上万条记录、十几万条记录及以上的数据时速度快且操作方便,这一点是E...
ACCESS2010基础教程
数据库基础授课虞卫东Access2010教程简介: MicrosoftOfficeAccess是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。最新的计算机二级Access考试就是用的Access 2010版本。 Access的用途体现在两个方面: 一、用来进行数据:access有强大的数据处理、统计分析能力,利用access的查询功能,可以方便地进行各类汇总、平均等统计。并可灵活设置统计的条件。比如在统计分析上万条、十几万条记录及以上的数据时速度快且操作方便,这一点是Excel无法与之相比的。这一点体现在:会用access,提高了工作效率和工作能力。Access的用途体现在两个方面: 二、用来开发软件:access用来开发软件,比如生产管理、销售管理、库存管理等各类企业管理软件,其最大的优点是:易学!非计算机专业的人员,也能学会。低成本地满足了那些从事企业管理工作的人员的管理需要,通过软件来规范同事、下属的行为,推行其管理思想。Access的用途体现在两个方面: 另外,在开发一些小型网站WEB应用程序时,用来存储数据。例如ASP+Access。这些应用程序都利用ASP技术在InternetInformationServices运行.比较复杂的WEB应用程序则使用PHP/MySQL或者ASP/MicrosoftSQLServer。  MicrosoftAccess2010的特点 ,就在于使用简便。Access2010让您充分运用信息的力量。您不用是数据库专家,一样可以大显神通。同时,透过新增加的网络数据库功能,您在追踪与共享数据,或是利用数据制作报表时,将可更加轻松无负担,这些数据自然也就更具影响力。数据模型数据模型 概念数据模型 概念数据模型用来建立信息世界的数据模型,强调语义表达,描述信息结构,是对现实世界的第一层抽象。 1)实体:客观存在并且可以相互区别的事物可以是具体的事物,如一个学生,一本书也可以是抽象的事物,如一次考试 2)实体的属性:用于描述实体的特性。如学生用学号、姓名、性别、年龄等属性描述 3)一个实体是若干个属性值的集合。如一个特定的学生用学号、姓名、性别等属性值描述 4)实体集:具有相同属性的实体的集合。如若干个学生实体的集合构成学生实体集数据库概述实体集之间的联系概念:两个实体集之间实体的对应关系称为联系 (1)一对一联系 如果实体集E1中的每一个实体至多和实体集E2中的一个实体有联系,反之亦然,则称E1和E2是一对一的联系,表示为1:1。 例如:实体集校长和 实体集学校之间的 联系是一对一。数据库概述实体集之间的联系 2)一对多联系 如果实体集E1中的每个实体与实体集E2中的任意个实体有联系,而实体集E2中的每一个实体至多和实体集E1中的一个实体有联系,则称E1和E2之间是一对多的联系,表示为1:n,E1称为一方,E2为多方。 例如,实体集学校和实 体集学生之间是一对多 的联系,一方是实体集 学校,多方是实体集学生实体集之间的联系(3)多对多联系如果实体集E1中的每个实体与实体集E2中的任意个实体有联系,反之,实体集E2中的每个实体与实体集E1中的任意个实体有联系,则称E1和E2之间是多对多的联系,表示为m:n。例如,实体集学生和实体集课程之间是多对多的关系E-R图 E-R图:用图形方式表示实体集之间的联系。 组成: 1)矩形:表示实体集,实体名称写在框内; 2)椭圆:表示实体集或联系的属性,框内标明属性的名称; 3)菱形:表示实体间的关系,框内注明联系名称; 4)连线:连接实体和各个属性、实体和联系,并注明联系种类,即1:1、1:n或n:m。1:11:nm:n E-R模型的表示方法 实体——用矩形表示 属性——用椭圆形表示 联系——用菱形表示1:11:nm:n举例:网上成绩查询管理系统的E-R图 系统功能:学生登陆后,可以查询成绩、给老师留言、下载资源;教师登陆后可以管理任课班级的学生成绩、上传资源、查看学生留言。学生实体集和课程实体集之间的关系数据结构数据结构规范化的二维表格: 任意两行内容不能完全相同 不能有名称相同的列 每一列都是不可分的,即不允许表中还有表 同一列的值取自同一个定义关系模式:学生(学号,姓名,性别,状态,入学时间,最后登陆时间,登陆次数)关系关系模式属性域元组关键字(包括候选键和主键)关系数据库 关系模型的组成----二维表格关系模型中的常用术语 1.元组 在二维表中,从第二行起的每一行称为一个元组,在文件中对应一条具体记录。 2.属性 二维表中,每一列称为一个属性,在文件中对应一个字段。 3.属性名 二维表第一行显示的每一列的名称,在文件中对应字段名,例如“姓名”,“性别”等。关系模型中的常用术语 4.属性值 行和列的交叉位置表示某个属性的值。 5.域 表示各个属性的取值范围。关系模型中的常用术语 6.表结构 表中的第一行,表示组成该表的各个字段名称,各字段取值的类型、宽度等。 7.关系模式 是对关系结构的描述,表示格式: 关系名(属性1,属性2,属性3,…,属性n) 例:student(学号,姓名,性别,年龄)关系模型中的常用术语 6.表结构 表中的第一行,表示组成该表的各个字段名称,各字段取值的类型、宽度等。 7.关系模式 是对关系结构的描述,表示格式: 关系名(属性1,属性2,属性3,…,属性n) 例:student(学号,姓名,性别,年龄)关系模型中的常用术语 9.主键 从候选键中指定一个用来标识元组。 10.外部关键字 表中的一个字段不是本表的主关键字或候选关键字,而是另外一个表的主关键字或候选关键字,该字段称为外部关键字,简称外键。 例题:在关系score中,“学号”不是score的主键,而是关系student的主键,因此,“学号”称为外键。关系模型中的常用术语 11.主表和从表 主表:以外键作为主键的表 从表:外键所在的表 主表和从表通过外键相关联关系模型的特点 1)每一列不可再分; 2)同一关系中属性(字段)不允许重名 3)关系中不允许有完全相同的元组 4)关系中交换任意两行的位置不影响数据的实际含义; 5)关系中交换任意两列的位置不影响数据的实际含义。关系的基本运算 1.选择 从指定的关系中选择满足给定条件的元组组成新的关系。 例题:从关系score1中选择数学大于90的元组组成关系S1。S1=σ数学>90(Score1)关系的基本运算 2.投影 从指定关系的属性集合中选取若干个属性组成新的关系。 例题:从关系score1中选择“学号”、“姓名”、“数学”组成新的关系S2。 S2=π学号,姓名,数学(Score1)关系的基本运算 联接 两个关系中的元组按指定条件组合新的关系 例题:将score1和score2按相同学号合并专门的关系运算——选择、投影、连接关系S1关系S2从指定的关系中选择满足给定条件的元组组成新的关系从关系的属性集合中选取指定的若干个属性组成新的关系S2=σ性别=”男”(S1)S3=π学号,姓名,性别(S1)关系S3 学号 姓名 性别 状态 入学时间 最后登陆时间 登陆次数 39001 杨雨潇 男 在读 2007-9-1 2008-7-2 18 39002 崔敏 女 在读 2007-9-1 2008-7-4 25 39003 张进 女 在读 2007-9-1 2008-7-1 20 39004 何晴 女 在读 2007-9-1 2008-6-30 16 39005 李哲 男 在读 2007-9-1 2008-7-2 19 39006 刘晓 女 在读 2007-9-1 2008-7-2 22 学号 姓名 性别 状态 入学时间 最后登陆时间 登陆次数 39001 杨雨潇 男 在读 2007-9-1 2008-7-2 18 39005 李哲 男 在读 2007-9-1 2008-7-2 19关系S4S6=π学号,课程号,成绩(σ成绩类型=0(S4))S7=S3S6 学号 课程号 成绩 成绩类型 39001 8 85 0 39002 7 77 0 39001 6 76 1 39001 6 90 0 39006 7 82 0 39001 8 80 0 39006 6 92 0由E-R图设计关系模型1)两个实体集学生(学号,姓名,性别,年龄)课程(课程代码,课程名称,任课教师)2)联系选修(学号,课程代码,成绩)↑↑↑两个实体集的主键自身属性根据概念数据模型设计关系数据模型网上成绩查询管理系统的E-R图 一个实体集转换为一个关系模式,实体集的属性就是关系的属性 院系(院系编号,院系名称) 班级(班号,班级名,学生数,班主任) 学生(学号,登陆密码,姓名,性别,状态,入校时间,毕业时间,退学时间,注册时间,最后登陆时间,登陆次数)这里“状态”有3种取值:在读、退学、毕业 教师(教师号,登陆密码,姓名,电话,邮箱,QQ号,找回密码问题,找回密码答案,注册时间,最后登陆时间,登陆次数) 课程(课程号,课程名称,学分) 课程资源(资源号,资源名,链接地址,更新时间,资源类型,说明) 学期(学期号,学期名称,是否当前学期,学期起始时间,学期结束时间)Access简介 Access的特点 1.具有Office系列的共同功能; 2.桌面型的数据库管理系统; 3.与其它数据库系统共享数据; 4.提供程序设计语言VBA,用于开发应用程序。Access启动ACCESS数据库管理系统 Access2003是MicrosoftOffice2003的组件之一,是用户和数据库间的软件接口 使用非常简单——可视化工具 提供了大量的向导——快速创建对象及应用程序 面向对象的、采用事件驱动,可以与其他数据库相连,使用VBA语言作为其应用程序开发工具 可处理多种数据信息——Office组件数据、其他DBMS数据创建数据库和数据表数据完整性控制数据查询主要内容Access的启动 1.“开始”--->“程序”--->MicrosoftAccess 2.在对话框中选“空Access数据库”。 3.单击“确定” 4.输入数据库名 5.单击“创建”数据库组成6.4.1创建数据库和数据表创建数据库数据库文件(.mdb)其中包括所有相关数据和管理这些数据的所有对象。方法: 单击【开始】|【所有程序】|【MicrosoftOffice】|【MicrosoftOfficeAccess2003】启动Access2003 单击【文件】|【新建…】 建立空数据库 使用模板向导建立各类数据库演示内容:建立空数据库:school.mdb利用模版建立:订单1.mdf创建数据表每个关系对应建立一个数据表两方面的工作:设计表结构和输入数据记录。(1)打开表结构“设计器”使用设计视图建立数据表的表结构(2)依次输入各个字段的名称,指定字段类型,并对每个字段的含义、取值进行注释说明 字段类型 说明 文本 用来存放不需要计算的数据,可以为数字、文字,例如学号、电话 备注 也称长文本,存放说明性文字 数字 需要运算的数值数据,如成绩、次数、年龄 日期/时间 存放日期和时间数据 货币 存放货币数值 自动编号 在增加记录时,其值能依次自动加1 是/否 存放逻辑型数据,如婚否、Yes/No、On/Off OLE对象 将对象(如电子表格、文件、图形、声音等)链接或嵌入表中 超链接 存放超链接数据 查阅向导 这是与使用向导有关的字段 字段属性 说明 字段大小 可以指定字段中文本或数字的范围,文本缺省长度为50,最多255个字符,备注型最多65536个,数值为长整型。应该尽可能设置最小的字段大小,因为其需要的内存更少,数据处理速度更快。 格式 可以选择或输入格式串来定义字段中数据的格式 小数位数 指定数字或货币数值的小数点位数 输入掩码 用于设置字段数据的输入模式,例如可以为“电话号码”字段设置一个输入掩码(0000)-(00000000),则在用户输入该字段内容时,会显示(____)-(________),提示用户正确输入。 标题 可以定义字段的别名,作为创建窗体和报表时数据单中使用的标签。如字段名为sname,可将标题设置为“姓名” 默认值 该值在新建记录时会自动输入到字段中,也可以更改。例如,将states(状态)字段的默认值设为“在读”。 必填字段 用于设置这个字段是否必须填写,设置成“是”时,这个字段不能空着 允许空字符串 如果为“是”,则该字段可以接受空字符串为有效输入项 索引 可以选择是否为这个字段建立索引或者是否允许建立索引,建立索引的好处是,按此字段进行查询时会提高查询和排序速度,但同时也加大了系统维护的开销。(1)打开表结构“设计器”使用设计视图建立数据表的表结构(2)依次输入各个字段的名称,指定字段类型,并对每个字段的含义、取值进行注释说明(3)定义表的主键选中字段后单击工具栏“主键”按钮(4)保存并命名数据表演示内容:打开前面建立的空数据库school.mdb建立数据表course(课程表)——3个字段cid、cname、ccredit(学分)(1)双击数据表,打开数据表视图窗口在数据表视图窗口输入数据记录(2)依次输入各字段值,完成所有记录的录入(3)关闭窗口结束数据完整性控制通过设置主键,使其取值既不能为空也不能重复,以此保证记录(即实体)的正确性。通过定义指定字段的“有效性”属性,对字段的取值设置约束条件,保证记录的合法性。是指对存在引用关系的两个关系(数据表)的约束,通过建立引用关系保证数据的一致性。演示1内容:在数据表student中插入新记录(“插入”|”新记录”菜单命令)——注意:分别插入一条学号为空和与其它记录学号重复的记录。观察结果……演示2内容:对数据表student设置有效性规则:sex——=‘男’or=‘女’(等号也可以省去)尝试修改已有记录的sex字段的值,观察结果对数据表tea_course设置有效性规则:ts_ter_id(学期号)只能取1~10——Between1And10(或者 >=1and<=10)尝试修改已有记录的该字段的值,观察结果参照完整性示例取值参照只要建立了二者之间的引用关系,就能保证数据的一致性: 在选课表中插入一个记录(39078,6,90,0)——拒绝 修改学生表中的学生学号——同步修改选课表中相应学号 删除学生表中记录(39001,杨雨潇,男,在读,2007-9-1,2008-7-2,18)——提示同步删除选课表中相应记录关联关系关联字段主表子表建立student表和sel_course表间的关联关系(1)打开“关系”窗口方法?(2)选择建立关联的表添加到窗口中(3)将主表的主键拖到子表的外键,建立关联关系(4)设置参照完整性规则一对多关系主键外键 当主表关联字段被更改时,子表关联字段也自动随之更改。 子表关联字段欲更改的新值若在主表中不存在,则拒绝子表的修改 子表增加一条记录时,若该记录关联字段的取值在主表中不存在,则拒绝子表的操作。 当主表删除某个记录时,子表中与之关联的全部记录一并自动删除。 子表删除记录时,不会影响到主表记录。还有什么用?(1)利用关联查看多组数据(2)在子表中输入(插入、修改)数据时保证完整性(3)据此进行多表查询school数据库中各表的关联关系数据查询【例6.11】创建一个查询,从sel_course(选课)表中查询选修课程成绩不及格的学生的学号、课程号及成绩,查询结果按学号升序排序。查询命名为“查询不及格学生1”。创建查询?⑴打开查询设计窗口⑵选择欲查询的数据表⑶选择查询字段⑷输入查询条件。⑸选择哪些字段显示在查询结果中⑹查询结果可以指定排序字段⑺运行查询,查看结果⑻保存并命名查询演示内容:对已经建好的查询,运行它,察看结果删除原有查询,重新演示建立过程多种查询视图多种查询类型 从表中检索数据,并对结果排序。 还可以对记录分组进行总计、计数、平均值以及其他类型的计算。 对查询结果按不同的字段逐级分组显示统计结果 结果显示方式为交叉表方式,即分行标题、列标题以及统计数据区。操作查询指可以重复使用,每次改变查询条件的查询。【例6.12】查询不及格学生姓名、课程名、成绩,结果按学号升序排序。查询命名为“查询不及格学生2”。选择查询依据关联关系建立连接,然后选择需要的字段、记录【例6.13】查询选修课程中最高分是多少,查询命名为“查询最高分”。选择查询(汇总)【例6.14】查询选修课程中每位学生各自的最高分、最低分、平均分,查询结果包含学生姓名和最高分数、最低分、平均分。查询命名为“查询每位学生最高分”。选择查询(分组汇总)【例6.15】统计查询各班不同性别的学生选择各门课程的人数情况。查询命名为“查询选课人数”。显示统计结果时,班级名、性别均作为行标题,课程名称作为列标题。交叉表查询需要选择查询类型为“交叉表查询”【例6.16】查询各班学生在某一范围内的成绩,查询命名为“参数查询学生成绩”。单击“查询”|“参数…”,设置查询参数参数查询说明数据表与查询 查询结果也为二维表形式,但它与数据表对象不同; 数据表中存储数据信息,而查询存储查询的规则,即相应的SQL命令; 执行查询即执行SQL命令; 可以基于数据表建立查询,也可以基于查询创建其他查询。。数据库组成 Access数据库: 1)Access的文档文件,扩展名为MDB 2)由数据表、查询、窗体、报表、宏和模块等对象组成。 3)所有对象都保存在的同一个数据库文件中。数据库组成1.表1)以二维表格保存基本信息,数据库的核心2)为其它对象提供数据3)对具有复杂结构的数据,分别使用多张数据表,这些表之间可以通过相关字段建立关联。数据库组成数据库组成2.查询1)从一个或多个表中查找某些特定的记录2)查询的运行结果以二维表的形式显示3)在数据库中只记录了查询的方式即规则4)可作为窗体、报表等其它组件的数据源数据库组成数据库组成 3.窗体 1)向用户提供交互界面,更方便地进行数据的输入、输出 2)窗体的数据源,可以是一个或多个数据表,也可以是查询。数据库组成数据库组成 4.报表 1)将数据按指定的格式进行显示或打印 2)数据源可以是一张或多张数据表、查询 3)建立报表时还可以进行计算,如求和、平均等 5.页 通过Web页将数据存储到指定的文件夹,或将其复制到Web服务器上,以便在网上发布信息。数据库组成数据库组成 6.宏 宏是由具有宏名的一系列命令组成,用来简化一些需要重复的操作。 建好的宏,可以单独使用,或与窗体配合使用。 7.模块 用Access提供的VBA语言编写的程序,模块通常与窗体、报表结合起来完成完整的应用功能。数据表结构数据表的建立和使用 数据表由表结构和记录两部分组成。 数据表结构 1.字段名 2.数据类型如文本型、数字型等 3.字段属性(1)字段大小(2)格式(3)小数位数(4)标题(5)有效性规则 4.主关键字建立数据表建立数据表 1.在数据表视图下建立数据表 例题:在数据表视图下建立“成绩”表(p248) 2.用设计视图建立数据表(p249)例题:在设计视图视图下建立“学生”表 1)设计表结构 2)定义主关键字段 3)命名表及保存 4)输入记录建立数据表编辑数据表 1.修改表结构 在设计视图或数据表视图下进行 (1)改字段名、类型、属性 (2)插入字段 (3)删除字段 2.编辑记录 在数据表视图下进行 (1)输入新记录 (2)修改原有记录 (3)删除记录。编辑数据表建立表间关系 目的:实现数据库的参照完整性。 例题:在“学生”和“成绩”表间建立关系,“学生”表为主表,“成绩”表为从表: 1.“工具”---->“关系” 2.选择表或查询 3.设置完整性 4.建立联系后,再打开“学生”表,观察显示的结果编辑关系对话框建立表间关系 使用数据表数据表的使用 在数据表视图下进行 1.记录排序 按某个字段值的升序或降序重新排列记录 (1)排序 选择排序关键字。 单击工具栏上的“升序”或“降序”按钮 (2)恢复排序前的记录顺序 “记录”---->“取消筛选/排序”筛选数据表的使用 2.筛选记录 筛选记录是指在屏幕上仅仅显示满足条件的记录 常用的有按选定内容筛选或内容排除筛选。查询查询 查询的类型 1.设计视图查询 在一个或多个基本表中,按照指定的条件进行查找,并指定显示的字段。 2.简单查询向导 按系统的提示设计查询的结果。 3.交叉表查询 用交叉方式的数据表格显示信息。查询类型查询的类型 4.重复项查询 在数据表中查找具有相同字段值的重复记录。 5.不匹配查询 在数据表中查找与指定条件不匹配的记录。 建立查询: 在设计视图或SQL窗口下 显示查询结果: 单击工具栏上的“执行”按钮!设计视图窗口设计视图窗口的组成1)字段:查询结果中使用的字段。2)表:该字段所在的表或查询。3)排序:指定是否按此字段排序4)显示:确定该字段是否在结果中显示。5)准则:指定对该字段的查询条件6)或:指定其它查询条件SQL窗口课堂训练实体完整性 例题:“学生”表已将“学号”定义为主键 观察以下操作是否允许: 1)输入学号为空的记录; 2)输入新记录,学号与表中已有记录学号相同 结论:实体完整性对表中主键的要求: 1)不允许有空值 2)不允许出现两条记录的主键值相同用户定义的完整性课堂训练用户定义的完整性 用户定义的完整性是针对具体数据设置约束条件 例题:对“学生”表设置约束条件 1)“年龄”字段的值设置在16至23之间 2)“性别”字段的有效性规则设置为: '男'or'女'。参照完整性课堂训练参照完整性 参照完整性是两个相关联表之间的操作约束 例题:对已建立关联的“学生”表和“成绩”表进行完整性操作,已知: 1)主表:学生主键:学号 2)从表:成绩外键:学号 3)已进行的设置:级联更新相关字段 级联删除相关记录参照完整性课堂训练参照完整性 观察以下操作的结果: (1)向“成绩”表输入一条新的记录,其中学号在“学生”表中是不存在的,该操作能否进行? (2)将“学生”表的第三条记录的“学号”字段值改为“990007”,观察“成绩”表的变化; (3)将“学生”表中“学号”字段值为“990004”的记录删除,观察“成绩”表的变化由两个表建立查询课堂训练参照完整性 结论: 1)从表中不能引用主表中不存在的实体 2)主表学号改变时,从表中的学号自动改变------“级联更新相关字段”。 3)主表中删除记录时,从表中与主表学号相同的记录同步删除-------“级联删除相关字段”课堂训练用两个表的数据建立查询 例题:建立查询,要求: 1)数据源来自“学生”表和“成绩”表 2)结果中包含四个字段,分别是“学号”,“姓名”,“课程”和“成绩” 3)只显示成绩不低于90的记录。分类汇总课堂训练用查询对数据进行分类汇总 例题:用学生表创建查询,分别计算男生和女生的平均年龄 在设计视图窗口设置如下的准则: 1)单击工具栏上的“汇总”按钮; 2)在“性别”对应的总计行中,选择“GroupBy”,表示按“性别”分组; 3)在“年龄”对应的总计行中选择“Avg”表示计算平均值准则和结果 动手练习:建立一个学生数据库,并向该数据库中添加6个数据表,分别为:课程表、开课计划表、选课成绩表、学生表、教师表、系部表等。这几个表的字段分别如下所示: 课程表(课程编号、课程名称、课程类别) 说明: 主键字段是课程编号,数字类型,整型,必添字段,课程名称,文本性,长度为50,必添字段,不允许空白字符串 课程类别:文本性,长度为10 开课计划表(选课代码、课程班级、课程编号、教师编号、时间) 说明: 主键字段是选课代码,数字类型,整型,不允许空白字符串 课程班级,文本型,长度为20,必添字段,不允许空白字符串 课程编号,数字类型,长度为4,必添字段,不允许空白字符串 教师编号,数字类型,长度为5,必添字段,不允许空白字符串 时间,日期/时间型,设置输入掩码使输出格式为08年3月2日星期5 选课成绩表(选课代码、学号、平时成绩、考试成绩、总评成绩、成绩等级) 说明: 选课代码,数字类型,整型,必填字段 学号,数字类型,整型,必填字段 平时成绩,数字类型,单精度,小数位数2 考试成绩,数字类型,单精度,小数位数2总评成绩,数字类型,单精度,小数位数2成绩等级,文本,长度为2 学生表(学号、姓名、性别、电话) 说明: 学号,主键,数字类型,长度为5,必填字段 姓名,文本类型,长度为20,必填字段,不允许为空 性别,文本类型,长度为2,进行有效性规则的设定及有效性文本的设定,默认为男 电话,文本型,长度为13,输入掩码属性定义为9000-90000000;0;# 教师表(教师编号、系部编号、姓名、性别、职称) 说明: 教师编号,数字类型,长度为4,主键,必填字段 系部编号,数字类型,整型,不允许为空 姓名,文本类型,长度20,不允许为空 性别,文本类型,长度2,默认为男,不允许为空 职称,文本类型,长度8 系部表(系部编号、系部名称、负责人、联系电话) 说明: 系部编号,数字类型,整型 系部名称,文本类型,50,不允许为空 负责人,文本类型,50 联系电话,文本类型,长度11 操作要求: ①立表结构后,立即输入6个记录的数据。 ②分别查看该表的结构和记录。 ③修改开课计划表的时间为,日月均以2位数字显示 ④建立相关表的关连关系 ⑤建立各种查询 查询1:点击工具栏∑,选择计数 查询2:右击“条件”,选“生成器”,“操作符”,“比较”,“between” 查询3:第3章查询【本章主要掌握内容】查询的基本概念查询的功能与分类查询的创建与设计SQL查询第一节查询的概述在设计数据库时,常常把数据分类,并分别存放在多个表中,但在使用时需要检索一个或多个表中符合条件的数据。查询实际上就是将这些分散的数据再集中起来。学生表成绩表课程表查询结果 xh xm xb 1001 张三 男 …… …… …… xh kcdh cj 1001 01 85 …… …… …… kcdh kcmc 01 数据库应用 …… …… xm kcmc cj 张三 数据库应用 85 …… …… ……一、查询的概念查询是根据一定的条件,从一个或多个表中提取数据并进行加工处理,返回一个新的数据集合。利用查询可以实现数据的统计分析与计算等操作。查询结果可以作为其他查询、窗体、报表的数据源。查询是一张“虚表”,是动态的数据集合。查询主要有以下几个方面的功能1)选择字段和记录选择字段:在查询的结果中可以只含有表中的部分字段。选择记录:在查询的结果中,只含有符合指定条件的记录。2)编辑记录即利用查询添加、修改和删除表中的记录。3)统计和计算即在查询中进行各种统计计算,也可以建立一个计算字段来保存计算的结果。4)建立新表利用查询的结果创建一个新表。5)为其他数据库对象提供数据源即以查询的结果作为查询、窗体或报表的数据源。二、查询的种类在Access2010中,可以创建5种类型的查询:1、选择查询是根据指定的条件,从一个或多个表中获取数据并显示结果。选择查询可以对记录进行分组,并且对分组的记录进行求和、计数、求平均值以及其它类型的计算。选择查询产生的结果是一个动态的记录集,不会改变源数据表中的数据。2、交叉表查询交叉表查询是对基表或查询中的数据进行计算和重构,以方便分析数据。能够汇总数字型字段的值,将汇总计算的结果显示在行与列交叉的单元格中。3、参数查询是一种特殊的选择查询,即根据用户输入的参数作为查询的条件。输入不同的参数,将得到不同的结果。执行参数查询时,将会显示一个对话框,以提示输入参数信息。参数查询可作为窗体和报表的基础。4、操作查询查询除了按指定的条件从数据源中检索记录外,还可以对检索的记录进行编辑操作。操作查询可以分为:删除查询从一个或多个表中删除一组符合条件的记录。更新查询对一个或多个表中的一组符合条件的记录进行批量修改某字段的值。追加查询将一个或多个表中的一组符合条件的记录添加到另一个表的末尾。生成表查询将查询的结果转存为新表。5、SQL查询SQL(StructuredQueryLanguage)是一种结构化查询语言,是数据库操作的工业化语言,使用SQL语言可以对任何数据库管理系统进行操作。所谓的SQL查询就是通过SQL语言来创建的查询。在查询设计视图中创建任何一个查询时,系统都将在后台构建等效的SQL语句。大多数查询功能也都可以直接使用SQL语句来实现。有一些无法在查询设计视图中创建的SQL查询称为“SQL特定查询”。SQL特定查询包括:联合查询联合查询是将多个表或查询中的字段合并到查询结果的一个字段中。使用联合查询可以合并多个表中的数据,并可以根据联合查询生成一个新表。传递查询传递查询可以直接将命令发送到ODBC数据库服务器中,而不需要事先建立链接。利用传递查询可以直接使用其它数据库管理系统中的表。数据定义查询利用数据定义查询可以创建、删除或更改表,或者在数据库表中创建索引。子查询是包含在另一个查询之内的SQL-SELECT语句,即嵌套在查询中的查询。几点说明:创建传递查询、数据定义查询和联合查询不能在设计视图中创建,必须直接在SQL视图中输入相应的SQL语句。创建子查询可以直接在SQL视图中输入相应的SQL语句,或在设计视图的【字段】或【条件】行中输入SQL语句,即将子查询作为查询的条件。选择查询参数查询交叉表查询操作查询SQL查询查询类型☆删除查询 ☆更新查询☆追加查询☆生成表查询☆联合查询 ☆传递查询☆数据定义查询☆子查询三、查询视图查询有5种视图,分别是:设计视图数据表视图SQL视图数据透视表视图数据透视图视图设计视图即为查询设计器,通过该视图可能创建除SQL之外的各种类型的查询。数据表视图是查询的数据浏览器,用于查看查询运行的结果。SQL视图是查看和编辑SQL语句的窗口,用于查看和编辑用查询设计器创建的查询所产生的SQL语句。数据透视表视图和数据图视图在此两种视图中,可以根据需要生成数据透视表或数据透视图,从而得到直观的数据分析结果。四、创建查询的方法(界面方法)创建查询(界面方法)有2种方法:使用查询设计视图创建查询使用查询向导创建查询1、使用查询设计视图创建查询使用查询设计视图创建查询首先要打开查询的设计视图窗口,然后根据需要进行查询的定义。★操作步骤:①打开数据库②在【创建】选项卡的【查询】组中单击【查询设计】按钮,打开查询设计器窗口③在查询设计器窗口中定义查询④保存查询查询的设计视图分为上下两部分:上半部分用于显示查询的数据源(包括它们之间的关系)下半部分是定义查询的表格,表格的列对应查询中的一个字段;行对应字段的属性或要求。☆字段 查询结果中所显示的字段☆表 查询数据源,即字段的来源☆排序 查询结果中相应字段的排序方式☆显示 设置在数据表视图中是否显示该字段☆条件 查询条件(同行之间为“与”关系)☆或 查询条件(不同行之间为“或”关系)【例1】①创建一个查询,要求能够显示“教师表”中所有记录的“姓名”、“性别”、“出生日期”、“工作日期”和“毕业学校”;(教师表)②在上述查询的基础上,对记录进行排序,要求:按毕业学校降序排序;毕业学校相同的按出生日期的先后顺序排序;③只显示上述查询中已退休的女教师(按60岁退休)和毕业学校为南京大学的教师。在查询的设计视图中,可以为显示的信息指定标题、调整字段的宽度和改变显示顺序的操作2、使用查询向导创建查询Access2010提供了4种类型的查询向导:简单查询向导交叉表查询向导查找重复项查询向导查找不匹配项查询向导(1)创建基于单个数据源的查询【例2】利用查询向导创建一个查询,要求能够显示“教师”中每个院系教师的工资总额、平均工资、最高工资和最低工资。(教师)★操作步骤:①在【创建】选项卡的【查询】组中单击【查询向导】按钮,打开【新建查询】窗口②在【新建查询】窗口中选择需要创建查询向导③根据系统的引导选择参数或输入相应的信息选择数据源(表或查询)及字段选择明细查询或汇总查询明细查询:显示每条记录的每个字段汇总查询:对数值字段进行汇总统计④保存查询【例3】利用查询向导创建一个查询,要求能够显示教师表中所有记录的“姓名”、“性别”、“出生日期”、“工作日期”和“毕业学校”。(教师表)★操作步骤:①在【创建】选项卡的【查询】组中单击【查询向导】按钮,打开【新建查询】窗口②在【新建查询】窗口中选择需要创建查询向导③根据系统的引导选择参数或输入相应的信息选择数据源(表或查询)及字段④保存查询(2)创建基于多个数据源的查询【例4】查找每名学生的选课成绩,并且显示“学号”、“姓名”、“课程名称”和“成绩”4个字段。(学生表、课程表和成绩表)★分析:这是一个涉及多个数据源的查询成绩来自于cj表学号和姓名来自于xs表,且通过xh字段与cj表相关联课程名称来自于kc表,且通过kcdm字段与cj表相关联使用查询向导创建查询几点说明:不能对记录进行筛选和排序不能改变查询中字段的顺序允许对数值字段进行汇总统计允许按指定日期范围分组汇总汇总查询必须包含且只能包含汇总统计的数值型字段和用于汇总依据的分组字段。其它字段的添加将无法得到期望的汇总效果五、运行查询查询创建完成后,将保存于数据库中。运行查询后,才能看到查询的结果。通过以下方法之一,可以运行查询:▲在查询的设计视图下,单击【查询工具/设计】选项卡【结果】组中的【运行】按钮▲在查询的设计视图下,单击【查询工具/设计】选项卡【结果】组中的【视图】按钮▲右击查询的设计视图标题栏,并在快捷菜单中选择【数据表视图】命令▲双击导航窗口中要运行的查询▲右击导航窗口中要运行的查询,并在快捷菜单中选择【打开】命令第二节选择查询选择查询是最常用的查询类型,它是根据用户所指定的查询条件,从一个或多个数据源表中获取数据并显示结果。选择查询可以对记录进行分组,并进行各种统计,如:求和、计数、求平均值等。选择查询产生的结果是一个动态的记录集,不会改变数据源中的数据。一、基于单数据源表的查询设计单数据源表查询时,主要的操作是:确定查询的数据源(表或已建立的查询)确定查询中要显示的字段或表达式【例5】查看学生表中所有学生的信息,要求显示表中所有字段。(学生表)★操作步骤:①打开查询的设计视图②在打开窗口的上半部添加数据源表③在打开窗口的下半部添加查询中要显示的字段④保存已创建的查询▲表中的“*”表示所有字段。▲可以在下部窗格中添加或删除字段。▲鼠标拖动下部窗格中的字段,可以改变字段的显示位置。SELECT学生表.*FROM学生表SELECT学生表.xh,学生表.xm,学生表.xb,学生表.csrqFROM学生表【例6】查询全校教师的基本工资情况。要求输出教师的工号、姓名、院系名称和基本工资。按院系名称升序排序,同一个系的教师按基本工资的降序排序。(教师)★操作步骤:●打开查询设计视图●选择数据源●在设计表格中设置字段、表、排序、条件等SELECT教师.工号,教师.姓名,教师.院系名称,教师.基本工资FROM教师ORDERBY教师.院系名称,教师.基本工资DESC;【例7】查询学生每门课程成绩情况,要求输出姓名、课程名称和成绩。(学生表、成绩表和课程表)【分析】①姓名存储于学生表中②课程名称储存于课程表中③成绩存储于成绩表中因此本查询的数据源涉及三张表:学生表、课程表和成绩表二、基于多数据源表的查询SELECT学生表.XM,课程表.KCMC,成绩表.CJFROM学生表INNERJOIN(课程表INNERJOIN成绩表ON课程表.KCDM=成绩表.KCDM)ON学生表.XH=成绩表.XH;如果查询的数据源是两个或两个以上的表(或查询),则在设计查询时需要创建数据源之间的连接关系。如果相关联的表已经按照公共字段创建了索引,则在查询视图中可以看到作为数据源的表(或查询)之间已经通过相关字段建立了连接。如果相关联的表未按照公共字段创建索引,则需要在相关表之间建立连接。Access有3种连接类型:内连接左连接右连接内连接(INNERJOIN)只包含来自两张表的联接字段相等的记录。Xs.xh=Cj.xh左连接(LEFTJOIN)包括左表中所有记录和右表中联接字段相等的记录。Xs.xh=Cj.xh右连接包括右表中所有记录和左表中联接字段相等的记录。Xs.xh=Cj.xh注意:如果进行多表查询时,所使用的表或查询之间没有建立连接关系,则查询将以笛卡尔积的形式,即左表中的每一条记录均与右表所有记录合并,形成一条记录。也就是说,会在查询结果中产生大量的数据,而这样的结果是没有任何意义的。双击表的关系连线可以编辑表之间的联接属性,包括:联接的字段和连接的类型。内连接左连接右连接☆只包括两个表中联接字段相等的行(内连接,系统的默认选择)(以学生表和成绩表为例查看不同联接类型的效果)SELECT学生表.XH,学生表.XM,成绩表.KCDM,成绩表.CJFROM学生表INNERJOIN成绩表ON学生表.XH=成绩表.XH;☆包括左表中的所有记录和右表中联接字段相等的那些记录(左连接)SELECT学生表.XH,学生表.XM,成绩表.KCDM,成绩表.CJFROM学生表LEFTJOIN成绩表ON学生表.XH=成绩表.XH;☆包括右表中的所有记录和左表中联接字段相等的那些记录(右连接)SELECT学生表.XH,学生表.XM,成绩表.KCDM,成绩表.CJFROM学生表RIGHTJOIN成绩表ON学生表.XH=成绩表.XH;三、条件查询在实际的查询中,经常需要查询满足某个条件的记录。带条件的查询需要通过设置查询条件来实现。查询条件是运算符、常量、字段值、函数以及字段名和属性等任意组合的关系表达式,其运算结果是一个逻辑值。(1)运算符算术运算符【例】125+100/5^26*2/(2+1)单价*0.8 算术运算符 说明 算术运算符 说明 + 加 / 除 - 减 ^ 乘方 * 乘关系运算符☆关系运算符主要用于数据之间的比较,其运算的结果是一个逻辑值:True或False。☆各关系运算符的运算级别相同。【例】3>8 xb="男"5+2<=5*2 xm>="张"工作日期<出生日期 关系运算符 说明 关系运算符 说明 = 等于 <> 不等于 < 小于 <= 小于等于 > 大于 >= 大于等于逻辑运算符☆逻辑运算符主要用于多个条件的判断,其运算结果仍然是一个逻辑值。☆逻辑运算符运算级别依次为:Not、And、Or 逻辑运算符 说明 Not 当Not连接的表达式为真时,整个表达式的值为假 And 当And连接的表达式均为真时,整个表达式的值为真,否则为假 Or 当Or连接的表达式均为假时,整个表达式的值为假,否则为真逻辑运算符的真值表如下所示:TrueTrueTrueFalseFalseTrueFalseFalseFalseTrueTrueFalseFalseTrueTrueFalseTrueTrueFalseFalse X Y NotX XAndY XOrY特殊运算符特殊运算符与比较运算相关,也是根据是否符合运算符的限定条件返回逻辑值True或False。 特殊运算符 说明 In 用于指定一个字段值的列表,列表中的任意一个值都可与查询的字段相匹配 Between 用于指定一个字段值的范围。指定的范围之间用And连接 Like 用于指定查找文本字段的字符模式。在所定义的字符模式中,可以使用统配符“?”、“*”、“#”、“[]” IsNull 用于指定一个字段为空 IsNotNull 用于指定一个字段为非空几点说明:☆所谓的Null是指该字段中没有输入任何值。☆当在文本字段中输入了空字符串后,表中也无任何显示,但该字段并不是Null值。☆Access提供的通配符有:? 表示任意一个字符* 表示任意多个字符# 表示任意一个数字位[字符表] 表示在字符表中的单一字符[!字符表] 表示不在字符表中的单一字符方括号内字符表中的各个字符间用“,”隔开字符表可以设置一个范围,用连字符“-”分隔范围的下界和上界。如:[1-5]、[!a-d]字符串运算符字符串运算符具有连接字符串的功能。 字符串运算符 说明 + 两边的操作数必须都是字符型 & 两边的操作数可以是字符型或数值型在进行连接操作前先进行操作数类型的转换,即转换为字符型【例】"ABC"+"123""ABC"&123.4#2011-10-01#&12"123"+50.4"ABC"+123.4#2011-10-01#+20100+200100&200ABC123ABC123.42011-10-0112173.4出错2011-10-21300100200在各类运算符混合运算的表达式中,各运算符的运算级别有高低之分:字符串运算符关系运算符【例】NOT5>12/6AND"A"+"B"<"A"+"C"NOT5>2AND"AB"<"AC"NOT.T.AND.T..F.AND.T..F.数值运算符逻辑运算符【例】用文字表示使以下条件表达式为“真”的条件:学生表中:①性别=-1And系名="信息工程学院"信息工程学院中所有的男生②性别=-1Or系名="信息工程学院"所有的男生以及信息工程学院中所有的学生教师表中:③性别=0And职称="教授"Or民族<>"汉族"女性教授以及非汉族教师④性别=0And(职称="教授"Or民族<>"汉族")女性教授以及女性非汉族教师(2)条件查询举例在查询的设计视图中,查询条件应使用查询定义窗口中的条件选项来设置,即在相应的字段的【条件】文本框中输入条件。▲条件表达式中通常省略字段名。▲有多个条件,且涉及不同的字段时,则分别设置相应字段的条件。▲同行的条件之间是“与”关系;不同行的条件之间是“或”关系【例8】查找每名学生“体育”课程的成绩,要求显示“学号”、“姓名”、“课程名称”和“成绩”4个字段。SELECT学生表.XH,学生表.XM,课程表.KCMC,成绩表.CJFROM(学生表INNERJOIN成绩表ON学生表.XH=成绩表.XH)INNERJOIN课程表ON成绩表.KCDM=课程表.KCDMWHERE(((课程表.KCMC)="体育"));说明:WHERE子句 用于指定查询的条件【例9】查找成绩在70至95分之间(含70和95分)的女生,以及成绩大于等于80分的男生。要求显示“姓名”、“性别”、“课程名称”、“成绩”4个字段并按性别升序、成绩降序排序。SELECT学生表.XM,学生表.XB,课程表.KCMC,成绩表.CJFROM(学生表INNERJOIN成绩表ON学生表.XH=成绩表.XH)INNERJOIN课程表ON成绩表.KCDM=课程表.KCDMWHERE(((学生表.XB)="女")AND((成绩表.CJ)>=70And(成绩表.CJ)<=95))OR(((学生表.XB)="男")AND((成绩表.CJ)>=80))ORDERBY学生表.XB,成绩表.CJDESC;ORDERBY子句指定查询结果的排序依据DESC 降序排序ASC 升序排序(默认排序)【例10】查找没有选课学生的课程名称。要求输出:课程代码和课程名称。【分析】①没有选课学生的课程,即意味着,该门课程在成绩表中没有记录。②因此,必须kc表和cj表连接时采用左连接类型。SELECT课程表.KCDM,课程表.KCMC,成绩表.CJFROM课程表LEFTJOIN成绩表ON课程表.KCDM=成绩表.KCDMWHERE(((成绩表.CJ)IsNull));【例11】查找成绩表中成绩最高的10名学生。要求输出:姓名、学号、课程名称和成绩。【分析】即:将成绩按降序排序,且只显示前10条记录。SELECTTOP10学生表.XH,学生表.XM,课程表.KCMC,成绩表.CJFROM(学生表INNERJOIN成绩表ON学生表.XH=成绩表.XH)INNERJOIN课程表ON成绩表.KCDM=课程表.KCDMORDERBY成绩表.CJDESC;【例12】查找有补考学生的课程代码和课程名称(相同课程只显示一次)。【分析】即:该门课程的成绩有小于60分的记录。SELECTDISTINCTROW课程表.KCDM,课程表.KCMCFROM课程表INNERJOIN成绩表ON课程表.KCDM=成绩表.KCDMWHERE(((成绩表.CJ)<60));四、查询中的计算和统计在设计查询时,不仅可以进行条件的设置,还可以进行计算和分类汇总(计数、求和、求平均值等)。(1)表达式表达式是用运算符、常量、字段值、函数以及字段名和属性等连接起来的一个式子。系统提供了算术运算、关系运算、字符运算和逻辑运算等4种基本运算表达式。(2)系统函数函数是一个预先定义(系统预先定义或用户自定义)的程序模块。标准函数(系统预定义)自定义函数(用户自定义)系统提供的标准函数包括:数值函数、字符函数、日期时间函数和聚合函数等。求和函数格式:Sum(<字符串表达式>)功能:返回字段中值的总和返回值数据类型:数值型说明:字符串表达式可以是一个字段名,也可以是一个含字段名的表达式,但所含的字段必须是数值型字段。【例】Sum(Cj.cj)Sum(单价*数量)Sum((单价-进价)*数量)聚合函数求平均函数格式:Avg(<字符串表达式>)功能:返回字段中值的平均值返回值数据类型:数值型说明:☆字符串表达式可以是一个字段名,也可以是一个含字段名的表达式,但所含的字段必须是数值型字段。☆Avg函数不计算任何Null值字段【例】Avg(Cj.cj)Avg(单价)Avg(应发工资-扣款)统计记录个数函数格式:Count(<字符串表达式>)功能:统计记录个数返回值数据类型:数值型说明:☆字符串表达式可以是一个字段名,也可以是一个含字段名的表达式(该字段不一定是数值型)。☆使用格式Count(<字符串表达式>)时,系统将统计指定字段值不为Null值的记录的个数;而使用格式Count(*)时,系统将统计所有记录的个数,包括含Null值字段的所有记录个数。【例】Sum(Cj.cj)/Count(Cj.cj)单价*Count(单价)最大、最小值函数格式:Max(<字符表达式>)Min(<字符表达式>)功能:返回一组指定字段中的最大、最小值说明:字符表达式可以是一个字段名,也可以是一个含字段名的表达式,(该字段并不一定是数值型)。【例】Max(Cj.cj)Min(出生日期)(3)查询中的计算功能举例▲预定义计算利用设计视图网格的【总计】行进行各种统计▲自定义计算创建计算字段进行任意类型的计算当需要统计的数据在表中没有相应的字段,或者用于计算的数据值来源于多个字段时,应在查询中使用计算字段。计算字段是指根据一个或多个字段使用表达式建立的新字段(查询中的显示字段)。创建计算字段是在查询设计视图的【字段】行中直接输入计算表达式。【例13】统计各门课程的成绩。要求输出“课程名称”、“总分”、“平均分”、“最高分”和“最低分”。【分析】本题输出的字段中含有4个统计字段,因此将利用设计视图网格的中【总计】行进行统计。【总计】行的打开方式:单击【查询工具/设计】选项卡【显示/隐藏】组中的【汇总】按钮。▲预定义计算【总计】下拉列表框中含以下各选项:合计平均值最小值最大值计数Var(方差)StDev(标准差)(方差的平方根就是标准差)GroupBy 定义要执行计算的组First 求在表或查询中第一条记录的 字段值Last 求在表或查询中最后一条记录 的字段值Expression 在字段中自定义计算公式Where 指定用于分组的字段的条件【例13】统计各门课程的平均分。要求输出“课程名称”、“平均分”、“最高分”和“最低分”。可以为显示的各个字段分别设置其属性。SELECT课程表.KCMC,Sum(成绩表.CJ)AS总分,Avg(成绩表.CJ)AS平均分,Min(成绩表.CJ)AS最低分,Max(成绩表.CJ)AS最高分FROM课程表INNERJOIN成绩表ON课程表.KCDM=成绩表.KCDMGROUPBY课程表.KCMC;当查询的输出字段含有聚合函数时,通常情况下应设置分组字段。所谓分组字段即为:进行数据统计时的分组依据。当查询中含有统计字段,而某一字段既不是统计字段,也不是分组字段,其值是无意义的。【总计】行设为【Where】的字段不能出现在查询的结果中。【例14】查询数学系平均成绩在75分以上,且各门课程的成绩不得低于60分的学生的学号、姓名、平均分和最低分,并按照平均分从高到低排列(平均分精确到1位小数)。SELECT学生表.XH,学生表.XM,Avg(成绩表.CJ)AS平均分,Min(成绩表.CJ)AS最低分FROM院系代码表INNERJOIN(学生表INNERJOIN成绩表ON学生表.XH=成绩表.XH)ON院系代码表.YXZYDM=学生表.YXZYDMWHERE(((院系代码表.YXMC)="数学系"))GROUPBY学生表.XH,学生表.XMHAVING(((Avg(成绩表.CJ))>75)AND((Min(成绩表.CJ))>60))ORDERBYAvg(成绩表.CJ)DESC;WHERE与HAVING的区别:▲WHERE子句是从数据源中提取数据时,对记录的筛选。▲HAVING子句必须位于GROUPBY子句之后,是对统计结果的筛选。▲HAVING子句中通常应该含有聚合函数,否则应该使用WHERE子句。▲自定义计算在设计视图中创建新的计算字段,并将表达式输入到字段行中,表达式可以由多个计算组成。【例15】统计学生表中不同姓氏的学生的人数,输出字段为:姓氏和人数,并且按人数降序排序。(假设姓氏为姓名的第1个汉字)。【分析】本题中分组依据为姓氏的第1个字,并且作为输出的字段。为此需要创建一个新的计算字段,该字段使用了字符串截取函数Left()。▲Left()函数格式:Left(String,Length)功能:从字符表达式String左侧的第一个字符开始,截取由Length的值所指定的若干个字符返回值数据类型:字符型说明:☆String为被截取的字符串,当其值为Null时,则返回Null值。☆Length为返回的字符数。其值必须为正,若Length的值为小数,则四舍五入至整数值后即为返回的字符个数;若Length的值为负数,则出错。☆Length的值为0时,则返回空字符串;Length的值大于String的长度时,则返回全部字符。字符串截取函数▲Right()函数格式:Right(String,Length)功能:从字符表达式String右侧的第一个字符开始,截取由Length的值所指定的若干个字符返回值数据类型:字符型字符串截取函数▲Mid()函数格式:Mid(String,Start[,Length])功能:从字符表达式String返回一个子字符串返回值数据类型:字符型说明:☆Start为长整型,用于指定所取的字符串在String中的开始位置;☆Length为长整型,指定要返回的字符个数,缺省时指所取字符串直至String的最后一个字符;☆Start的值大于指定字符串的长度,则返回一个空字符串;Start的值为0或负数,则均出错;☆Length的值大于所能取的字符数目,则取至最后一个字符。字符串截取函数【例】Left("ABCD中国",8-5) ABCLeft("ABCD中国",0) (空字符串)Left("ABCD中国",8) ABCD中国Right("ABCD中国",4) CD中国Right("ABCD中国",2.4) 中国字符串截取函数【例】Mid("ABCD中国",3,8) CD中国Mid("ABCD中国",12,2) (空字符串)Mid("ABCD中国",0,4) 出错Mid("ABCD中国",3,-1) 出错字符串截取函数【例15】统计学生表中不同姓氏的学生的人数,输出字段为:姓氏和人数,并且按人数降序排序。(假设姓氏为姓名的第1个汉字)。SELECTLeft([xm],1)AS姓氏,Count(学生表.XH)AS人数FROM学生表GROUPBYLeft([xm],1)ORDERBYCount(学生表.XH)DESC;【例16】统计学生表中“王”姓和“李”姓的学生人数,输出字段为:姓氏和人数,并按姓氏升序排序。SELECTLeft([xm],1)AS姓氏,Count(学生表.XH)AS人数FROM学生表GROUPBYLeft([xm],1)HAVING(((Left([xm],1))="王"))OR(((Left([xm],1))="张"))ORDERBYLeft([xm],1);【例17】统计学生表中不同年龄的学生人数。输出时按年龄升序排序。【分析】年龄计算方法:当前的年份–出生日期的年份因此在创建的计算字段,需要使用相关的日期函数。截取日期分量函数格式: Year(Date) Month(Date) Day(Date)功能:分别返回日期表达式年份、月份和日期的整数。返回值数据类型:整型说明:☆Date为任何能够表示日期的表达式(日期或字符表达式等)。☆参数中若略去年份,则返回系统日期的年份。☆参数中若含有Null值,则返回Null。相类似的函数有:Hour()函数、Minute()函数和Second()函数。日期函数【例】Year(#2011-10-01#) 2011Year(Null) NullYear("Oct,15") (系统日期的年份)Month("2012-09-20") 9Day(3-2) 31Access将1899年12月31日作为数值1。日期函数获取系统日期/时间函数格式: Date() Time() Now()功能:分别返回当前系统日期、当前系统时间和当前系统日期和时间。返回值数据类型:日期型返回的日期格式由操作系统设置的日期格式决定。日期函数*【例17】统计学生表中不同年龄的学生人数。输出时按年龄升序排序。SELECTYear(Date())-Year([csrq])AS年龄,Count(学生表.XH)AS人数FROM学生表GROUPBYYear(Date())-Year([csrq])ORDERBYYear(Date())-Year([csrq]);【例18】统计各院系女生人数及所占比例。要求输出:院系名称、女生人数、女生比例;输出时按女生比例降序排序,比例相同时则按院系名称升序排序(女生比例保留1位小数)。【分析】由于需要统计女生所占的比例,因此不能用Where子句进行性别筛选。本题需要用到一个条件函数IIf()。▲IIf()函数格式:IIF(Expression,Truepart,Falsepart)功能:根据Expression的值,返回Truepart和Falsepart两个值中的一个。说明:当逻辑表达式Expression的值为真时,返回Truepart的值,否则返回Falsepart的值。【例】根据成绩输出相应的分数等级:不及格、及格和优秀。IIf(cj.cj>=90,"优秀",_ IIf(cj.cj<60,"不及格","及格"))【例18】统计各院系女生人数及所占比例。要求输出:院系名称、女生人数、女生比例;输出时按女生比例降序排序,比例相同时则按院系名称升序排序(女生比例保留1位小数)。SELECT院系代码表.YXMC,Sum(IIf([xb]="女",1,0))AS女生人数,Sum(IIf([xb]="女",1,0))/Count([xh])AS女生所占比例FROM院系代码表INNERJOIN学生表ON院系代码表.YXZYDM=学生表.YXZYDMGROUPBY院系代码表.YXMCORDERBYSum(IIf([xb]="女",1,0))/Count([xh])DESC,院系代码表.YXMC;第三节交叉表查询交叉表查询是以行和列的字段作为标题和条件选取数据,并在行与列的交叉处对数据进行汇总和统计计算。设计交叉表查询需要字义3种字段:处于数据表最左端的行标题字段把某一字段或相关数据放入指定的一行中。处于数据表最上边的列标题字段对每一列指定的字段进行统计,并将统计结果放在该列。处于行和列交叉位置的值字段可以为该字段指定总计项。在交叉表查询中:只能指定一个列字段和一个总计类型的字段。可以通过设置一个或多个行标题,创建多级交叉表查询。一、使用向导创建交叉表查询【例19】基于xsb表创建一个交叉表查询,要求统计各班的男女生人数。★操作步骤:①单击【创建】选项卡【查询】组中的【查询向导】按钮,并在对话框中选择【交叉表查询向导】②按向导提示依次确定数据源、行字段、列字段、汇总项及是否包括各行小计③为查询命名并保存所设计的查询交叉表查询向导的数据源只能来自于一张表或查询。若来自多个表,可先建立一个查询,而后以此查询作为数据源使用向导创建,或者直接在设计视图下创建。行标题最多3个,列标题1个,值字段1个。TRANSFORMCount(xsb.[XH])ASXH之计数SELECTxsb.[BJBH]FROMxsbGROUPBYxsb.[BJBH]PIVOTxsb.[XB];二、在设计视图下创建交叉表查询使用设计视图可创建基于多表的交叉表查询。【例20】以交叉表的形式查询每个学生的各门课程成绩及平均分。要求:输出时平均分保留一位小数。在查询的设计视图下,单击【查询工具/设计】选项卡【查询类型】组中【交叉表】按钮,可以在设计网格中增加【交叉表】行。。★操作步骤:①打开查询设计视图,并添加数据源及显示字段②单击【查询工具/设计】选项卡【查询类型】组中【交叉表】按钮,使查询类型为交叉表查询③在【交叉表】行上设置:行字段、列字段④在【交叉表】行上设置:值字段(将该字段的【总计】行改为:第一条记录)⑤添加汇总字段并设置汇总函数(将该字段的【交叉表】行设置为:行标题)行标题列标题值*TRANSFORMFirst(成绩表.CJ)ASCJ之FirstSELECT学生表.XM,Avg(成绩表.CJ)AS平均分FROM(学生表INNERJOIN成绩表ON学生表.XH=成绩表.XH)INNERJOIN课程表ON成绩表.KCDM=课程表.KCDMGROUPBY学生表.XMPIVOT课程表.KCMC;如果在【交叉表】行中,设置某个字段的选项为:“值”,则在【总计】行中可以有多种选择。如果获取的是单一数据,则应该选择“First”或“Last”。ORDERBY子句中不能含有聚合函数。创建交叉表查询时,使用交叉表查询向导和设计视图的比较:☆数据源来自于一个表或查询时,使用交叉表查询向导创建;☆数据源来自于多个表或查询时,使用设计视图创建;☆如果【行标题】或【列标题】需要建立新字段得到,则使用设计视图创建。第四节参数查询所谓参数查询是在运行查询的过程中,系统提示用户输入参数,并根据参数的值来检索符合条件的记录。在Access中,可以建立单参数查询,也可以建立多参数查询。参数查询是一个特殊的选择查询,具有较大的灵活性,常作为窗体、报表的数据源。一、单参数查询【例21】设计一个能够查询指定课程代码的学生成绩查询,要求输出:学号、姓名、课程代码、课程名称、成绩。(运行时课程代码分别取:60001、60011)★操作步骤:①打开查询的设计视图②添加数据源③设置显示字段④在作为参数字段的【条件】行上输入提示文本(注:提示文本需要用方括号括起来)SELECT学生表.XH,学生表.XM,课程表.KCMC,课程表.KCDM,成绩表.CJFROM学生表INNERJOIN(课程表INNERJOIN成绩表ON课程表.KCDM=成绩表.KCDM)ON学生表.XH=成绩表.XHWHERE课程表.KCDM=[请输入需要查询的课程代码:];二、多参数查询【例22】设计一个能够查询指定课程代码、指定班级编号的学生成绩查询,要求输出:学号、姓名、班级编号、课程代码、课程名称、成绩。(运行时课程代码同上例,班级编号取:04020)SELECT学生表.XH,学生表.XM,成绩表.KCDM,课程表.KCMC,成绩表.CJFROM学生表INNERJOIN(课程表INNERJOIN成绩表ON课程表.KCDM=成绩表.KCDM)ON学生表.XH=成绩表.XHWHERE成绩表.KCDM=[请输入课程代码:]AND学生表.BJBH=[请输入班级编号:];【例23】查询指定省份学生的信息(jg字段的前两个字符为该学生所属省份)。输出字段为:省份、jg、xm、xb和yxmc,查询结果先按jg升序排列,jg相同时按xm降序排列。SELECTLeft([jg],2)AS省份,学生表.JG,学生表.XM,学生表.XB,院系代码表.ZYMCFROM院系代码表INNERJOIN学生表ON院系代码表.YXZYDM=学生表.YXZYDMWHERELeft([jg],2)=[请输入省份:]ORDERBY学生表.JG,学生表.XMDESC;【例24】查询指定城市(jg字段中的第3、4个字符)男女学生的人数,要求输出字段为:城市名、性别和人数。SELECTMid([jg],3,2)AS城市名,学生表.XB,Count(学生表.XB)AS人数FROM学生表GROUPBYMid([jg],3,2),学生表.XBHAVINGMid([jg],3,2)=[城市名:];第五节操作查询操作查询是在选择查询的基础上创建的,可以对表中符合符合条件的记录进行追加、修改、删除和生成新表操作。操作查询包括:追加查询更新查询删除查询生成表查询一、删除查询删除查询是从表中删除与查询结果中相对应的记录。★操作步骤:①打开查询的设计视图②添加数据源③更改查询的类型为删除查询④设置删除的条件查询运行后将从原表中永久删除指定的记录,且无法恢复!为避免误删除,可以先预览查询的结果或对原数据表进行备份。删除查询删除的是整个记录,而不是指定的字段或字段中的数据。【例25】将“成绩表”表中成绩小于60分的记录删除。(成绩表)DELETE成绩表.*,成绩表.CJFROM成绩表WHERE成绩表.CJ<60;【例26】从cj表中删除姓名为“史建平”的记录。【分析】此删除查询涉及两张表:学生表和成绩表。删除的是成绩表表中的记录;条件设置来自于学生表。若删除查询的数据源来自多表,则:删除的只能是子表中的记录;主表中的字段用于条件设置;与两表之间是否建立参照完整性规则无关。设计视图中的【删除】行:☆From 指定删除记录的表☆Where 指定删除的条件DELETE学生表.XM,成绩表.*FROM学生表INNERJOIN成绩表ON学生表.XH=成绩表.XHWHERE学生表.XM="史建平";二、更新查询更新查询是根据查询的结果,对一个或多个表中相关记录的字段值进行更新。更新查询的最大优势在于:用相同的表达式批量修改多条记录的字段值。★操作步骤:●打开查询的设计视图●添加数据源●选择查询类型●设置更新的字段、字段的值及更新的条件【例27】计算教师工资表中的住房补贴(应是基本工资和综合津贴之和的5%。(工资表)UPDATE工资表SET工资表.ZFBT=([工资表]![JBGZ]+[工资表]![ZHJT])*0.05;更新的字段可以是一个或多个。三、追加查询追加查询是把查询的结果添加到另一个表的末尾(查询的数据源可以是一个或多个表)。【例28】将学生表中“性别”为“男”的记录追加到学生ACCESS表中。(学生表)★操作步骤:①打开查询的设计视图,并添加数据源②更改查询类型及设置目标表③设置追加字段及追加条件目标表必须是已经存在的表。查询输出和目标表对应字段的字段名必须相同。查询输出和目标表对应字段的数据类型如果不相同,系统将先进行类型转换;如果不能进行类型转换,则将出错。INSERTINTO学生ACCESS(XH,XM,XB)SELECT学生表.XH,学生表.XM,学生表.XBFROM学生表WHERE学生表.XB="男";四、生成表查询生成表查询是对一个或多个表中的记录进行检索,将查询的结果创建新表。将成绩在90分以上学生的基本信息存储到90分以上的学生信息表中(多条相同记录只保存一条)。(学生表和成绩表)【例29】★操作步骤:①打开查询的设计视图②添加数据源③更改查询类型并命名新表的表名④选择新表中的字段及设置查询的条件切换到数据表视图可预览新建的表。运行查询后,才创建新表(创建新表前,系统将有提示)。SELECTDISTINCTROW学生表.*INTO90分以上的学生信息FROM学生表INNERJOIN成绩表ON学生表.XH=成绩表.XHWHERE成绩表.CJ=90;操作查询不仅选择表中数据,还对表中数据进行修改。因此,为了避免因误操作引起的不必要的改变,在数据库窗口中的每个操作查询图标之后显示一个感叹号,以引起注意。第六节使用向导创建查询一、查找重复项查询向导数据表中除设置为主键的字段不能有重复的值外,其它的各个字段均允许有重复的值。查找重复项查询即从表中查找具有相同字段值的记录。【例30】查找学生表中班级编号和民族代码均相同的记录。要求输出:xh、xm、bjbh和mzdm。★操作步骤:①打开查找重复项查询向导(创建新查询)②选择数据源③选取设为重复值的字段④可以选择另外查询的字段SELECT学生表.bjbh,学生表.MZDM,学生表.XH,学生表.XMFROM学生表WHERE(((学生表.bjbh)In(SELECT[bjbh]FROM[学生表]AsTmpGROUPBY[bjbh],[MZDM]HAVINGCount(*)>1And[MZDM]=[学生表].[MZDM])))ORDERBY学生表.bjbh,学生表.MZDM;二、查找不匹配项查询向导不匹配项查询就是在一个表中搜索另一个表中没有相关记录的行。【例31】查询没有选课的课程信息★操作步骤:①打开查找不匹配项查询向导(创建新查询)②选择参考表③选择不匹配表④选择两表的联接字段SELECT课程表.KCDM,课程表.KCMCFROM课程表LEFTJOIN成绩表ON课程表.[KCDM]=成绩表.[KCDM]WHERE成绩表.KCDMIsNull;第七节SQL查询SQL结构化查询语言是标准的关系型数据语言。查询的本质是一条SQL语句,即每个查询都对应着一条SQL查询命令。保存查询时,保存的是一条SQL语句,而不是查询的结果。创建查询,既可以在其设计视图中实现,也可以在其SQL视图中直接输入SQL语句实现。某些特殊的查询不能在设计视图中进行,只能通过SQL语句才能实现。SQL(结构化查询语言)是一种数据库查询语言,它的功能包括:☆数据定义☆数据查询☆数据操纵☆数据控制一、SQL语言的特点高度的综合高度非过程化交互式与嵌入式相结合语言简洁,易学易用二、SQL语言的数据定义功能SQL语言的数据定义功能包括定义表、定义视图、定义索引。即对表、视图和索引的创建、修改和删除。数据定义的CREATE语句是定义基本表的结构、定义视图和定义索引。 SQL语句 用途 CREATETABLE 创建表 ALTERTABLE 在已有表中添加新字段或约束 DROPTABLE 从数据库中删除表,或者从字段或字段组中删除索引 CREATEINDEX 为字段或字段组创建索引 DROPINDEX 删除指定索引1、定义基本表语法格式:CREATETABLE<表名>(<字段名1><数据类型>[<宽度>][<字段级约束条件>][,<字段名2><数据类型>[<宽度>][<字段级约束条件>]…][,CONSTRAINT<记录级约束条件>])功能:创建表的结构说明:字段名不能缺省;数据类型使用指定的英语单词;部分数据类型有其固定的长度,不需要设置。注意教材P150该命令的语法格式。CONSTRAINT子句用于设置记录级完整性约束条件。完整性约束条件有两类:☆字段级完整性约束条件☆记录级完整性约束条件 如果约束条件涉及到多个字段时,则必须用CONSTRAINT定义为记录级约束条件 如果单字段既可以定义为字段级约束条件,也可以使用CONSTRAINT定义为记录级约束条件。完整性约束是定义相关字段间的约束条件。约束条件有以下几种设置:☆NotNull 字段不能为空值。☆PrimaryKey 设置主键。设置单个字段为主 键时,应该将该字设置为字段 级约束条件。☆Unique 创建唯一索引。语法格式:CONSTRAINT索引名PrimaryKey(主键字段1[,主键字段2,…])|索引名Unique(索引字段1[,索引字段2,…])注意:单字段可以放在字段后,不需要CONSTRAINT【例】创建xs表,结构如下表所示: 字段名 数据类型 字段宽度 空值支持 xh 文本型 10 主键 xm 文本型 8 否 xb 是否型 是 csrq 日期时间 是 zp OLE对象型 是 jl 备注型 是CREATETABLExs(xhChar(10)PrimaryKey,xmChar(8)NotNull,xbLogical,csrqDate,zpGeneral,jlMemo)【例】创建cj表,结构如下表所示:并将xh+kcdm设置为主键,索引名为xhkcdm。CREATETABLEcj(xhString(10),kcdmChar(6),cjSmallIntNotNull,CONSTRAINTxhkcdmPrimaryKey(xh,kcdm)) 字段名 数据类型 字段宽度 空值支持 xh 文本型 10 kcdm 文本型 6 cj 整型 否【例】创建ts表,结构如下表所示:并将isbn+gch设置为唯一索引,索引标识abc 字段名 数据类型 字段宽度 空值支持 ID 自动编号 isbn 文本型 20 sm 文本型 20 否 rkrq 日期型 dj 单精度型 gch 文本型 15CREATETABLEts(IDCounter,isbnChar(20),smString(20),rkrqDate,cbsString(20),djSingle,gchChar(15),CONSTRAINTabcUnique(isbn,gch))2、修改基本表ALTERTABLE用于修改已经建立的表的结构。修改基本表的结构包括:增加字段和字段级完整性约束条件、修改原有字段的定义、删除原有的字段和完整性约束条件等。语法格式一:(增加字段)ALTERTABLE<表名>ADD<新字段名><数据类型>[<大小>][<约束条件>][,……]功能:增加字段或索引【例】在xs表中增加一个字段,字段名:byxx数据类型:文本型字段大小:20。ALTERTABLExsADDbyxxChar(20)【例】在ts表中增加一个由字段isbn和gch组成的唯一索引,索引名:isbngch。ALTERTABLEtsADDCONSTRAINTisbngchUNIQUE(isbn,gch)语法格式二:(删除字段或删除索引)ALTERTABLE<表名>DROP[<字段名>[,……]][CONSTRAINT<索引名称>]功能:删除字段或索引【例】删除xs表中的byxx和rxrq字段。ALTERTABLExsDROPbyxx,rxrq【例】删除ts表中的唯一索引isbngch。ALTERTABLEtsDROPCONSTRAINTisbngch语法格式三:(修改字段)ALTERTABLE<表名>ALTER<字段名><数据类型>[<大小>]功能:修改字段的数据类型、大小和约束条件。使用ALTER语句对表的结构进行修改时,一次只能修改一个字段。思考:如何对字段重命名?【例】将xs表中xb字段的数据类型修改为字符型且只含一个字符。ALTERTABLExsALTERxbChar(1)【例】将ts表中isbn字段的数据类型修改为可含20个字符的文本型,且字段不支持空值、是表的主键。ALTERTABLEtsALTERisbnChar(20)NotNullPrimaryKey3、删除表删除表使用DROPTABLE语句。语法格式:DROPTABLE<表名>功能:删除指定的表说明:基本表一旦删除,表中的数据、索引都将自动被删除,而建立在此表上的查询虽然仍然存在,但已无法使用。【例】删除数据库中的xs1表。DROPTABLExs14、创建索引创建索引使用于CREATEINDEX命令。语法格式:CREATE[UNIQUE]INDEX<索引名>ON<表名>(<字段名1>[ASC|DESC][,<字段名2>[ASC|DESC[,……])功能:为指定的表创建索引。说明:UNIQUE 用于创建一个唯一索引,缺省时创建的是普通索引ASC|DESC 指定索引字段的升降序,缺省时为升序【例】在cj表中创建一个唯一索引,索引名为kcdmcj。要求:先按kcdm排序,kcdm相同时再按cj降序排序。CREATEUIQUEINDEXkcdmcjONcj(kcdm,cjDESC)5、删除索引语法格式:DROPINDEX<索引名>ON<表名>功能:删除指定的索引。【例】删除cj表中名为kcdmcj的索引。DROPINDEXkcdmcjONcj教材P151的语法格式有错。教材P151例题(3)的答案错误,应为:ALTERTABLEstueentDROPCONSTRAINT姓名例题(5)的答案错误,应为:DROPINDEXxmsyONstudent三、SQL语言的数据操纵功能SQL语言的数据操纵功能包括表中数据的更新、记录的插入和删除等相关操作。1、数据更新数据更新使用UPDATE命令。语法格式:UPDATE<表名>SET<字段名1>=<表达式1>[,……][WHERE<条件>]功能:更新表中的数据说明:一次可更新多个字段的值。如果无WHERE子句,则更新表中所有的记录。【例】把gz表中jbgz在1000元以下的记录的jbgz增加100元。UPDATEgzSETjbgz=jbgz+100WHEREjbgz<1000【例】计算教师工资表中的住房补贴:应是基本工资和综合补贴之和的5%。UPDATEgzSETgz.zfbt=(jbgz+zhbt)*0.05【例】计算gz表中的个人所得税(sds):(1)基本工资在5000元以下的税额是基本工资扣除1000元以后的3%;(2)基本工资在5000元以上的税额是基本工资扣除1000元以后的5%。UPDATEgzSETsds=IIF(jbgz<=5000,(jbgz-1000)*0.03,(jbgz-1000)*0.05)【例】计算gz表中的所得税(sds):基本工资大于3000元以上的将扣所得税,税额是基本工资扣除3000元以后的5%。语句一:UPDATEgzSETsds=(jbgz-3000)*0.05WHEREjbgz>3000语句二:UPDATEgzSETsds=IIF(jbgz>3000,(jbgz-3000)*0.05,0)【例】将教授和副教授的基本工资增加10%。UPDATE(gzINNERJOINjsONgz.gh=js.gh)INNERJOINzcONjs.zcdh=zc.zcdhSETgz.jbgz=jbgz*1.1WHEREzc.zc="教授"ORzc.zc="副教授"条件表达式也可以是:WHEREzc.zcLike"*教授"2、数据插入语法格式:INSTERINTO<表名>[(<字段名1>[,……])]VALUES(<表达式1>[,……])功能:在指定表的末尾插入一条新记录说明:插入的新记录字段的值由表达式列表列出,且与字段名列表相对应。没有出现在字段名列表中的字段的取值为空值表定义时说明了NOTNULL的字段的值不能取空值。字段名列表缺省时,是指插入的新记录应包含所有字段的值,且字段顺序即为表结构中顺序。【例】向xs表中添加一条记录,内容如下表所示:INSERTINTOxs(xh,xm,xb,csrq)VALUES("990900","张三","男",#1993-5-15#) xh xm xb csrq 990900 张三 男 1993-5-15【例】kc表中含5个字段(见下表),现需要在该表中添加一条记录,内容如下表所示:INSERTINTOkc(kcdm,kcm,kss,bxk,xf)VALUES("99","音乐赏析",2,False,2)或INSERTINTOkcVALUES("99","音乐赏析",2,False,2) kcdm kcmc kss bxk xf 99 音乐赏析 2 否 23、数据删除DELETE语句实现记录的删除功能,能够对指定表中所有记录或者满足条件的记录进行数据删除操作。语法格式:DELETEFROM<表名>[WHERE<条件>]功能:删除表中的记录说明:WHERE子句指定了删除记录的条件;如果无WHERE子句,则删除表中所有的记录。【例】删除xs表中1993年和1994年出生的学生的信息。DELETEFROMxsWHEREcsrq>=#1993-1-1#ANDcsrq<=#1994-12-31#【例】删除xs表中所有记录。DELETEFROMxsSQL的数据操纵包括表中的数据更新、数据插入和数据删除等操作。SQL查询是使用SELECT命令,这是数据库的核心操作。四、SQL语句的数据查询功能(SELECT语句)SELECT[ALL|DISTINCTROW][TOPn[PERCENT]<目标列1>[AS<标题>][,<目标列2>…](查询输出字段)FROM<表名或查询名列表>[<联接类型>](数据源)[WHERE<条件表达式>](数据源筛选)[GROUPBY<分组字段>(分组)[HAVING<分组结果选择条件>]](分组筛选)[ORDERBY<排序字段>][ASC|DESC];(排序)格式:说明:●DISTINCTROW子句:查询结果中如果存在相同记录的话只显示其中的第一条记录,默认是ALL,即全部显示。●TOP子句:对查询结果中所显示记录数的限制,即只显示前n条记录;如果存在PERCENT选项,则是指显示的比例。●目标列:查询的输出数据,可以是表或查询中的字段名或表达式(包括常数);目标列可以通过AS子句设置其显示的标题;如果输出所有的字段则使用SELECT*。【例】显示学生表中学生的学号、姓名、性别和籍贯。SELECTxhAS学号,xmAS姓名,xbAS性别,jgAS籍贯FROMxs【例】仅显示学生表中十分之一的学生的信息。SELECTTOP10PENCENT*FROMxs【例】列出图书馆中所有藏书的书名和出版社。SELECTDISTINCTROWsmAS书名,cbsAS出版社FROMts●FROM子句:查询的数据源,可以是表或查询。●联接类型:如果是多表查询,通常情况下应设置表之间的联接类型。联接的类型及对应的语句为:☆INNERJOIN表名ON联接条件只包括两个表中联接字段相等的行☆LEFTJOIN表名ON联接条件包括左表中的所有记录和右表中联接字段相等的那些记录☆RIGHTJOIN表名ON联接条件包括右表中的所有记录和左表中联接字段相等的那些记录【例】查询所有学生的成绩,要求输出学号、姓名、课程代码和成绩。(涉及2张表)SELECTXs.xhAS学号,Xs.xmAS姓名,Cj.kcdmAS课程代码,Cj.cjAS成绩FROMxsINNERJOINcjONXs.xh=Cj.xh【例】查询所有学生的成绩,要求输出学号、姓名、课程名称和成绩。(涉及3张表)SELECTXs.xhAS学号,Xs.xmAS姓名,Kc.kcmcAS课程名称,Cj.cjAS成绩FROMkcINNERJOIN(xsINNERJOINcjONXs.xh=Cj.xh)ONKc.kcdm=Cj.kcdm●WHERE子句:指定查询的条件,即选择满足条件的记录。【例】仅显示课程代码为“60001”的学生成绩,要求输出:学号、姓名、课程代码和成绩。SELECTXs.xhAS学号,Xs.xmAS姓名,Cj.kcdmAS课程代码,Cj.cjAS成绩FROMxsINNERJOINcjONXs.xh=Cj.xhWHEREkcdm="60001"如果两表之间的联接类型是INNERJOIN,那么也可以用WHERE子句来替代INNERJOIN。【例】仅显示课程代码为“60001”的学生成绩,要求输出:学号、姓名、课程代码和成绩。SELECTXs.xhAS学号,Xs.xmAS姓名,Cj.kcdmAS课程代码,Cj.cjAS成绩FROMxs,cjWHEREXs.xh=Cj.xhANDkcdm="60001"【例】仅显示课程代码为“60001”的学生成绩,要求输出:学号、姓名、课程名称和成绩。SELECTXs.xhAS学号,Xs.xmAS姓名,Kc.kcmcAS课程名称,Cj.cjAS成绩FROMxs,cj,kcWHEREXs.xh=Cj.xhANDKc.kcdm=Cj.kcdmANDKc.kcdm="60001"●GROUPBY子句:用于设置查询记录的分组依据,以实现对每组记录进行统计性的计算。当查询的输出数据项中存在聚合函数时,通常情况下应该由GROUPBY子句来设置分组的依据。GROUPBY的作用就是按字段的取值对记录分组,然后对每一组分别使用聚合函数,否则全部记录将作为一组进行统计计算。【例】查询各门课程的成绩,要求输出:课程代码、课程名称、选课人数、平均分、最高分和最低分。SELECTKc.kcdm,Kc.kcmc,Count(cj.cj)AS选课人数,Avg(cj.cj)AS平均分,Max(cj.cj)AS最高分,Min(cj.cj)AS最低分FROMkcINNERJOINcjONKc.kcdm=Cj.kcdmGROUPBYKc.kcdm,Kc.kcmc;●HAVING子句:如果在分组统计计算的基础上,还需要对计算的结果进行筛选,那么就应该由HAVING子句来设置筛选的条件。HAVING子句必须位于GROUPBY子句之后。【例】仅显示平均分为80分以上的课程的课程代码、课程名称、选课人数、平均分、最高分和最低分。SELECTKc.kcdm,Kc.kcmc,Count(cj.cj)AS选课人数,Avg(cj.cj)AS平均分,Max(cj.cj)AS最高分,Min(cj.cj)AS最低分FROMkc,cjWHEREKc.kcdm=Cj.kcdmGROUPBYKc.kcdm,Kc.kcmcHAVINGAvg(cj.cj)>=80●ORDERBY子句:对查询的结果进行排序的依据,ASC为升序,DESC为降序,默认是升序。【例】仅显示平均分为80分以上的课程的课程代码、课程名称、选课人数、平均分、最高分和最低分,并按平均分降序排序。SELECTKc.kcdm,Kc.kcmc,Count(cj.cj)AS选课人数,Avg(cj.cj)AS平均分,Max(cj.cj)AS最高分,Min(cj.cj)AS最低分FROMkc,cjWHEREKc.kcdm=Cj.kcdmGROUPBYKc.kcdm,Kc.kcmcHAVINGAvg(cj.cj)>=80ORDERBYAvg(cj.cj)DESC,kc.kcmc五、SQL视图所有查询都可以在SQL视图中创建、打开和修改。步骤: 打开查询设计视图 选择【查询工具】选项卡->【结果】组->【视图】按钮,选择SQL视图六、创建联合查询SQL特定查询分为:联合查询、传递查询、数据定义查询和子查询4种,其中联合查询、传递查询、数据定义查询不能在查询“设计”视图中创建,必须直接在“SQL”视图中创建SQL语句。对于子查询,要在查询设计网格的“字段”行或“条件”行中输入SQL语句。 联合查询是用UNION将多个SELECT语句的结果进行并操作。【例】查询全校师生名单。要求:查询结果中包含3个列:系名、类别、姓名,类别分别是“教师”或“学生”。查询结果按系名排序。SELECTyxdm.yxmcAS系名,"教师"AS类别,xmAS姓名FROMjsINNERJOINyxdmONjs.yxzydm=yxdm.yxzydmUNIONSELECTyxdm.yxmcAS系名,"学生"AS类别,xmAS姓名FROMxsINNERJOINyxdmONxs.yxzydm=yxdm.yxzydmORDERBY1说明:●使用UNION将多个查询结果合并起来时,系统会自动去掉重复的记录。●UNION联接的各个查询结果的列数必须相等,对应列的数据类型也必须相同。●ORDERBY子句只能出现在最后一个SELECT语句中。七、创建传递查询传递查询使用服务器能接受的命令直接将命令发送到ODBC数据库。 一般创建传递查询时,需要完成两项工作,一是设置要连接的数据库;二是在SQL窗口中输入SQL语句。八、创建数据定义查询数据定义查询与其他查询不同,利用它可以创建、删除或更改表,也可以在数据库表中创建索引。在数据定义查询中要输入SQL语句,每个数据定义查询只能由一个数据定义语句组成。子查询是指在WHERE子句中再嵌套另一个查询块,该查询块称为子查询。系统允许多层嵌套,但在子查询中不能出现ORDER子句。九、创建子查询SELECT学生表.*,Year(Date())-Year([学生表]![CSRQ])AS年龄FROM学生表WHERE(((Year(Date())-Year([学生表]![CSRQ]))>(selectavg(Year(Date())-Year([学生表]![CSRQ]))from[学生表])));【例】查询并显示“学生表”中高于平均年龄的学生记录。【例】基于xs表和cj表,查询班级编号为“04050”的那些没能登记过任何课程成绩的学生名单,要求输出字段为:xh、xm,查询结果按学号升序排序。(提示:使用子查询。)SELECTxs.xh,xs.xmFROMxsWHERExs.bjbh="04050"ANDxs.xhNOTIN(SELECTcj.xhFROMcj)ORDERBYxs.xhIIf()函数格式:IIF(逻辑表达式,表达式1,表达式2)功能:根据逻辑表达式的值,返回两个值中的一个说明:当逻辑表达式的值为真时,返回表达式1的值,否则返回表达式2的值。【例】IIf(Cj.cj>=60,"及格","不及格")IIf(Cj.cj<60,"不及格",IIf(Cj.cj>=90,"优秀","及格"))P348 数据类型 定义字符 字段大小 文本型 VarChar、Char、String、Text 需定义 备注型 Memo 货币型 Money、Currency 8 日期/时间型 Date、DateTime 8 是/否型 YesNo、Logical、Bit 1 OLE对象型 Image、General、OLEObject 自动编号 Counter、AutoIncrement 4 字节型 Byte 1 整型 SmallInt 2 长整型 Int、Integer 4 单精度型 Single、Real 4 双精度型 Double、Number、Numeric、Float 8 同步复制ID Guid 16 二进制 Binary、VarBinary查询总结 在对象下选择查询—新建—设计视图或简单查询向导(这两种都是选择查询) 新建—交叉表查询向导 新建—查找重复项查询向导(打开一个有重复项的表,例如表2,学号有重复,选择学号,则会给出学号重复的个数) 新建—查找不匹配项查询向导(对两个表而言,例如都有学号,第一个表学号多于第二个表,则查询出第二个表中没有的学号)报表是Access数据库对象之一。报表可以对大量的原始数据进行综合整理,然后将数据分析结果打印成表。报表是以打印格式展示数据的一种有效方式。报表第4章报表本章主要内容退出6.1报表概述6.2创建报表6.3报表设计的一些技巧*6.1报表概述报表的记录源可以是表或查询对象,还可以是一个SQL语句。报表中显示的数据将来自记录源指定的基础表或查询。报表上的其他信息(如标题、日期和页码)存储在报表的设计中。在报表中,对于负责显示记录源中某个字段数据的控件,需要将该控件的“控件来源”属性指定为记录源中的某个字段。使用报表可以创建邮件标签,可以创建图表以显示统计数据,可以对记录按类别进行分组,可以计算总计等。6.1.1报表的组成一般来说,报表的组成包括报表页眉、页面页眉、主体、页面页脚和报表页脚五个部分,每个部分称为一个“节”。报表中的信息可以分布在多个节中。此外,可以在报表中对记录数据进行分组,对每个组添加其对应的组页眉和组页脚。(1)报表页眉节报表页眉在报表开头出现一次。可以将报表页眉用作诸如商标、报表题目或打印日期等项目。报表页眉打印在报表首页的页面页眉之前。(2)页面页眉节页面页眉出现在报表中的每个打印页的顶部,可以用它显示诸如页标题或列标题等信息。6.1.1报表的组成(续)(3)主体节主体节(也称明细节)包含报表数据的明细部分。该节是对报表的基础记录源中每个记录的重复。该节通常包含绑定到记录源中的字段的控件,但也可能包含未绑定控件,如标识字段内容的标签。主体节可以明细地显示记录。注意:如果某报表的主体节中没有包含任何控件,则可以在其属性表中将主体节“高度”属性设置为0。(4)页面页脚节页面页脚出现在报表中的每个打印页的底部,可以用它显示诸如日期或页码等信息。6.1.1报表的组成(续)(5)报表页脚节报表页脚在报表的末尾出现一次。可以用它显示诸如报表总计等项目。报表页脚是报表设计中的最后一节,但是在打印时,报表页脚出现在最后一个打印页的最后一个主体节之后、最后一个打印页的页面页脚之前。(6)组页眉和组页脚可以在报表中的每个组内添加组页眉和组页脚。组页眉显示在新记录组的开头,可用于显示分组字段的数据。可以在组页眉显示适用于整个组的信息,如组名称等。组页脚出现在每组记录的结尾,可用于显示该组的小计值等信息。6.1.1报表的组成(续)6.1.2报表的视图类型在Access数据库中,报表的视图类型通常有如下四种:(1)报表视图报表的“报表视图”是设计完报表之后,展现出来的视图。在该视图下可以对数据进行排序、筛选。(2)打印预览视图报表的“打印预览视图”是用于测试报表对象打印效果的窗口。Access提供的打印预览视图所显示的报表布局和打印内容与实际打印结果是一致的,既所见既所得。(3)布局视图报表的“布局视图”用于在显示数据的同时对报表进行设计,调整布局等工作。用户可以根据数据的实际大小,调整报表的结构。报表的布局视图类似于窗体的布局视图。6.1.2报表的视图类型(续)(4)设计视图报表的“设计视图”用于创建报表,它是设计报表对象的结构、布局、数据的分组与汇总特性的窗口。若要创建一个报表,可在“设计视图”中进行。在“设计视图”中,可以使用“设计”选项卡上的控件按钮添加控件,如标签和文本框,控件可放在主体节中,或其他某个报表节中,可以使用标尺对齐控件。还可以使用“格式”选项卡上的命令可以更改字体或字体大小、对齐文本、更改边框或线条宽度、应用颜色或特殊效果等等。6.1.3报表的类型一般来说,Access2010提供了4种类型的报表。(1)纵栏式报表在纵栏式报表中,每个字段都显示在主体节中的一个独立的行上,并且左边带有一个该字段的标题标签。(2)表格式报表在表格式报表中,每条记录的所有字段显示在主体节中的一行上,其记录数据的字段标题信息标签,显示在报表的页面页眉节中。(3)图表报表图表报表是指在报表中包含图表显示的报表。(4)标签报表标签报表是Access报表的一种特殊类型。如果将标签绑定到表或查询中,Access就会为基础记录源中的每条记录生成一个标签。6.1.4创建报表的方法单击“创建”选项卡,在“报表”组中显示出几种创建报表的按钮,如图6-2所示。创建报表的方法和创建窗体非常相似。“报表”按钮用于对当前选定的表或查询创建基本的报表,是一种最快捷的创建报表的方式。“报表设计”以“设计视图”的方式创建一个空报表,可以对报表进行高级设计,添加控件和编写代码。“空报表”以“布局视图”的方式创建一个空报表。“报表向导”用以显示向导,帮助用户创建一个简单的自定义的报表。“标签”按钮用于对当前选定的表或查询创建标签式的报表。6.1.5修改报表的设计在使用前面的创建报表的方法完成创建报表之后,用户可以根据需要对某个报表的设计进行修改,包括可能要添加报表的控件、修改报表的控件或删除报表的控件等。若要修改某个报表的设计,可在该报表的“设计视图”中进行。进入报表的“设计视图”方法:单击“导航窗格”上的“报表”对象,展开报表对象列表。右击报表对象列表中的某个报表对象,在打开的快捷菜单中,单击“设计视图”,显出该报表的“设计视图”。*6.2创建报表通过使用“创建”选项卡上的“报表”组中的按钮可以创建各种报表。使用“报表向导”可以创建标准报表,然后用户可以按自己的需求在“设计视图”中对该报表进行自定义设计。用户还可以直接在“设计视图”和“布局视图”中创建自定义的报表。6.2.1使用“报表”创建报表例6-1在“学生管理系统”数据库中,使用“报表”按钮创建一个基于“学系”表的报表。报表名称为:例6-1学系(报表)。图6-4使用“报表”按钮创建的“学系”报表布局视图6.2.2使用“空报表”创建报表使用“空报表”按钮创建报表,首先显出一个空报表的“布局视图”和“字段列表”,通过双击或拖动“字段列表”中的字段,把需要显示的字段添加到该报表“布局视图”中。例6-2在“学生管理系统”数据库中,使用“空报表”按钮创建一个基于“学系”表的报表。报表名称为:例6-2学系(用空报表)。该报表的“报表视图”如图6-6所示。6.2.3使用“报表向导”创建报表例6-3在“学生管理系统”数据库中,使用“报表向导”创建一个基于“例4-27查询学生全部成绩”查询的报表,其“打印预览视图”如图6-17所示。报表名称为:例6-3学生全部成绩报表。6.2.4使用“标签”创建报表使用“标签”创建标签报表时,显出的“标签向导”会向用户详细提示有关字段、布局以及所需格式等信息,并根据用户的回答创建标签。一般来说,用户可先按“标签向导”创建标签报表,然后在该报表的“设计视图”中对标签的外观进行自定义设计,这样可以加快标签报表的创建过程。例6-4在“学生管理系统”数据库中,使用“标签”按钮创建一个基于“班级”表的标签报表。报表名称为:例6-4班级的班主任标签报表。6.2.4使用“标签”创建报表(续)图6-24例6-4标签报表的“打印预览视图”6.2.4使用“标签”创建报表(续)单击“可用字段:”列表框中的“班级名称”,单击该对话框中的按钮,立即在“原型标签:”下的框中显出:{班级名称}。按键盘上的“Enter”键,在{班级名称}后换行,此时插入点位于“原型标签:”下的框中的第二行开头,输入“班主任:”。单击“可用字段:”列表框中的“班主任”,单击按钮,便在“原型标签:”下的框中第二行中的“班主任:”后边显出:{班主任}。同理添加“联系电话”字段。确定邮件标签的显示内容:6.2.5使用“报表设计”创建报表“报表”选定器“主体”节选定器图6-25默认的报表“设计视图”单击“创建”选项卡中“报表”组上的“报表设计”按钮,显出报表的“设计视图”。6.2.5使用“报表设计”创建报表(续)图6-26选定了“主体”节的报表“设计视图”6.2.5使用“报表设计”创建报表(续)添加控件的方法之一:直接从记录源的“字段列表”窗格中反复把报表需要的有关字段拖放到报表的某节中的适当位置。添加控件的方法之二:在“报表设计工具”下“设计”选项卡的“控件”组(如图6-29所示)中单击某控件,然后单击该报表的某节中的适当位置。图6-27指定记录源的报表“属性表”图6-28记录源“字段列表”图6-29“控件”组6.2.5使用“报表设计”创建报表(续)根据需要可进行调整控件位置和大小等工作。操作方法与操作窗体的控件相似。首先单击某个需要调整位置的控件,显出该控件的移动控点和尺寸控点。当鼠标放在控件的四周,除左上角之外的其它地方时,鼠标指针成一个十字四向箭头形状,这时候按住鼠标左键并拖动鼠标可同时移动两个相关控件。当移动鼠标指向某控件的左上角的黑色方块的移动控点时,鼠标指针成一个十字四向箭头形状,这时候按住鼠标左键并拖动鼠标仅可移动一个该指向的控件。6.2.5使用“报表设计”创建报表(例6-5)例6-5在“学生管理系统”数据库中,使用“报表设计”创建一个基于“班级”表的报表,要求在报表中画出水平和垂直框线等,该报表设计完成时的设计视图如图6-31所示。报表名称为:例6-5班级清单报表。框线框线框线框线框线打印预览视图6.2.5使用“报表设计”创建报表(例6-5)6.2.6使用图表控件创建报表使用“图表”控件可以创建出包含图表的报表。例6-6在“学生管理系统”数据库中,使用“图表”控件创建一个基于“例4-32统计全校男学生和女学生的人数”查询的图表报表,该报表的“打印预览视图”如图6-44所示。该报表名称为:例6-6全校男学生和女学生人数的图表报表。6.2.6使用图表控件创建报表(例6-6)单击“设计”选项卡上“控件”组中的“图表”按钮,单击“主体”节中的某一位置,在“主体”节中添加一个图表控件,并打开“图表向导”对话框。按照向导提示逐步创建。在“请指定数据在图表中的布局方式”的“图表向导”对话框中,本例按照默认布局即可。若默认设置不符合用户要求,可把左侧示例图表中的字段拖回到右侧字段中,重新选择字段拖放到“数据”、“轴”和“系列”处。图6-38选择图表数据所在的字段图6-40Access默认的报表布局6.3报表设计的一些技巧为了使设计出来的报表更能符合用户的要求,需要对报表进行进一步的设计,如对记录排序、分组计算等进行设置。6.3.1报表记录的排序在前面介绍的使用“报表向导”创建报表过程里,在如图6-13所示的“报表向导”对话框中设置字段排序时,最多只可以设置4个字段对记录排序。在报表的“设计视图”中,最多可以设置超过4个的字段或表达式对记录排序。6.3.1报表记录的排序在报表的“设计视图”中,设置报表记录排序的一般操作步骤如下:(1)打开报表的“设计视图”。(2)单击“设计”选项卡上“分组和汇总”组中的“分组和排序”按钮,则在“设计视图”下方显出“分组、排序和汇总”窗格,并在该窗格中显出“添加组”和“添加排序”按钮。(3)单击“添加排序”按钮,在弹出的窗格上部的字段列表中选择排序依据字段,或者在弹出的窗格下部选择“表达式”,打开“表达式生成器”,键入以等号“=”开头的表达式。Access默认情况下按“升序”排序,若要改变排序次序,可在“升序”按钮的下拉列表中选择“降序”。第一行的字段或表达式具有最高排序优先级,第二行有次高的优先级,依此类推。*6.3.1报表记录的排序(例6-7)例6-7在“学生管理系统”数据库中,以“例6-5班级清单报表”为基础,创建出先按专业代码升序、再按年级的右边两个字符降序排序的报表。报表名为“例6-7按专业及年级排序的班级报表”。6.3.1报表记录的排序(例6-7续)简要操作步骤如下:复制“例6-5班级清单报表”对象,粘贴为“例6-7按专业及年级排序的班级报表”。打开例6-7的“设计视图”。单击“设计”选项卡上“分组和汇总”组中的“分组和排序”按钮,则在“设计视图”下方添加了“分组、排序和汇总”窗格,并在窗格中添加了“添加组”和“添加排序”按钮。6.3.1报表记录的排序(例6-7续)单击“添加排序”按钮,在弹出的窗格上部的字段列表中单击选定“专业代码”字段,如图6-46,则在“分组、排序和汇总”窗格中添加了“排序依据”栏,“专业代码”字段默认按“升序”排序。图6-46单击“添加排序”按钮6.3.1报表记录的排序(例6-7续)单击“添加排序”按钮,在弹出的窗口中单击选定“表达式”,打开“表达式生成器”,输入表达式:=Right([年级],2),单击“确定”按钮,单击第二行“排序依据”栏中的“升序”按钮右侧的下拉箭头,单击选定“降序”,如图6-48所示。图6-48按“年级”的右边两个字符降序排序最后修改报表页眉中的标签,修改标题为“按专业及年级排序的班级报表”。6.3.2报表记录的分组在报表“设计视图”中,单击“设计”选项卡上“分组和汇总”组中的“分组和排序”按钮,则在“设计视图”下方显出“分组、排序和汇总”窗格,并在该窗格中显出“添加组”和“添加排序”按钮。单击“添加组”按钮,在弹出的窗格上部的字段列表中选择分组形式字段,或者在弹出的窗格下部选择“表达式”,打开“表达式生成器”,键入以等号“=”开头的表达式。然后,展开分组形式栏,对该分组设置其它属性:(1)设置“有/无页眉节”,“有/无页脚节”,以创建分组级别。(2)设置汇总方式和类型,以指定按哪个字段进行汇总、如何对字段进行统计计算。(3)指定Access在同一页中是打印组的所有内容,还是仅打印部分内容。6.3.2报表记录的分组(例6-8)例6-8在“学生管理系统”数据库中,以“班级”表为数据源,创建出先按年级升序并分组、再按专业代码升序排序的报表。报表名为“例6-8按年级分组并按专业排序的班级报表”。图6-50在报表页眉区创建一个标签6.3.2报表记录的分组(例6-8续)图6-51按年级字段分组并设置升序图6-52按专业代码字段设置升序6.3.2报表记录的分组(例6-8续)自动添加上按年级分组后的“年级页眉”节和“年级页脚”节图6-53添加了分组后的报表“设计视图”6.3.2报表记录的分组(例6-8续)图6-54该报表设计完成时的“设计视图”6.3.2报表记录的分组(例6-8续)图6-55例6-8报表的“打印预览视图”6.3.3添加计算控件实现计算在报表中添加计算控件,并指定该控件来源的表达式,可以实现计算功能。在打开该报表的“打印预览视图”时,在该计算控件文本框中显示出表达式计算结果的值。在报表中添加计算控件的基本步骤如下:(1)打开报表的“设计视图”。(2)单击“设计”选项卡上“控件”组中的“文本框”控件。(3)单击报表“设计视图”中的某个节区,就在该节区中添加上一个文本框控件。提示:若要计算一组记录的总计值或平均值,将文本框添加到组页眉或组页脚节区中。若要计算报表中的所有记录的总计或平均值,将文本框添加到报表页眉或报表页脚节区中。6.3.3添加计算控件实现计算(续)(4)双击该文本框控件,显出该文本框的“属性表”。(5)在“控件来源”属性框中,键入以等号“=”开头的表达式。如:=Avg([成绩])、=Sum([实发工资])、=[单价]*0.85*[数量]、=Count([学号])、=[小组合计]/[总计]、=Date()、=Now()等等。注意:在报表的“设计视图”中,单击一次某文本框控件,再单击一次该文本框控件,进入文本框控件的文本编辑状态,此时,也可以在文本框中直接输入以等号“=”开头的表达式。6.3.3添加计算控件实现计算(例6-9)例6-9在“学生管理系统”数据库中,对报表“例6-8按年级分组并按专业排序的班级报表”进行复制/粘贴操作,产生出名为“例6-9按年级分组统计并按专业排序的班级报表”的报表。对“例6-9按年级分组统计并按专业排序的班级报表”进行如下修改补充:在“年级页脚”中,添加“年级班级合计:”标签及该年级班级合计的文本框。在“报表页脚”中,添加“全部班级总计:”标签及全部班级总计的文本框。在“页面页脚”中,添加能显出形如“第i页/总n页”那样的文本框。在“报表页眉”中,添加“制表日期:”标签及制表日期的文本框。6.3.3添加计算控件实现计算(例6-9续)复制产生的“例6-9按年级分组统计并按专业排序的班级报表”6.3.3添加计算控件实现计算(例6-9续)在“年级页脚”节区中,添加“年级班级合计:”标签,添加一个文本框,在文本框内直接输入:=Count([班级名称])。在“报表页脚”节区中,添加“全部班级总计:”标签,添加一个文本框,在该文本框内直接输入:=Count([班级名称])。在“页面页脚”节区中,添加一个文本框,在该文本框内直接输入:="第"&Page&"页/总"&Pages&"页"。在报表页眉区中,添加“制表日期:”标签,添加一个文本框,在该文本框内直接输入:=Date()。并设置该文本框的“格式”属性值为“长日期”。6.3.3添加计算控件实现计算(例6-9续)图6-57添加计算控件后例6-9的报表设计视图6.3.3添加计算控件实现计算(例6-9续)图6-58例6-9报表的打印预览视图6.3.4两级分组统计及百分比计算例6-10在“学生管理系统”数据库中,以“学生”表为数据源,创建一个先按学号左边的前2个字符分组、再按性别分组统计各年级的男、女学生人数及其占该年级学生总人数的百分比的报表。报表名为“例6-10男女学生人数统计报表”。该报表的结构设计如图6-59所示。6.3.4两级分组统计及百分比计算(例6-10)图6-59例6-10男女学生人数统计报表的“设计视图”6.3.4两级分组统计及百分比计算(例6-10续)图6-60例6-10男女学生人数统计报表的“打印预览视图”6.3.5多列报表多列报表即是在报表中使用多列格式来显示数据。多列报表中的数据紧凑,可节省纸张,一目了然。前面介绍过的标签报表就是常用的多列报表的形式之一。多列报表的一般创建步骤如下:(1)在报表“设计视图”中创建一个新报表或打开一个报表。(2)单击“页面设置”选项卡上“页面布局”组中的“列”按钮。(3)在打开的“页面设置”对话框中,在“网格设置”标题下的“列数”编辑框中,键入每一页所需的列数。设置“行间距”、“列间距”、“列尺寸”、“列布局”等。(4)单击“页”选项卡,设置“打印方向”。6.3.5多列报表(续)6.3.6子报表子报表是插在其他报表中的报表。在合并报表时,其中一个必须作为主报表。主报表可以是绑定的也可以是未绑定的,即主报表可以基于也可以不基于表、查询或SQL语句。主报表可以包含子报表,也可以包含子窗体,而且能够包含多个子报表或子窗体。在子报表和子窗体中,同样也可以包含多个子报表和子窗体。6.3.6子报表(续)一个主报表最多可以包含两级子报表或子窗体,而每一级均可以有多个子报表或子窗体。表6-1展示了在一个主报表中可能有的子窗体和子报表的组合。表6-1子报表/子窗体的级层关系 第1级 第2级 子报表1 子报表2 子报表1 子窗体1 子窗体1 子窗体26.3.6子报表主报表和子报表可以基于完全不同的记录源,此时主报表和子报表之间没有真正的关系。例如:主报表的记录源是“学系”表,而子报表的记录源是“课程”表,这样两个不相关的报表组合成一个报表。主报表和子报表也可以基于相同的记录源或相关的记录源。例如:“学生”表与“修课成绩”表之间的关系是“一对多”关系。主报表的记录源是“一对多”关系中“一”方的表(如主报表的记录源是“学生”表),子报表的记录源是“多”方的表(如子报表的记录源是“修课成绩”表)。如果要将子报表链接到主报表,在创建子报表之前应确保已与基础记录源(即表、查询或SQL语句)建立了关联。1.在已有报表中创建子报表(例6-11)例6-11在“学生管理系统”数据库中,在“例6-11学系信息表”报表中创建一个以“专业”表为数据来源的子报表,该子报表的名称为:专业子报表。1.在已有报表中创建子报表(例6-11续)图6-68该报表的“设计视图”1.在已有报表中创建子报表(例6-11续)图6-69例6-11学系信息表的打印预览视图2.将已有报表作为子报表添加到另一个报表中第一种方法的操作步骤简介如下:(1)在“设计视图”中打开希望作为主报表的报表。(2)在“设计视图”下,确保“设计”选项卡上“控件”组中的“使用控件向导”按钮已经按下。(3)单击“设计”选项卡上“控件”组中的“子窗体/子报表”按钮。(4)单击“主体”节区中将要放置子报表的适当位置,显出相关的未绑定控件的矩形框,并显出提示“请选择将用于子窗体或子报表的数据来源”的“子报表向导”对话框。(5)在该“子报表向导”对话框中,单击“使用现有的报表和窗体”单选钮,再在该单选钮下边的列表中选定某一报表或窗体,然后单击“下一步”按钮。2.将已有报表作为子报表添加到另一个报表中(续)第二种方法的操作步骤简介如下:(1)在“设计视图”中打开希望作为主报表的报表。(2)在“导航窗格”上的“报表”对象列表中,选定某个希望作为子报表的报表对象,按住鼠标左键,将该报表从导航窗格对象列表中拖到主报表中需要出现子报表的位置。3.链接主报表和子报表在插入包含与主报表数据相关信息的子报表时,子报表控件必须与主报表相链接。主报表与子报表间的链接,可以确保在子报表中显示的记录与在主报表中显示的记录保持正确的同步的对应关系。如果主报表的数据源和子报表的数据源已经建立了关系,那么在创建子报表时,Access将自动使子报表与主报表保持同步;如果没有建立关系,可通过“设计视图”打开包含有子报表的主报表,双击“子报表”的“报表”选定器,打开子报表的“属性表”窗口,设置“链接主字段”和“链接子字段”的属性值,形如图6-70所示。3.链接主报表和子报表(续)图6-70“链接子字段”和“链接主字段”属性6.3.7导出报表与Aceess2003不同,在Access2010中,不能将报表导出为快照文件。但是Access2010提供了将报表导出成为.pdf和.xps文件格式的功能,这些文件格式会保留原始报表的布局和格式设置。用户可以在脱离Access环境的情况下,打开某个扩展名为.pdf或.xps的文件来查看该报表。此外,在Access2010中,还可以将报表导出为Excel文件、文本文件、XML文件、Word(.rtf)文件、HTML文档等。6.3.7导出报表(续)将报表导出为PDF文件(即扩展名为.pdf的文件)的操作步骤简介如下:(1)打开某个数据库,单击“导航窗格”上的“报表”对象,展开“报表”对象列表。(2)单击“报表”对象列表中的要导出的报表名称。(3)单击“外部数据”选项卡上“导出”组中的“PDF或XPS”按钮。(4)在打开的“发布为PDF或XPS”对话框中,指定文件存放的位置,指定文件名,选定保存类型(选定“PDF(*.pdf)”。(5)单击“发布”按钮。窗体的使用 对象—窗体—新建—设计窗体(选择表,直接把相关字段托到窗体中—关闭保存即可) 新建—窗体向导 新建—自动创建窗体:纵栏式 新建—自动创建窗体:表格式 新建—自动创建窗体:数据表 新建—自动窗体:数据透视表 第4章窗体*第4章窗体4.1窗体概述4.2创建窗体4.3设计窗体4.4修饰窗体4.5定制系统控制窗体*4.1窗体概述4.1.1窗体的作用 窗体是应用程序和用户之间的接口输入和编辑数据显示和打印数据控制系统执行流程*4.1窗体概述4.1.2窗体的类型 数据操作窗体 控制窗体 信息显示窗体 交互信息窗体*4.1窗体概述4.1.3窗体的视图 不同类型的窗体具有不同的视图类型 窗体在不同视图中完成不同的任务 窗体的不同视图之间可以进行切换*4.1窗体概述4.1.3窗体的视图*4.2创建窗体创建方法 “窗体”按钮:自动生成窗体 “窗体向导”按钮:使用向导创建窗体 “窗体设计”按钮:使用窗体设计视图 “空白窗体”按钮:创建空白窗体 “导航”按钮:创建导航窗体 “其他窗体”按钮:创建特定窗体*4.2创建窗体4.2.1自动创建窗体 一步生成(使用相应按钮完成)1.使用“窗体”按钮 在导航窗格中选中表对象后,单击“创建”“窗体”2.使用“多个项目”工具 在导航窗格中选中表对象后,单击“创建”“其他窗体”“多个项目”*4.2创建窗体4.2.1自动创建窗体 一步生成(使用相应按钮完成)3.使用“分割窗体”工具 在导航窗格中选中表对象后,单击“创建”“其他窗体”“分割窗体”4.使用“模式对话框”工具 在导航窗格中选中表对象后,单击“创建”“其他窗体”“模式对话框”*4.2创建窗体4.2.2创建图表窗体1.创建数据透视表窗体 数据透视表:是一种特殊的表,主要用于进行数据计算和分析 创建方法:在导航窗格中选中表对象后,单击“创建”“其他窗体”“数据透视表”*4.2创建窗体4.2.2创建图表窗体1.创建数据透视表窗体 设计界面:*4.2创建窗体4.2.2创建图表窗体2.创建数据透视图窗体 数据透视图:是一种交互式的图表,功能与数据透视表类似,只不过以图形化的形式来表现数据 创建方法:在导航窗格中选中表对象后,单击“创建”“其他窗体”“数据透视图”*4.2创建窗体4.2.3使用“空白窗体”按钮创建窗体 “空白窗体”按钮是Access2010增加的新功能 使用空白窗体按钮创建窗体是在布局视图中创建数据表窗体 使用“空白窗体”按钮创建窗体是一步生成在导航窗格中选中表对象后,单击“创建”“空白窗体”按需要添加数据源和控件*4.2创建窗体4.2.4使用向导创建窗体 多步生成(使用向导完成)1.创建基于单个数据源的窗体 单击“创建”“窗体向导”按向导提示完成其余设置2.创建基于多个数据源的窗体 使用“窗体向导”可以创建基多个数据源的窗体,所建窗体称为主子窗体 方法同上*4.3设计窗体4.3.1窗体的设计视图 设计窗体是在窗体的设计视图中完成1.设计视图的组成 窗体页眉 窗体页脚 页面页眉 页面页脚 主体*4.3设计窗体4.3.1窗体的设计视图2.“窗体设计工具”选项卡 由“设计”、“排列”和“格式”三个子选项卡组成 功能参见书中表*4.3设计窗体4.3.1窗体的设计视图3.字段列表 多数情况下,窗体是基于某一个表或查询建立起来的,因此窗体内控件通常显示的是表或查询中的字段值 单击“工具”组中的“字段列表”按钮,显示“字段列表”对话框*4.3设计窗体4.3.2常用控件的功能 控件:是窗体上用于显示数据、执行操作、装饰窗体的对象 窗体中包含很多控件。在窗体中添加的每一个对象都是控件 控件的类型:绑定型、未绑定型和计算型绑定型控件:用于显示、输入、更新数据表中的字段未绑定型控件:没有数据来源,可以用来显示信息计算型控件:以表达式作为数据源*4.3设计窗体4.3.2常用控件的功能*4.3设计窗体4.3.2常用控件的功能1.标签控件 用来在窗体或报表上显示说明性文本 标签不显示字段或表达式的数值,它没有数据来源 有两种标签:独立标签和附加标签*4.3设计窗体2.文本框控件主要用来输入或编辑数据,是一种交互式控件文本框分为3种类型:绑定型、未绑定型和计算型绑定型文本框能够从表、查询或SQL语言中获得需要的内容未绑定型文本框并没有链接某一字段,一般用来显示提示信息或接收用户输入数据等计算型文本框可以显示表达式的结果。当表达式发生变化时,数值就会被重新计算4.3.2常用控件的功能*4.3设计窗体3.选项组控件由一个组框及一组复选框、选项按钮或切换按钮组成如果选项组绑定了某个字段,则只有组框架本身绑定此字段,而不是组框架内的复选框、选项按钮或切换按钮选项组可以设置为表达式或未绑定选项组,也可以在自定义对话框中使用未绑定选项组来接受用户的输入,然后根据输入的内容来执行相应的操作4.3.2常用控件的功能*4.3设计窗体4.列表框与组合框控件列表框可以包含一列或几列数据,用户只能从列表中选择值,而不能输入新值组合框的列表是由多行数据组成,但平时只显示一行,需要选择其他数据时,可以单击右侧的下拉箭头按钮两者区别:使用组合框,既可以进行选择,也可以输入数据;列表框只能选择数据4.3.2常用控件的功能*4.3设计窗体5.按钮控件在窗体中可使用“按钮”来执行某项操作或某些操作例如,“确定”、“取消”、“关闭”等6.复选框、切换按钮、选项按钮控件复选框、切换按钮和选项按钮是作为单独的控件来显示表或查询中的“是”或“否”的值当选中复选框或选项按钮时,设置为“是”,如果不选则为“否”;如果按下切换按钮,其值为“是”,否则其值为“否”4.3.2常用控件的功能*4.3设计窗体7.选项卡控件主要用于将多个不同格式的数据操作窗体封装在一个选项卡中能够使一个选项卡中包含多页数据操作窗体的窗体,而且在每页窗体中又可以包含若干个控件8.图像控件可以使窗体更加美观4.3.2常用控件的功能*4.3设计窗体4.3.2常用控件的功能*4.3设计窗体4.3.3常用控件的使用[例]查找哪些课程没有学生选修,并显示“课程编号”和“课程名称”*4.3设计窗体1.创建绑定型文本框控件打开窗体设计视图将所需字段从“字段列表”对话框拖至窗体适当位置2.创建标签控件显示出“窗体页眉”节在“窗体页眉”节中添加标签控件输入所需内容4.3.3常用控件的使用*4.3设计窗体3.创建选项组控件添加选项组控件按向导提示逐一设置相关内容4.创建绑定型组合框控件添加组合框控件按向导提示逐一设置相关内容4.3.3常用控件的使用*4.3设计窗体5.创建绑定型列表框控件添加列表框控件按向导提示逐一设置相关内容6.创建命令按钮添加按钮控件按向导提示逐一设置相关内容4.3.3常用控件的使用*4.3设计窗体7.创建选项卡控件8.创建图像按钮9.控件的基本操作4.3.3常用控件的使用*4.3设计窗体4.3.4窗体和控件的属性 属性用于决定表、查询、字段、窗体及报表的特性1.“属性表”对话框 窗体和控件的属性可以在“属性表”对话框中进行设置 单击“工具”组中的“属性表”按钮或单击鼠标右键,并从打开的快捷菜单中执行“属性”命令,可以打开“属性表”对话框 包含““格式”、“数据”、“事件”、“其他”和“全部”5个选项卡*4.3设计窗体4.3.4窗体和控件的属性2.常用的“格式”属性 主要用于设置窗体和控件的外观或显示格式 包括标题、字体名称、字号、字体粗细、倾斜字体、前景色、背景色、特殊效果等[例]设置图4.56所示窗体中的标题和“教师编号”标签的格式属性。其中,标题的“字体名称”为“隶书”,“字号”为16,前景色为“灰色”;“教师编号”标签的背景色为“蓝色”,前景色为“白色”*4.3设计窗体4.3.4窗体和控件的属性3.常用的“数据”属性 决定了一个控件或窗体中的数据源,以及操作数据的规则,而这些数据均为绑定在控件上的数据 包括控件来源、输入掩码、有效性规则、有效性文本、默认值、是否有效、是否锁定等[例]将图4.69所示窗体中的“工作时间”改为工龄,工龄由工作时间计算得到(要求保留至整数)*4.3设计窗体4.3.4窗体和控件的属性4.常用的“其他”属性 表示了控件的附加特征 包括名称、状态栏文字、自动Tab键、控件提示文本等[例]在例4.9创建的“学生选课成绩”窗体的下方显示窗体中该学生的选课数*4.3设计窗体4.3.4窗体和控件的属性4.常用的“其他”属性[例]创建一个如图所示的窗体,当用户输入了身高、体重和性别后,单击“测试”按钮,系统会自动给出测试结果*4.4修饰窗体4.4.1主题的应用 主题:是修饰和美化窗体的一种快捷方法,它是一套统一的设计元素和配色,可以使数据库中的所有窗体具有统一的色调 Access2010提供了44套主题[例]对“教学管理”数据库应用主题*4.4修饰窗体4.4.2条件格式的使用 可以根据控件的值,按照某个条件设置相应的显示格式[例]在图4.76所示的“学生选课成绩”窗体中,应用条件格式,使子窗体中各类成绩字段值用不同颜色显示。60分以下(不含60分)用红色显示,60~90(不含90)分用蓝色显示,90分(含90分)以上用绿色显示*4.4修饰窗体4.4.3提示信息的添加 为了使界面更加友好,清晰,需要为窗体中的一些字段数据添加帮助信息,也就是在状态栏中显示的提示信息[例]在图4.80基础上,为“学生编号”字段添加提示信息*4.4修饰窗体4.4.4窗体的布局1.选择控件2.移动控件3.调整控件大小4.对齐控件5.调整间距*4.5定制系统控制窗体4.5.1创建切换窗体 切换窗体:使用切换面板管理器创建的窗体,是一个特殊窗体 切换窗体实质上是一个控制菜单,通过选择菜单实现对所集成的数据库对象的调用 切换面板页:每级控制菜单所对应的界面 切换项(菜单项):每个切换面板页的选项*4.5定制系统控制窗体4.5.1创建切换窗体 切换面板页与切换项对应关系*4.5定制系统控制窗体4.5.1创建切换窗体 创建思路:首先启动切换面板管理器,然后创建所有的切换面板页和每页上的切换项,设置默认的切换面板页,最后为每个切换项设置相应内容。[例]使用切换面板管理器创建“教学管理”切换窗体*4.5定制系统控制窗体4.5.1创建切换窗体1.添加切换面板管理器 通常,使用切换面板管理器创建系统控制界面的第一步是启动切换面板管理器,由于Access2010并未将“切换面板管理器”工具放在功能区中,因此使用前要先将其添加到功能区中 单击“文件”“选项”按要求进行添加(参见书)*4.5定制系统控制窗体4.5.1创建切换窗体2.启动切换面板管理器 单击“数据库工具”“切换面板管理器”*4.5定制系统控制窗体4.5.1创建切换窗体3.创建新的切换面板页 单击“新建”按钮,在弹出的“新建”对话框的“切换面板页名”文本框中,输入所建切换面板页的名称,然后单击“确定”按钮 其他相同*4.5定制系统控制窗体4.5.1创建切换窗体4.设置默认的切换面板页 选择要设置的切换面板页,单击“创建默认”按钮 删除原默认的切换面板页*4.5定制系统控制窗体4.5.1创建切换窗体5.为切换面板页创建切换面板项目*4.5定制系统控制窗体4.5.1创建切换窗体6.为切换面板上的切换项设置相关内容*4.5定制系统控制窗体4.5.2创建导航窗体 导航窗体可以选择导航按钮的布局,可以在所选布局上直接创建导航按钮,并通过这些按钮将已建数据库对象集成在一起形成数据库应用系统。使用导航窗体创建应用系统控制界面更简单,更直观[例]使用“导航”按钮,创建“教学管理”系统控制窗体*4.5定制系统控制窗体4.5.3设置启动窗体 如果希望在打开数据库时自动打开指定的窗体,可以设置其启动属性*4.5定制系统控制窗体设置步骤:单击“文件”“选项”,打开“Access选项”对话框设置相关内容4.5.3设置启动窗体 练习:在“教学管理”数据库中有“教师表”,字段为:教师号、姓名、性别、学历、工作时间、政治面貌、职称、系别、联系电话。 另外还有一个“课程”表,字段为课程号、教师号、课程名称、学分、选课类型。 创建两个表,建立关联,建立各种窗体第6章宏第一节宏概述一、宏的基本概念▲宏是由一个或多个操作组成的集合,其中每个操作都自动执行,并实现特定的功能。▲通过直接执行宏或使用包含宏的用户界面可以完成许多复杂的操作,而不需要编写程序代码。▲宏是一种特殊的代码,它没有控制转移功能,也不能直接操纵变量,但它能够将各种对象有机地组织起来,按照某个顺序执行操作的步骤,完成一系列操作动作。▲宏可以分为3种类型:操作序列宏宏组条件操作宏宏组▲宏组是多个基本操作序列宏的集合。设计时将不同的宏按照分类组织到不同的宏组中,将有助于对数据库的管理。▲宏组将相关的宏以一个宏名存储。宏组类似于“主程序”,而宏组中的宏类似于“子程序”。使用宏组既可以增加控制,又可以减少编制宏的工作量。▲宏操作是宏最基本的单元,一个宏操作由一个宏命令完成。▲宏是宏操作的集合,宏组是宏的集合。宏和宏组都可以有其名。▲可以通过引用宏组中的宏名执行宏组中的宏。语法:宏组名.宏名条件宏▲条件宏是在一定的条件下才执行的宏。▲条件宏的条件是一个逻辑表达式,宏将根据表达式运算结果的True或False而确定操作是否进行。二、常用的宏操作Access2010提供80多个宏操作命令,有8类。 窗口管理命令 宏命令 筛选/查询/搜索命令 数据库导入导出命令 数据库对象命令 数据库命令 系统命令 用户操作命令几种常见的宏命令:ApplyFilter用于筛选、查询或将SQL的Where子句应用至表、窗体或报表,以限制或排序记录。Beep通过计算机的扬声器发声。Close关闭指定的Access窗口,若无指定,则关闭使用中的窗口。CopyObject将指定的数据库对象复制到Access数据库或项目中。DeleteObject删除指定的数据库对象。FindRecord查找符合指定条件的第1条记录。MsgBox显示包含警告或提示信息的消息框。Maximize最大化激活窗口。Minimize最小化激活窗口OpenForm在窗体视图、窗体设计视图、打印预览或数据表视图中打开窗体。OpenQuery在数据表视图、设计视图或打印预览中打开选择查询、交叉表查询或执行操作查询。OpenTable在数据表视图、设计视图或打印预览中打开表。Quit退出Access。RunApp启动另一个Windows或Ms-DOS环境下的应用程序。RunCommand执行一个内置的Access命令。RunMacro执行一个宏。StopMacro终止当前正在运行的宏。StopAllMacro终止所有正在运行的宏。第二节宏的创建创建宏的过程主要包括:添加操作设置参数添加备注宏的创建很简单,不涉及到VB语言及编程。宏的创建:使用功能区中命令创建宏(创建宏)创建与指定对象连接的宏(使用宏)一、宏的设计视图宏的设计视图用于创建和编辑宏。▲打开数据库▲在“创建”选项卡的“宏与代码”组中单击“宏”,打开“宏”设计器窗口,同时出现“操作目录”面板▲添加新操作▲设置操作参数▲添加备注二、创建操作序列宏【例1】创建一个能够先最小化数据库窗口,然后再打开“学生信息”窗体的宏。【打开学生信息窗体】★操作步骤:▲新建宏,即打开宏的设计视图▲在设计窗口中选择最小化数据库窗口操作▲在下一行选择打开窗体操作,并设置参数:窗体名称“学生信息”窗体视图 窗体视图:筛选名称 默认选择Where条件 默认选择条件空数据模式 编辑窗体模式 普通三、创建宏组宏组是一个宏文件中包含一个或者多个宏,这些宏叫做子宏。每个宏都是独立的,互不相关。为了在宏组中区别各个不同的宏,需要为每一个宏指定一个宏名,并设置操作。宏组的创建与普通的宏的创建基本相同,仅需要在设计视图中打开“操作目录”窗格,把submacro拖放在“添加新操作”上面,或者在“添加新操作”中选择“submacro”,在子宏后面文本框中输入子宏名,在下面输入操作名。【例2】创建一个窗体(宏例2),在上面添加3个命令按钮,每个命令按钮的功能均通过宏组中的3个宏实现,即打开“学生信息”窗体、“学生成绩”窗体和关闭窗体。★操作步骤:▲新建宏▲创建各个宏(输入宏名、选择操作及参数)▲保存时输入宏组名▲创建窗体,在其中添加3个命令按钮,并使其分别调用宏组中的宏。宏组:例2中的宏窗体中3个命令按钮的单击事件代码分别为:DoCmd.RunMacro“例2.打开学生窗体”DoCmd.RunMacro“例2.打开成绩窗体”DoCmd.RunMacro“例2.关闭窗体” 宏名 操作 参数 打开学生信息 OpenForm 窗体:学生信息 打开成绩信息 OpenForm 窗体:学生成绩 关闭窗体 Close宏与宏组区别: 宏是由宏操作构成的,而宏组是由宏构成的 宏组中的子宏必须命名,而宏不需要 宏在运行时,所有的宏操作按顺序执行;而宏组在运行时之执行最前面的宏四、创建条件操作宏在某些情况下,希望在某个特定条件为真时才执行一个或多个操作,即使用条件来控制宏的流程。这就需要创建条件操作宏。条件操作宏的创建与普通的宏的创建基本相同,仅需要在设计视图中打开操作目录窗格,把if拖放在“添加新操作”上面,或者在“添加新操作”中选择“if”,在if后面文本框中输入条件表达式。【例3】创建一个窗体,根据选项组的选择,打开相应的表。【窗体:窗体宏例3】★操作步骤:▲在设计视图下创建窗体:窗体宏例3▲新建宏:例3▲创建各操作序列宏(设置条件、选择操作及参数)输入的条件必须是逻辑表达式,而不能是其它类型的表达式,也不能使用SQL语句。例3中的宏:窗体中选项组的单击事件代码:DoCmd.RunMacro“例3" 条件 操作 参数 [Forms]![窗体宏例3].[Frame0]=1 OpenTable 表:教师表 [Forms]![窗体宏例3].[Frame0]=2 OpenTable 表:学生表 [Forms]![窗体宏例3].[Frame0]=3 OpenTable 表:课程表 [Forms]![窗体宏例3].[Frame0]=4 OpenTable 表:成绩表五、创建AutoExec宏名为AutoExec的宏是一个特殊的宏,当首次打开数据库时,名为AutoExec的宏将自动执行其中的操作。创建AutoExec宏的方法与普通的宏相同,只是在保存时,将其宏名设置为:AutoExec。如果不想在打开数据库时运行AutoExec宏,可以在打开数据库时按住Shift键。要为一个操作或操作集合指定快捷键或组合键,可以创建一个名为AutoKeys宏组。在按下特定的按键或组合键时,系统就会执行相应的操作。六、创建Autokeys宏组【例Autokeys】创建一个宏组当按下Ctrl+f键时打开“学生信息”窗体,当按下Ctrl+q键时打开“学生成绩查询”。【AutoKeys】★操作步骤:▲新建宏▲创建各个宏(输入宏名、选择操作及参数)▲保存时输入宏组名:AutoKeys 宏名 操作 参数 ^f OpenForm 窗体:学生信息 ^q OpenQuery 查询:学生成绩查询可以在AutoKeys宏组中指派的组合键 宏名 组合键 {F1} F1 ^{F1} Ctrl+F1 +{F1} Shift+F1 {Insert} Ins ^{Insert} Ctrl+Ins +{Insert} Shift+Ins {Delete}或{Del} Del ^{Delete}或^{Del} Ctrl+Del +{Delete}或+{Del} Shift+Del七、编辑宏编辑宏包括:添加宏操作、删除宏操作、更改宏操作顺序;修改宏的操作和参数;添加备注。1、添加宏操作★操作步骤:打开宏的设计视图在“添加新操作”输入命令设置参数2、删除宏操作★操作步骤:打开宏的设计视图选择需要删除的宏单击按钮或者右键“删除”或者“delete”3、更改宏操作顺序★操作步骤:打开宏的设计视图选择需要改变顺序的行单击按钮或者拖动宏或者Ctrl+上键,Ctrl+下键4、添加注释★操作步骤:打开宏的设计视图仅需要在设计视图中打开“操作目录”窗格,把Comment拖放在“添加新操作”上面或者“添加新操作”中选择“Comment”。第三节宏的执行和调试Access在执行宏时:宏:从第一个操作开始,执行至最后一个操作。宏组:仅执行第一个宏。如果指定了宏操作的条件,则只执行满足条件的操作。可以从其它宏或事件过程中直接执行宏,也可以将执行宏作为对窗体、报表、控件中发生的事件作出的响应。一、运行宏宏有多种运行方式:直接运行宏运行宏组里的宏通过响应对象的事件运行宏1、直接运行宏执行下列操作之一,即可直接运行宏:从宏设计视图下运行宏(单击【运行】按钮)在导航窗格中双击宏名运行宏在导航窗格中点击右键,在快捷菜单中选择“运行”将宏指定为窗体或报表的属性设置使用Docmd对象的RunMacro方法在VBA代码过程中运行宏2、运行宏组中的宏执行下列操作之一,即可运行宏组中的宏:从宏设计视图下运行宏(单击【运行】按钮)在导航窗格中双击宏名运行宏在导航窗格中点击右键,在快捷菜单中选择“运行”将宏指定为窗体或报表的属性设置使用Docmd对象的RunMacro方法在VBA代码过程中运行宏3、在窗体或报表中运行宏如果希望从窗体、报表或控件中运行宏,只需在相应控件属性窗口的事件中选择当前数据库中的相应的宏。则当该控件的此事件发生时,即执行指定的宏。若在控件的事件下拉列表框中选择宏组名,则控件的该事件发生时,仅触发宏组中的第一个宏。二、宏调试在调试宏,一次性运行整个宏并不是一种理想的方法。Access系统提供了单步执行的宏调试工具。使用单步跟踪执行,可以观察到宏的流程和每一个操作的执行结果。★操作步骤:【单步运行】▲在设计视图下保存宏▲在【宏工具/设计】选项卡,【工具】组中单击【单步】按钮▲运行宏。此时将打开【单步执行宏】的第一个操作的对话框,显示:宏名条件操作名称及参数▲单击【单步执行】按钮,将执行第一个操作,同时打开第二个操作对话框。▲单击【停止】按钮,将停止宏的运行并关闭窗口▲单击【继续】按钮,将关闭窗口并继续执行剩下的操作。演示内容:建立空数据库:school.mdb利用模版建立:订单1.mdf演示内容:打开前面建立的空数据库school.mdb建立数据表course(课程表)——3个字段cid、cname、ccredit(学分)演示1内容:在数据表student中插入新记录(“插入”|”新记录”菜单命令)——注意:分别插入一条学号为空和与其它记录学号重复的记录。观察结果……演示2内容:对数据表student设置有效性规则:sex——=‘男’or=‘女’(等号也可以省去)尝试修改已有记录的sex字段的值,观察结果对数据表tea_course设置有效性规则:ts_ter_id(学期号)只能取1~10——Between1And10(或者 >=1and<=10)尝试修改已有记录的该字段的值,观察结果演示内容:对已经建好的查询,运行它,察看结果删除原有查询,重新演示建立过程*****
/
本文档为【ACCESS2010基础教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索