第 1 页 共 58 页
一、罗斯文数据库简介
二、 罗斯文库是 Access 自带的示例数据库,也是一个很好学习教程。让我们一起来学习一下吧。通过罗斯文数据库的
学习,能对数据库的表、关系、查询、报表、窗体、切换面板等内容有个全面的了解。
我们做数据库开发,应该来讲是现实生活中一种管理思路的体现与高度概括。那么要构思之前肯定要对整个流程
有个清晰的了解。那我们就先来了解一下这个罗斯文公司的业务流程吧。罗斯文公司是一个虚构的商贸公司,该公
司进行世界范围的食品的采购与销售,就是通常所讲的买进来再卖出去,赚取中间的差价。罗斯文公司销售的食品
分为几大类,每类食品又细分出各类具体的食品。这些食品由多个供应商提供,然后再由销售人员售给客户。销售
时需要填写订单,并由货运公司将产品运送给客户。
要打开“罗斯文数据库”,先启动 Access,从“帮助”菜单选择“示例数据库”->“罗斯文数据库”即可。如你所安装的
是精简版不带有示例数据库,那就从网上下载一个吧。
本帖隐藏的内容需要回复才可以浏览
下载 ( KB)
2008-4-15 00:39
图一
注:本教程着重在实例讲解,不含最基本的一些概念及操作说明,如需学习基础的参见此教程或自己看书。
二、表设计思路及表的数据类型、字段属性
正 文:
首先要做的事是设计表,表的设计思路就是将数据分类,同一类的数据放在一个表中,并且有一个字段与其他表之间
建立联系。而且要尽可能的细分,以最大限度的保证每个表中不存在重复的数据资料。
比如说销售订单吧,肯定要记录客户的具体资料如名称、地址、电话等方便联系;还要记录订单的日期,运费等;以
及每张订单中都有哪些具体的产品、数量、价格等信息。如果我们把这么多信息记录在一张表里的话,那就要录入许多
重复的信息,比如客户的资料,不仅很麻烦还很容易出错。
所以应该细分为客户表专门维护客户的信息;订单表记录订单的日期,运费;订单名细表记录具体的产品数量及价格;
另外还需要产品表、供应商表、雇员表、运货商表及类别表。
第 2 页 共 58 页
“罗斯文数据库”中共有8个表,选中表,以详细信息的视图来查看各个表的说明,见图二。
下载 ( KB)
2008-4-15 00:39
图二
关于数据库的基本组成表,查询,窗体等及表的基本组成字段,记录等概念就不用再讲了吧。其中一些常用的知识将
在示例中一起讲解。在表设计中重点要掌握的是数据类型、字段属性的设置与应用。
三、数据类型的用法
1.文本
用于存储不需要计算的数字,文本、其他字符或组合内容。最多可存储 255 个汉字,英文或字符。
2.备注
用于存储长文本和数字。如注释或说明。最多可存储 65536 个汉字,英文或字符。
3.数字
用于存储要进行计算的数据。如库存量,销售数量等。
4.日期/时间
用于存储日期和时间,如出生日期,发货日期等。
要注意日期型数据要注意分隔符的正确使用。以“-”,“/”分隔年月日,如“2007-01-10”,而“”这种格式是错误的。
5.货币
用于存储货币值,计算期间禁止四舍五入,精度较高。如单价。
6.自动编号
用于在添加记录时自动插入一个唯一不重复的编号,如员工编号等。一般用作主键。
7.是/否
用于存储二选一的数据,如“是/否”,“真/假”,“开/关”等。
8.OLE 对象
用于存储一些用其他应用程序创建的对象,如 WORD 文档,EXCEL 表格,图片等。如员工照片。
9.超链接
用于存储超链接。如网址,EMAIL 地址。
10.查阅向导
查阅向导允许用户使用组合框或列表框选择来自其他表或来自值列表的数据。在表设计视图新增该数据类型的字段会启
第 3 页 共 58 页
动向导进行定义。
四、字段属性
字段属性是指字段拥有的一些特点,不同数据类型的字段,属性也不尽相同,常用的属性如下:
1.字段大小
文本型字段,默认的大小为 50;数字型字段,默认大小为长整型;自动编号的字段,默认大小也是长整型。
2.格式
格式属性决定了单元格中数据的显示和打印方式,所看到的并不一定就是表中所存储的。
3.小数位数
小数位数属性决定了在单元格中显示几位小数。如设为 0,将不显示小数。
4.输入掩码
输入掩码属性决定了数据输入和保存的方式。
5.标题
标题属性影响着字段的显示名称,默认情况下,标题与字段名相同,也可以输入不同内容,在数据表视图中打开表时,
将看到字段的列标题与标题属性相同。
6.默认值
在默认值中填入数据时,在新增记录时将自动将该值添加到相应的字段中。
7.有效性规则
有效性规则用于限制在字段中输入的数据,在数据录入后,自动检查是否满足有效性规则,如不满足则发出警告,不接
受录入值。如在单价字段的在效性规则中填入:>0,即可防止忘记填写该数据,或误填入负数。
8.有效性文本
在用户录入时如违反有效性规则时,系统会发出警告,而如果有效性文本中填入了内容,则在提示时,对话框中会显示
有效性文本中的内容,替代系统的提示内容。
9.必填字段
必填字段如果设为是,那么在录入数据时必须在该字段填入相应的数据。
10.允许空字符串
字符串的概念是以字符形式存储的数据,一般要在字符串的两端加上英文的双引号,如”abc”等,而在文本和备注型的字
段中,无需加入英文双引号,录入数据会直接作为字符串处理。如果允许空字符串设为否,将不允许输入空字符串。这
里要注意的是空字符中””与空格字符串是不同的” ”,前者双引号中没有空格。
11.输入法模式
输入法模式可以设为开启或关闭,根据字段中是否要输入中文字,做好设置,可以避免录入人员在中英文输入法之间做
切换。
12.索引
索引用于加快排序,查询和分组操作的速度。索引的值有 3 种,如果字段为主键,将自动设索引的属性为有(无重复),
另外两种是有(有重复)和无。索引属性中只能设置单一字段的索引,如果要设置多字段索引,可在设计视图中,点击
第 4 页 共 58 页
工具栏的索引(或菜单视图-索引),在索引框中设置。
下载 ( KB)
2008-4-15 00:42
图三
具体的用法及示例将结合罗斯文示例进行说明。
五、表的具体分析:
1、“供应商”表
供应商表记录的是为罗斯文公司提供货源的厂商记录
下载 ( KB)
2008-4-15 00:47
第 5 页 共 58 页
选择 “供应商”表,单击“设计”按钮,进入表设计视图,表中的字段包括了常用的联系信息。
下载 ( KB)
2008-4-15 00:47
图五
我们重点来关注一下“供应商 ID”字段。这是一个自动编号类型的字段,在表中具有唯一性,一般的我们设计的表中都需
要一个唯一的不重复的字段,我们可以把该字段设为主键,该字段将会用于与其他表之间建立关系。
表中的大部分字段都是文本类型,大小可以根据实际要输入的内容来设置,比如城市,地区的字段设为15,而地址的
字段大小是60。采用合适的大小会尽可能的减少存储空间的占用。一般不需要进行数据计算的字段我们都用文本类型
来存储。
主页和 Email 之类的可以采用起超链接类型。
查看该表中的索引
下载 ( KB)
2008-4-15 00:47
图六
可以发现公司名称和邮政编码字段的索引属性为有(有重复)也即唯一索引为否,主要是为了通过索引加快对这两个字
段的查询等操作,有重复说明该字段中的数据是有可能重复的,比如两个公司在同一地区,那邮政编码就是一样的。
另外我们在常规属性中除了字段大小属性以外,还有其他的一些属性,可以在相应的栏内点F1,查看相应的帮助。
2、“类别”表
划分类别是表设计时的必须要考虑的,因为不同类别的产品可能由不同的部门负责销售,为了方便统计出各类产品
第 6 页 共 58 页
或部门的销售情况,须将产品进行分类。类别表中将产品分为 8 大类。
下载 ( KB)
2008-4-15 00:49
图七
选择类别表,点设计,进入设计计视图
下载 ( KB)
2008-4-15 00:49
图八
可以看到“类别 ID”是自动编号类型,用作主键;
说明字段,数据类型为备注,在实际操作中如果要说明的字数不会超过 255 个字符,可以采用文本类型,这样更节
省空间。
图片字段的数据类型是 OLE 对象,OLE 对象在表中不参直观地看到图片,如果要查看图片可以在字段上双击,如需
插入,则在图片字段上单击右键,选择“插入对象”,再从对话框中选择“由文件创建”,浏览到所需图片,也可以链接对象,
这样只是保存了链接地址,不会直接把文件插入数据库。
、“产品”表
产品表中保存了罗斯文公司销售的各种产品的明细数据。这个表清楚的记载了每个产品是属于什么类别,供应商是
第 7 页 共 58 页
谁,库存量,单价等信息,是填写订货单时的重要依据。
下载 ( KB)
2008-4-15 15:22
图九
选中“产品”表,点设计,进入设计视图
下载 ( KB)
2008-4-15 15:22
“产品 ID”是自动编号类型的主键; 单价,库存量,订购量,再订购量字段中设置的有效性规则与有效文本性文本属性,
可以学习一下; “中止”字段的数据类型是“是/否”型,这对于处理两选一的结果最为合适;
重点来关注一下“供应商 ID”和“类别 ID”,这两个字段都是数字类型,分别对应“供应商”表中主键和“类别”表中的主键。
先来看下“供应商 ID”,这个字段的标题属性中填的是“供应商”,这样在数据表视图中,看到的字段标题就会是“供应商”,
而不是默认的“供应商 ID ”。另外这两个字段都是查阅列,这是一个很有用的属性,我们对“供应商 ID”作一下详细的讲解,
“类别 ID”与“供应商 ID”的设置方法相同。
4、查阅列
我们在表中输入数据时,经常会遇到需要重复输入的内容,比如人员的性别为“男”或“女”,这是单表中的重复录入;
比如产品表中需要输入“供应商”,而“供应商”字段在“供应商”表中已经录入过了,这属于跨表的重复录入。这些内容如果
直接录入不仅花费了用户较多的时间,而且极容易出错。为了方便用户录入重复性的数据,可以借助 ACCESS 提供的查
第 8 页 共 58 页
阅列的功能。
下载 ( KB)
2008-4-15 15:26
图11
首先来看下查阅列中的各项具体属性
1. 显示控件
下载 ( KB)
2008-4-15 15:26
图12
从显示控件右侧的下拉框中可以看到该属性可以设为文本框,列表框或组合框。如果设为文本框,那数据就只有接受
从文本框中的录入,查阅的其他属性都不可用。我们主要要掌掘的是列表框和组合框的使用。组合框和列表框的使用基
本相同,只是列表框除了可以从列表中选择还可以接受录入,相当于是列表框各文本框的组合。
2.行来源类型
下载 ( KB)
2008-4-15 15:26
图13
行来源类型是指控件中的数据来自于何处。共有三处选择,表/查询,值列表,字段列表。
如果选择“表/查询”,则列表框或组合框中的数据将来源于其他表或查询中的结果。如果要录入其他表中已经存在的数据,
第 9 页 共 58 页
或录入从几个表中查询得到的结果,用这个选项最为方便。
如果选择“值列表”,只需在行来源中直接输入列表中的数据,并用英文分号隔开即可。这种类型只适合于输入的内容
固定在某几个值之间,如性别的值可以是“男”或“女”。
如果选择“字段列表”,该字段中将填入某个表中的字段名称信息。这种类型较少用到, “表/查询”的使用就包含了这种简
单的用法。
3.行来源
“行来源”中是列表框或组合框中将要列出的数据。
如果“行来源类型”是“表/查询”,可单击“行来源”右侧的下拉箭头,选择某个表或查询,以该表或查询中的数据作为列
表框或组合框中的数据。如果没有直接的查询可用,也可以单击右侧的生成器 515)=515}" alt=""
src=" ,在查询生成器中直接创建 SQL 语句。
如果“行来源类型”是“值列表”,直接输入即可,如“男;女;”
如果“行来源类型”是“字段列表”,可单击右侧的下拦箭头,选择某个表,以该表中的字段名称作为列表框或组合框中
的数据。
4.绑定列
在列表框或组合框中进行选择时,所显示出来的数据并不一定就是存储在该字段中的内容。在“绑定列”中设置的列中
的值才是表中真正存储的值。
5.列数
在列表框或组合框中所显示的列数,可以同时显示表中的多列。
6.列标题
用字段名称,字段标题或首行数据作为列表框或组合框中列的标题。如果在列表框或组合框中同时显示多列时,加上
标题方便识别各列的内容。
7.列宽
列表框或组合框中有多列时,可指定每列的宽度,每列宽度之间以英文分号分隔。如列数为 3 列,则可设列宽为:
2;2;2,系统会自动加上 cm 单位;如果某一列无需显示,则列宽设为 0 即可。如:0;2;2。
8.列表行数
是指在组合框中一次最多可以显示的行数,其余的数据需拖动滚动条查看。
9.列表宽度
在组合框中,列表框部分的宽度,可以设为“自动”,也可以设为数值。
10.限于列表
在组合框中,如果允许输入除列表框中值以外的数据,则选择“否”。如果值必须为列表中的一项时,则选择“是”。
第 10 页 共 58 页
示例:
在“产品”表中,设置“供应商 ID”字段的查阅列属性
1.在数据库窗口中,选择“产品”表,单击设计,进入设计视图。可以在最后一个字段的下面的第一个空白行,输入新
字段名称“供应商 2”,设置完相关属性后,可以与“供应商 ID”字段进行比较。数据类型改为数字,在这里说明一下,在
表中相关联的两个字段的数据类型必须相同,而且字段大小也要相同。在本例中因为在“供商表”,“供应商 ID”字段是自
动编号类型,自动编号的字段默认大小是长整型,所以在这里“供应商 2”的数据类型必须为数字,字段大小为长整型。
2.在下半部分窗口中选择“查阅”选项卡,将显示控件改为组合框。
下载 ( KB)
2008-4-15 15:32
图14
3.在行来源类型中选择“表/查询”。
4.点击行来源右侧的生成器 515)=515}" alt="" src=" 按钮,在显示
表中,选中“供应商”表,点添加后关闭。从表中选择字段供应商 ID,公司名称,可以双击,也可以拖入下方的字段中。
设置公司名称字段的排序为升序,代表组合框中的供应商按名称进行排序。
下载 ( KB)
第 11 页 共 58 页
2008-4-15 15:32
图15
点关闭按钮,跳出提示窗口
下载 ( KB)
2008-4-15 15:32
图16
点“是”
5.在绑定列中填入 1,代表该字段存储的值是查询结果中第一列“供应商 ID”中的值。要求这两者的数据类型必须相同,
本例中都为长整型。
6.在列数中填入 2,代表有两列。
7.列标题选“否”。
8.列宽中填入 0;2。罗斯文示例中,第 2 列的宽并没有填入,这是因为列表宽度设为了自动,不隐藏的宽度都会根据字
段的大小自动显示出来。
9.列表行数默认为 8。
10.列表宽度为自动,限于列表选“是”。
下载 ( KB)
2008-4-15 15:32
图17
11.关闭设计视图并保存修改,切换到数据表视图,体会查阅列的用法。
客户表及运货商表
“客户”表记录的是罗斯文公司的客户信息,类似于“供应商”表。
第 12 页 共 58 页
下载 ( KB)
2008-4-15 15:53
通过对“客户”表设计视图的查看可以发现表中的“客户 ID”字段与前几个表中的 ID 字段不同,没有采用自动编号的数
据类型,而是用了文本类型,长度为5。这个“客户 ID”字段也是作为主键的,也就是说不允许在该表中输入重复的客户
代码。在“客户 ID”字段中还设置了“输入掩码”的属性,“>LLLLL”,“>”是将所有输入的字符自动转为大写,这样在输入
时就不用理会大小写,“L”代表字母 A-Z,是必选项。这样设置的意思就是在“客户 ID”字段中必须输入 5 个字母,不能输
入其他的字符或者少一位。
“输入掩码”可以帮助客户准确地输入数据,避免不必要的错误。比如可以用“000000000000000999”来作为身份证的输入
掩码,既可以输入 15 位数字,也可以输入 18 位数字,这里的0和 9 都是输入掩码的常用控制字符,0 代表必选的数字项,
9 代表可选的数字和空格。如果想了解有关更多的输入掩码,可以把光标放在这一属性栏里,按 F1 查看帮助,学会用帮
助可是个好习惯哦。
另外“格式”属性也是对字段的格式作的规范,要注意两者的区分。“输入掩码”是控制输入和保存方式的,而“格式”属
性是控制输出和打印方式的,如在“输入掩码”中使用“>”代表的是不管输入字符是大写还是小写,在数据库中保存的都会
是大写的字符,而如果在“格式”中使用“>”代表的是在该字段中显示为大写,而不管实际存在数据库中字符的大小写。如
果一个字段既定义了“格式”属性又定义的“输入掩码”属性,则在显示数据时,“格式”属性优先于“输入掩码”属性,而在保
存数据时则相反。
“客户”表中其他字段都采用文本类型。
“运货商”表记录的是帮助罗斯文公司运送货物的公司的联系信息。这个表中没有新的知识点,不再进行细讲。
雇员表
“雇员”表记录的是罗斯文公司的雇员信息。
第 13 页 共 58 页
下载 ( KB)
2008-4-15 15:59
雇员的姓氏和名字分别用两个字段来代表,这样设计是考虑到能把信息拆分的更细,方便对更细的信息进行处理,
比如可以按照姓氏来进行统计等等,当然如果没有这种必要的话,完全可以用姓名一个字段来处理。本例中对地址和电
话都进行了拆分的处理方法。
下载 ( KB)
2008-4-15 15:59
选中“雇员”表,单击设计按钮,进入表设计视图。
“雇员 ID”是自动编号的主键,“出生日期”是“日期/时间”类型,它的“格式”属性是“yyyy-mm-dd”,表示显示时的格式,
“有效性规则”属性是“<Date()”,Date()是个日期函数,取的是系统的当前日期,这样设置防止由于疏忽而输入比当天还大
的出生日期。
第 14 页 共 58 页
“照片”字段采用的是“文本”类型,查看一下记录会发现,记录的只是照片的文件名字而已,这和“类别”中的“图片”字段是
有区别的,这也是一种记录图片信息的方法,将来图片在窗体中的显示可以通过加载文件路径的方式来处理。这样处理
要求存放图片的路径与图片名称不能发生改变,一旦改变在窗体中就会无法显示出照片,这是与 OLE 类型的对象不同的
地方。
“上级”字段记录的是某个雇员的上级主管是谁。由于上级主管本身也是公司雇员,因此上级主管的信息也会记录在“雇
员”表中。为了避免录入时的重复输入,在此字段也设置了“查阅”属性,并且字段的数据类型是“数字”,说明在这一字段
保存的是“雇员 ID”的信息,查看“上级”字段的“查阅”选项卡,显示控件为组合框,在录入时让用户以组合框的形式进行
选择。单击“行来源”右侧的生成器按钮,进入查询生成器,
下载 ( KB)
2008-4-15 15:59
在示例中有4个字段,“雇员 ID”是作为绑定字段的,“姓名”字段是个表达式,它用了一个“&”字符串连接运算符,
将“姓氏”和“名字”连在一起成为新的字段。另外还有两列“姓氏”和“名字”,显示的属性未打勾,代表并不显示,只是作为
排序的依据。在此处其实可以直接按“姓名”来排序,而不用选择“姓氏”与“名字”字段,效果是一样的。
下载 ( KB)
2008-4-15 15:59
订单表
“订单”表记录的是客户订货的主信息表,记录了订单 ID,客户,雇员,运货商,运费,及相关的订购日期,到货、
发货日期,表中还有6个字段用来记录货主的联系信息。
第 15 页 共 58 页
下载 ( KB)
2008-4-15 16:09
初看上去,好象这并不符合数据库设计的规范,这主要是由于罗斯文公司的客户每次订货时收货地址很少重复,而
是订货时才指定,因些无法记录下确定的货主信息。一般我们通常用得比较多的情况是客户一般就是收货的货主,客户
确定下来后,收货人的相关信息也就定下来了,这时后面的6个字段都是可以省略的。
下载 ( KB)
2008-4-15 16:09
查看“订单”表的设计视图,“订单 ID”是自动编号的主键,“客户 ID”、“雇员 ID”、“运货商”字段分别是客户表、雇员
表和运货商表中的主键,都设置了查阅属性,以组合框的形式提供选择。这个表中也没有什么新的知识点。
订单明细表
第 16 页 共 58 页
“订单明细”表是对“订单”表中“订单 ID”的具体的产品订购信息的补充说明。包括产品的名称、单价、数量和折扣。
下载 ( KB)
2008-4-15 16:12
下载 ( KB)
2008-4-15 16:12
查看“订单明细”表的设计视图,发现表中的主键设置与其他表不同,是用“订单 ID”和“产品 ID”联合起来作为主键的。也
就是说同一份订单中有多种产品,而每一种产品可能会出现在不同的订单中,只有“订单 ID”和“产品 ID”同时确定的记录
才是唯一的。
设多字段主键时,需先选中多个字段,然后单击工具栏上的主键按钮 即可。
“产品 ID”字段来自“产品”表中的主键,设置了查阅属性,“订单 ID”与“订单”表中的主键“订单 ID”保持一致,这里并没有
设置查阅属性,这是由于考虑到以后采用来主子窗体的形式来记录两个表中信息,而作为链接字段的“订单 ID”是自动同
步的,不用输入。
单价、数量、折扣字段中设置了相应的格式、默认值、有效性规则与有效性文本,可以在实际设计时参考其中的设置,
其中单价的格式可改为货币形式即可。
到此所有的表都学完了,表设计是整个数据库开发中的基础,是非常重要的。要合理的划分各表,设置好表中的主键与
第 17 页 共 58 页
索引,同时要多站在客户的角度,在录入方面作好细节的设置,如查阅属性的设置,输入法的开关,有效性规则的设置,
有效性广本的提醒等。
表之间关系:
ACCESS 数据库是关系型数据库,与其他的关系型数据库一样,也具有三种常用关系:一对一关系、一对多关系和多对
多关系。
一对一关系是指两个表之间的记录是一一对应的关系,这种关系用的比较少。
一对多关系,是指 A 表中的一条记录,可以与 B 表中的多条记录相对应。如“类别”表中的“类别 ID”与“产品”表中的“类
别 ID”就是一对多的关系,一个类别对应多个产品。
多对多关系是指 A 表中的一条记录,可以与 B 表中的多条记录相对应,同时,B 表中的一条记录也可以与 A 表中的多条
记录相对应。一般的建立多对多关系时,需要一个中间表,通过中间表同时与两个表 A、B 之间产生一对多的关系,从
而实现 A 与 B 之间的多对多关系。如“订单”表与“产品”表就是多对多的关系,一份订单中有多种产品,一种产品会同时
出现在多种订单上,中间表就是“订单明细”表。
建立了一对多关系的表之间,一方中的表叫“主表”,多方中的表叫“子表”;两表中相关联的字段,在主表中叫“主键”,在
子表中称“外键”。
在建立了关系之后,打开表时,会发现最左侧多了一列“+”,单击“+”号,可以展开另一个数据表,这就是主表中关联的
子表。如果子表中还有对应于它的子表,则还可以进一步一层层的展开。这种关系应用在窗体中便是主子窗体。
下载 ( KB)
2008-4-15 16:24
第 18 页 共 58 页
要查看或编辑表中关系,可以点击工具栏上的关系按钮,或从菜单栏“工具-关系”中进入关系界面。
下载 ( KB)
2008-4-15 16:24
在关系连接线上双击,或单击右键选择编辑关系,可以查看已经建立的关系,或者进行修改,如果要删除,直接选中删
除即可。
关系的另一个重要的功能便是能保持各个表数据之间的完整性。
下载 ( KB)
2008-4-15 16:24
我们在“订单”表与“订单明细”表的关系编缉窗口,可以在窗口的下半部分看到关系的相关属性。“实施参照完整性”是指不
能在相关表的外键字段中输入不存于主键中的值,在例中表现为在“订单明细”表中,不能录入“订单”表中不存在的“订单
ID”。“级产删除相关记录”,是指在主表中删除记录时会把相关子表的数据也一起删除,避免出现数据混乱,如在“订单”
表中删除每个“订单 ID”的记录时,“订单明细”表中所在有关“订单 ID”的记录也会一起删除。“级联更新相关字段”是指主
第 19 页 共 58 页
表中的主键修改,子表中的相关字段会自动更改。如我们在“客户”表中修改了“客户 ID”,那么“订单”表中的“客户 ID”会
自动更新。在罗斯文数据库中,只有“客户”表与“订单”表中的关系用到了级联更新,基他主表中的主键都是自动生成 ID
号,不存在修改情况,所以也用不着级联更新
查询的具体分析:
一般的在表设计完成阶段以后就可以进行窗体的设计,然后再根据需要完善报表功能。在窗体与报表设计过程中会较
多的使用到查询,一般的可以要据需要随时建立。不过为了先让大家都查询有个系统的了解,所以我们把罗斯文数据库
中的查询放到前面来看。
查询一般可以分为五种基本类型:选择查询,参数查询,交叉表查询,操作查询和 SQL 查询。用得最多的应是选择查
询。可以结合罗斯文中的实例一起来学习一下。罗斯文数据库中共有21个查询,这些查询分别为窗体和报表提供了数
据源,我们挑选其中的一些来学习。
1.订单查询:
订单查询是为“订单”窗体提供数据的,包含订单表中的全部字段和客户表中的部分字段。一般我们在设计查询时用的
最多的是用设计视图创建查询。由于订单查询是一个比较简单的查询,所以我们通过该查询来学习一下怎样通过简单查
询向导来创建最简单的查询,然后再利用设计视图来查看和修改。
在数据库的查询对象窗口,双击“使用向导创建查询”
下载 ( KB)
2008-4-15 16:47
或者单击“新建”按钮,在跳出的“新建查询”的窗口中选择“简单查询向导”
下载 ( KB)
2008-4-15 16:47
第 20 页 共 58 页
在“表/查询”中选择“表:订单”,选中该表中的所有字段加入到“选定的字段”中
下载 ( KB)
2008-4-15 16:47
再从“表:客户”中选择字段公司名称,地址,城市,地区,邮政编码,国家
下载 ( KB)
第 21 页 共 58 页
2008-4-15 16:47
单击“下一步”,选择“明细”;如果要在查询中实现将记录进行分组,计数、求和、求平均值等计算,则要在这一步选
择“汇总”进入“汇总选项”进行相应的设置。
下载 ( KB)
2008-4-15 16:47
选择“下一步”,给查询起名“订单 查询”,单击“完成”,自动打开查询,显示查询结果。
第 22 页 共 58 页
下载 ( KB)
2008-4-15 16:47
如果要对查询进行查看或修改可以进入设计视图中,从菜单“视图”中选择“设计视图”,即可进入设计视图界面。当然
工具栏也有“视图”按钮。
下载 ( KB)
2008-4-15 16:47
设计视图分为上下两上窗口,在上面显示查询中要用到的数据源来自于哪些表或查询,在下面列出的是查询结果中需
要用到的字段,该字段来自哪个表,哪个字段需要设置排序方式,是否需要显示该字段,以及查询条件等。
很多查询只需查询出满足条件的记录,并不需要全部的记录,这样就需要在“条件”中输入条件,一般用表达式来表示,
只有满中表达式的记录才被显示出来。因此我们需要了解一下表达式。
表达式:
表达式是许多 Microsoft Access 运算的基本组成部分。表达式是可以生成结果的运算符号和操作数的组合。例如,可
以在窗体或报表的控件中使用下列表达式来显示“小计”和“运货费”控件的数值总和:= [小计] + [运货费]
常见的运算符如算术运算符“=”,“+”,“-”,“*”,“/”;比较运算符“>”,“<”,“>=”,“<=”,“<>”,“=”;逻辑运算符
“and”,“or”,“not”;连接运算符“&”,“+”;及常用的!和.(点)运算符。
常见的操作数如字符串,日期/时间值,常量,变量,函数及引用窗体或报表中的字段值,控件值或属性等。
常见表达式示例:
数学及比较运算表达式
表达式 说明
=[数量]*[价格] 计算数量与价格的乘积,可以得出总价
=[到货日期]-[发货日期] 计算两个日期之间的天数
>2500 比 2500 大的数
日期表达式
表达式 说明
第 23 页 共 58 页
Between #1997-01-01# And #1997-12-31# 在 1997-01-01 各 1997-12-31 之间的数据
<#2007-12-30# 2007-12-30 以前的数据
<Date()-30 30 天以前的数据
=(Date()-[出生日期])/365 计算年龄
Month([出生日期])=3 3 月份出生的人
逻辑运算表达式
表达式 说明
“北京” or “上海” 城市为北京或上海的数据
Is Not Null 不为空
“性别”= “男” and “年龄”>30 大于 30 岁的男性数据
= “中国” & “北京” 值为 “中国北京”
通配符表达式
表达式 说明
Like “张*” 以张开头的数据
Like “张?” 以张开头后面还有一个字的数据
聚合函数表达式
表达式 说明
Sum([数量]*[价格]) 求数量和价格相乘后的和
Avg(费用) 求费用的平均值
Count(*) 计算记录条数
2.“当前产品列表”查询
当前产品列表统计出未被中止的产品。
在数据库的查询对象窗口,双击“在设计视图中创建查询”或单击“新建”按钮,在跳出的“新建查询”的窗口中选择“设
计视图”,进入设计视图界面,从显示表中添加“产品”表。选中“产品 ID”,“产品名称”,“中止”三个字段(注:选中字段
可以把字段从设计视图界面的上方拖到下方,也可以双击字段名称),去掉“中止”下面“显示”的勾,在条件一栏输入
“no”,代表只查询出未被中止的产品,但只要显示产品的 ID 和名称就行了,是否中止的状态不用显示出来。我们还想将
第 24 页 共 58 页
输出的结果按照产品名称进行排序,在“产品名称”下面的“排序”栏里选中升序。这样查询就完成了,点保存,给查询起个
名字就可以了。
下载 ( KB)
2008-4-16 11:15
我们打开罗斯文数据库中的当前产品列表查询,会发现数据源是“产品列表”,不是“产品”表,这里是用到了表的别名,
一般的我们在查询中为了方便,经常会给比较长的表名取个短一些的名称,更方便引用表。方法是在显示的表上点击鼠
标右键,选择属性,在别名中填上合适的别名就行了。
下载 ( KB)
2008-4-16 11:15
3.“各类产品”查询
各类产品查询为各类产品报表提供数据源,在查询对象中选中“各类产品”,单击“设计”按钮,
第 25 页 共 58 页
下载 ( KB)
2008-4-16 11:22
我们发现默认的是按 SQL 视图显示的,这时从“视图”中选择“设计视图”即可显示设计视图,当然要再切换到 SQL 视
图,再从“视图”中选择“SQL 视图”即可。通过在“设计视图”中设计查询,再切换到“SQL 视图”中查看 SQL 语句也是我们
学习 SQL 语句的方法。
下载 ( KB)
2008-4-16 11:22
查询的数据来自“类别”表和“产品”表,“类别名称”字段和“产品名称”字段的“排序”都是升序,查询结果将先按类别名
称排序,当类别名称相同时再按照产品名称排序。中止条件为“no”,结果只包含未被中止的产品。
4.“按汉语拼音顺序的产品列表”查询
这个查询是为“按汉语拼音顺序的产品列表”报表提供数据源的。双击查询即可运行并显示查询的结果,在查询结果中
并未按拼音顺序来排列,这个功能是在报表中实现的。
进入设计视图
第 26 页 共 58 页
下载 ( KB)
2008-4-16 11:22
这个查询的数据来自两个表,“类别”表和“产品”表。查询的结果中只包含未被中止的产品,因此在产品字段上设置了
条件,这里0代表“否”,在 ACCESS 中用0代表“否”,FALSE,“假”,而用-1 代表“是”,TRUE,“真”
5.十种最贵的产品
进入设计视图:
下载 ( KB)
2008-4-16 11:31
查询的数据来自于表“产品”,选用的字段只有产品名称和单价两个,如果要给选择的字段另外取个名称,可以给这个
字段前面添加名称,中间用英文状态的冒号“:”隔开,如上图。
要查询出十种最贵的产品,只要将产品按产品单价降序来排列再取前十种即可。在单价字段上设好“降序”排列,在工
具栏上的上限值列表框 515)=515}" alt="" src="
中输入 10 即可。双击查询查看运行结果,体会在设计视图中设置的作用。
6.季度订单
这个查询列出了在 1997 年度有订单的客户,不是某个季节的记录,而是含盖了全年度的记录,这个结果用于给“季度
订单”窗体提供数据源,在窗体中再具体实现按四个季度显示统计结果。
进入设计视图:
第 27 页 共 58 页
下载 ( KB)
2008-4-16 11:31
这个查询的数据来自于“客户”表和“订单”表,“订单”表中用到的订购日期只是作为一个条件项,不用被显示出来,条件
里是一个表达式,代表的含义是订购日期介于 1997 年 1 月 1 日到 12 月 31 日之间的,这里用到“between…and…”这种语
法。日期型的数据应该在两侧加上“#”号。接下来我们还要考虑到有些客户可能在 1997 年度有多次订货,而我们希望的
结果是每个客户只出现一次。这时可以在查询视图的上半部分窗口的空白处右击鼠标,从浮动菜单中选择“属性”,也可
直接在工具栏上选择“属性”
下载 ( KB)
2008-4-16 11:31
第 28 页 共 58 页
设置查询属性中的“唯一值”属性为“是”即可。设置了这个属性就能保证每组中的重复数据只会列出一个。
在这里还要提一下的是要注意一下选择表的联接类型,在联接线上双击可以显示联接属性,联接属性分为三种,可以根
据要求选择。
下载 ( KB)
2008-4-16 11:31
一般默认的联接类型为1,只包含两个表中联接字段相等的行,在本例中改成联接类型为3,包含订单表中的所有记
录,在 SQL 语句方面分别体现为内联接,左联接和右联接,这是有区别的,可以参考运行结果体会联接的作用。
7.扩展订单明细
扩展订单明细为窗体“客户订单子窗体 2”提供数据源,查询中带有计算字段,查询出每个订单每种产品的一些明细信息。
进入设计视图:
下载 ( KB)
2008-4-16 11:36
查询的数据来自于“产品”表和“订单明细”表,查询结果按订单 ID 升序排列。
查询中的字段总价是个计算字段,总价为该字段的名称,计算表示用“订单明细”表中的“单价”乘以“数量”后再乘以(1-[折扣]),相当于
第 29 页 共 58 页
算出了打过折后的总价。字段中用到一个 CCur()转换函数,它的作用是将数据转换为货币类型,另外表达式中用了先除以 100,再乘
以 100 的做法。查了相关帮助,CCur()转换函数应是精确到小数点后面4位,这样先在转换函数中除以 100,然后再乘以 100,相当
把数据还原,同时小数点后面保留两位小数。不过我试了直接用 CCur([订单明细].[单价]*[数量]*(1-[折扣])),得到的结果也是两位的?欢
迎共同讨论。
8.订单小计
订单小计统计出每个订单上各种产品的销售金额的总计金额,为汇总销售额等多个查询提供数据。
进入设计视图:
下载 ( KB)
2008-4-16 11:36
查询的数据来自于“订单明细”表,选用的字段只有一个“订单 ID”,小计字段是个计算字段,小计是这个字段的名称,
后面是计算表达式。计算方法同“扩展订单名细”查询中的“总价”字段,这里由于只有一个表,所以[订单明细].[单价]可以
直接写成[单价],该字段为:小计: CCur([单价]*[数量]*(1-[折扣])/100)*100。本例到这里只是计算出了每个订单 ID 中每
种产品的总价,而我们要统计出的是每个订单 ID 中所有产品总价的和,所以我们要对订单 ID 进行分组,要用到“总计”
行的功能,“总计”行默认是不显示的,可在设计窗体的下半部分右击鼠标,选择“总计”,或者单击工具栏上的按钮∑,这
样都会多出一行总计来,在总计行,可从下拉框中对每个字段选择相应的操作,可以作为分组依据或条件字段也可以选
择聚合函数或其他函数来对字段进行计算,如果要自己写表达式,则选择表达式。在本例可以把“订单 ID”字段设成分组
字段,对“小计”字段要进行求和,只要选成“总计”就可以了。罗斯文的示例中并没有选用“总计”的功能,而是对“小计”字
段设成了“表达式”,而在表达式中加上了求和函数 Sum(),大家可以比较一下,用这两种方法生成的查询运行结果都是一
样的,而 SQL 查询的语句也是一样的。
对于表达式如果一开始觉得写起来有些困难的话,可以借助于生成器来生成,生成器中有数据库中的各种对象,操作
符以及函数,只要进行选择再修改一下就可以了。方法是在字段上右击鼠标,从中选择“生成器”,在生成器的下方选择
第 30 页 共 58 页
相关参数,计算符等,表达式生成在上方可进行修改。
下载 ( KB)
2008-4-16 11:39
下载 ( KB)
2008-4-16 11:36
9.按年度汇总销售额
“按年度汇总销售额”查询为“按年度汇总销售额”报表提供数据,另外“按季度汇总销售额”查询与本查询完全一样,也就是
本查询也能为“按季度汇总销售额”报表提供数据源,按季度的功能是在报表中实现的。本例要统计出已经发货的各订单
的计单 ID 号及各订单小计金额。
第 31 页 共 58 页
进入设计视图:
下载 ( KB)
2008-4-16 12:05
查询的数据来自于查询“订单小计”及“订单”表,取“订单”表中的发货日期字段,并按该字段升序排列,另外该字段还设了
条件,为“Is Not Null”,这个表达式代表数据不为空,没有填写过发货日期的记录则为空,代表尚未发货,并排除在外。
10.按金额汇总销售额
“按年度汇总销售额”查询统计了 1997 年订单的小计金额在 2500 元以上的订单,为“按金额汇总销售额”报表提供数据。
进入设计视图:
下载 ( KB)
2008-4-16 12:05
查询的数据来自于“客户”,“订单”表及“订单小计”查询。对小计字段另取名称为“销售金额”,加上条件“>2500”,表
示只要订单小计在 2500 元以上的记录;发货日期加上条件“Between #1997-1-1# and #1997-12-31# ”表示只要发货日期在
1997 年的记录。两个条件在同一行表示要求同求满足。
第 32 页 共 58 页
11.各国雇员销售额
“各国雇员销售额”查询统计各国雇员的销售情况,为“各国雇员销售额”报表提供数据。
进入设计视图:
查询的数据来自于“雇员”,“订单”表及“订单小计”查询,发货日期字段的条件为“Between [起始日期] And [终止日
期]”,因为表中并没有[起始日期]字段,所以运行时,ACCESS 会将它看作一个参数,并跳出提示框,[终止日期]同理,
在运行时输入正确的参数,并会得到查询结果。
12.各年销售额
“各年销售额”查询统计某一年的每个订单的销售情况,为“各年销售额”报表提供数据。
进入设计视图:
查询的数据来自于“订单”表及“订单小计”查询,年份是个计算字段,用了一个 Format()函数,这是一个文本格式函数,具
体参数及用法请查看帮助。重点来看发货日期的条件设置,这个条件由两部分组成,中间用“And”联结,表示要同时满足
前后两个条件,前面一半为“Is Not Null”代表发货日期不能为空,后面一半为“Between [Forms]![各年销售额对话框]![起始
日期] And [Forms]![各年销售额对话框]![终止日期]”,这也是一个“Between and ”的用法,只不过里面引用了两个窗体中的
参数,[Forms]![各年销售额对话框]![起始日期]代表“各年销售额对话框”窗体中的“起始日期”中的值,[终止日期]同理,在
第 33 页 共 58 页
运行中,如果“各年销售额对话框”窗体是打开的并能读取到相关参数,则直接给出运行结果,否则象“各国雇员销售额”查
询中一样,跳出提示框要求输入。事实上好多报表都会从窗体或报表中读取一些数据作为报表的计算依据,我们要熟悉
这种参数的设置方法。
13.发货单
“发货单”查询详细统计出每个订货单的详细信息,包括订单情况,货主情况等,为“发货单”报表提供数据。
进入设计视图:
这个查询选择的表很多,其实在设计时方法还是一样的,分别选择如上图的 6 个表,根据需要选择相应的字段,其中销
售人字段是个计算字段,把[姓氏]和[名字]联在一起显示,用到一个联接运算符,总价字段也是一个计算字段,与前面例
中的计算方法相同。对于表中设置的一些属性会在查询中直接带过来,如在相联接的两个表“客户”和“订单”表中有相同的
两个字段“客户 ID”,如选择“客户”表中的“客户 ID”显示的是 ID 号,而选择“订单”表中的“客户 ID”显示的是客户名称,
这是由于“订单”表中的该字段设了查阅属性的缘故,不过字段中实际存储的值都是一样的,只是影响显示,可根据需要
从相关表中选择相应字段。在这个查询中在“总计”行对每个字段都采用了“分组”,其实这样的效果和排序是一样的,如不
用“分组”而对每个字段依次进行排序,运行的结果也是一样的。当然如果需要分组计算时,则是不可替代的。
14.各类销售额
“各类销售额”查询为“各类销售额”报表提供数据,统计了 1997 年各类产品的销售情况。
进入设计视图:
下载 ( KB)
2008-4-16 12:09
第 34 页 共 58 页
这个查询的数据来自于3个表及一个“扩展订单明细”查询,查询中对类别及产品名称进行了多级分类,再对分类后
的产品求出销售总金额。所以在查询中“类别 ID”,“类别名称”及“产品名称”字段的“总计”行都设为分组字段,总价字段
是计算字段要进行求和,所以设成“总计”,另取名称为“产品销售额”。在这种多级分类统计的查询中一样可以设置条件,
本例中的订购日期,不要显示,只是作为条件字段,所以“总计”行设为“条件”,条件为“Between and ”的名型,查询出 1997
年的数据。
15.1997 年产品销售额
“1997 年产品销售额”查询统计出不同类别的产品在不同季度的销售额,为“1997 年各类销售总额”查询提供数据。
进入设计视图:
下载 ( KB)
2008-4-16 12:09
查询的数据来自于上图中的四个表,其中“发货季度”字段是个计算字段,用到了一个日期函数 DatePart(),具体的参
数和用法可以查看帮助,在本例中取日期中的季度,结果为 1-4 中的一个值,后面加上一个联接字符串,现加上季度,
可以形成“1季度”这样的字符串。在“总计”行:需要分组的字段“类别名称”,“产品名称”,“发货季度”设成“分组”,而且
分类应是有先后的,大类放在前面;需要设置条伯的字段“发货日期”设成“条件”;需要计算的计算的字段“产品销售额”设
成“表达式”。
16.1997 年各类销售总额
“1997 年各类销售总额”查询以“1997 年的总销售额”查询为数据,进一步查询出每种类别的销售总额,比较简单,详见设
第 35 页 共 58 页
计视图:
下载 ( KB)
2008-4-16 12:19
其实本例也不一定非要通过“1997 年的总销售额”查询来产生。也可以如下图设置生成,运行结果也是完全一样的。
下载 ( KB)
2008-4-16 12:19
17.高于平均价格的产品
“高于平均价格的产品”查询,以产品平均价格作为衡量依据,统计出比平均价格高的产品。
第 36 页 共 58 页
进入设计视图:
下载 ( KB)
2008-4-16 12:19
这个查询的数据来自于“产品”表,选择的字段也很简单,只有两个“产品名称”与“单价”,这个查询的关键在于设置“单价”
字段的条件,并不是所有的产品都显示出来,单价大于平均价的才显示出来,条件中用到比较运算符“>”,平均价格哪里
来呢,在本例中用了一个 SQL 查询语句,也叫子查询。象这种在条件中包含 SQL 语句的查询叫嵌套查询,可以进行多层
嵌套。用“Select AVG([单价] From 产品”来求出产品表中所有单价的平均值。本例的条件中如果不用子查询,改用函数也
是可以的,可以改成“>DAvg("单价","产品")”。
18.各城市的客户和供应商
“各城市的客户和供应商”查询是一个联合查询,它将“客户”表和“供应商”表的信息联合在一起,查询出每个城市的客户及
供应商。联合查询由多个 Select 语句组成,各语句之间用关键字“UNION”联接起来。要求在第一个查询语句中就要列出
所有的字段,字段名也以第一个查询中的为准,后面各查询语句中所用的字段的个数,数据类型,顺序都要与第一个查
询中相同。本例中的查询语句如下:
Select
城市,
公司名称 , 联系人姓名, "客户" AS [关系]
FROM 客户
UNION Select 城市, 公司名称, 联系人姓名, "供应商"
FROM 供应商
ORDER BY 城市, 公司名称;
前两行中是第一个查询语句:从“客户”表中选择“城市”、“公司名称”、“联系人姓名”,另加一个字段“关系”,以字符串“客
户”作为“关系”字段的值。第三每四行中包含“UNION”关键字及第二个查询语句:从“供应商”表中选择“城市”、“公司名
称”、“联系人姓名”,另加一个字段,以字符串“客户”作为字段的值,这里字段名省略,因为默认会取第一个查询语句中
的字段名。最后一行是个将查询出来的结果按照城市和公司名称的升顺来进行排序。
第 37 页 共 58 页
19.各种产品的季度订单
“各种产品的季度订单”查询是一个交叉表查询,它以行列交叉的行形列出不同产品,不同客户在 1997 年的各个季度中所
有的订购额。为“季度订单”子窗体提供数据。
一般简单的交叉表查询可以利用“交叉表查询向导”来生成,不过本例中的数据来源于多个表,还有计算字段,因此需要
在设计视图中创建。
进入设计视图:
下载 ( KB)
2008-4-16 12:24
查询的数据来自于“订单”,“订单明细”,“产品”表。要实现交叉表查询,需要从菜单“查询”中选择“交叉表查询”,这样就
会在设计视图的下半部分多出“总计”行及“交叉表”行而少了一行“显示”。因为交叉表需要在行列的交叉处显示汇总结果,
而这个结果则是根据行列的多重分组计算出来的。然后选择相应的字段,在“交叉表”行及“合计”行中对各字段进行设置:
本例中“产品名称”,“客户 ID”,“订购年份”作为行标题,其中“订购年份”字段中用到“Year()”函数,代表取订购日期中的
年份的值;订购年份后面一个字段用来作为列标题,该字段也是一个计算字段,用到一个“DatePart()”函数,及“&”联合运
合符。显示的结果为"第 1 季度","第 2 季度","第 3 季度","第 4 季度"四个中的一个;“产品金额”设置为“值”是个计算字段,
计算方法同前面的查询;对于分组计算来说,交叉表中的行与列是分组依据,值是计算结果,即总计行的设置是:“产品
名称等前 4 个字段设成“分组”,“产品金额”设为表达式。“订购日期”是个条件这段,并不显示,条件为 1997 年的数据。
可双击查询查看运行结果,对照生成的结果来查看设置的具体效果。
到这里查询也全部结束了,只有少数几个没看,没有新的知识点,所以略过了。
报表分析
报表的具体分析:我个人的操作习惯,一般的在表设计阶段完成以后,我就直接进入到窗体设计阶段,根据需要建立查
询,报表功能放在最后完善。因为在窗体的设计中有调用到报表,所以我们在学完查询后,再先来学习一下报表,把窗
体的制作放在最后来学吧。
窗体主要是为了实现数据的采集,而报表则是用于数据的显示输出或打印,在数据展示方面具有特长,可以对数据进行
第 38 页 共 58 页
分组和汇总显示。
报表的构成:报表由控件和节组成,节又可分为主体节与页眉、页脚节。而页眉页脚根据对象的不同,再进行细分为报
表页眉页脚、页面页眉页脚、组页眉页脚。如果有多个分组时,则按照分组级别进行嵌套。
主体节是报表的核心部分,凡是希望按顺序列出的数据,都应以控件形式放在主体中,一般用得最多的控件便是文本框
了。而如果希望作为标题、分类依据、汇总信息等则应该以控件的形式安排的页眉或页脚。
这里重点要了解各种不同的页眉页脚的控制范围是不同的。报表页眉是指在整个报表的开头出现一次,报表页脚则是指
在整个报表末尾出现一次。页面页眉与页脚是指报表有很多页,那么每个页面的最上面与最下面出现的便是页面页眉与
页面页脚了。组页面页脚的作用范围,便只在自己分组的范围内了,如果按部门分组,会有好几个部门,那么在部门页
眉页脚中设置的内容,在每个部门的分组页面与页脚中都会重复出现。
了解了这些基本构成后,我们还是结合罗斯言文实例来看吧。
1.“按汉语拼音顺序的产品列表”报表
“按汉语拼音顺序的产品列表”报表是按产品名称的第一个字来进行分组显示产品信息的报表。在报表中除了产品名称外,
还列出了类别名称,单位数量和库存量的数据。
首先我们还是来学习一下如何用向导来创建报表,然后再利用设计视图来查看和修改,以后的实例将直接在设计视图中
进行学习。
在数据库的报表对象窗口,双击“使用向导创建报表”
下载 ( KB)
2008-4-16 13:15
或者单击“新建”按钮,在跳出的“新建报表”的窗口中选择“报表向导”
下载 ( KB)
2008-4-16 13:15
第 39 页 共 58 页
选择报表的数据来源表或查询为:“按汉语拼音顺序的产品列表”查询
下载 ( KB)
2008-4-16 13:15
选择需要的字段,点下一步:
下载 ( KB)
2008-4-16 13:15
第 40 页 共 58 页
选择查看数据的方式为通过产品,点下一步:
下载 ( KB)
2008-4-16 13:15
添加分组级别:产品名称,并点击“分组选项”对分组间隔进行设置
下载 ( KB)
2008-4-16 13:15
第 41 页 共 58 页
我们选择按“第一个字母”,设好以后点“下一步”
下载 ( KB)
2008-4-16 13:15
下载 ( KB)
2008-4-16 13:15
选择排序字段为“产品名称”,在这里还有一个“汇总选项”,在本例中用不到,在需要分类汇总数据时,就从这里进行设置。
第 42 页 共 58 页
点“下一步”
下载 ( KB)
2008-4-16 13:15
选择报表的布局,每种布局的显示方式可以选中看左边的示例。在这里我们选择“分级显示 2”,点“完成”。 自动打开报
表,显示报表的显示结果。
下载 ( KB)
2008-4-16 13:15
接下去我们进入设计视图进行修改,从菜单“视图”中选择“设计视图”,即可进入设计视图界面。当然工具栏也有“设计”按
钮 515)=515}" height=25 alt="" src="
第 43 页 共 58 页
width=38>。
下载 ( KB)
2008-4-16 13:15
设计设图中“报表页眉”、“页面页眉”、“产品名称页眉”、“主体”、“页面页脚”代表各个节的名称,在节的节面有个小方框
按钮一样的东东是节选择器,用鼠标点击可以选择相应的节。
首先看下“报表页眉”中是一个标签控件,我们把文字内容改为“按汉语拼音顺序的产品列表”,选中标签,把字体设成宋体,
12 号,加粗。
下载 ( KB)
2008-4-16 13:15
调整位置,在标签的下方加入一个文本框,把文本框的“控件来源”属性设置成:“=Format(Date(),”yyyy-mm-dd”)”,其中 Date()
函数用于获取系统的当天日期,Format 函数将改变日期的显示格式为“2008-03-01”这样的格式。
其他的比如水平线之类的只是依据个人的爱好来设置,如果不要就删除掉,如果要的话,可以从控件中找到直线工具,
直接画出一条即可。具体的显示效果可以通过在设计视图和预览视图中切换来观察设置的效果。
报表中的分组设置通过“排序与分组”来实现,从视图菜单中选择“排序与分组”,或在工具栏上找到 515)=515}"
第 44 页 共 58 页
alt="" src="
下载 ( KB)
2008-4-16 13:15
在这个页面可以设置排序字段,也可以设置分组字段,具体得可以选中这一行,在下面的组属性中查看,如果组页眉与
组页脚的属性都为否,就说明这只是一个排序的字段。否则说明这是一个分组字段。在这里分组形式可以根据分组的字
段不同,提供一些常用的分组方法,如果是文本型的提供按前辍字符进行分组,如果是日期型的,还可以设置成按年,
月,季等进行分组。保持同页的设置用于控制这一个分组中的数据要不要显示在同一页,可以改为整个组。
组页眉的标题中是一个文本框,用到一个 Left$函数,这里已经自动生成了,我们可以发现罗斯文中有到的是 Left 函数,
这两个函数的作用是相同的,只是与 LeftB 相区别,具体可查看帮助。
页面页脚上有页码显示,可以从插入菜单中选择页码命令,也可以直接加一个文本框,在控件来源属性中设置。这里[page]
代表当前页,[pages]代表总页数。
第 45 页 共 58 页
2.“按季度汇总销售额”报表
“按季度汇总销售额”是显示各年同一季度销售额的汇总报表。在设计视图中打开“按季度汇总销售额”报表。
下载 ( KB)
2008-4-16 13:34
在左上角的报表选择器上双击,跳出属性窗口,首先看一下报表的记录源是“按季度汇总销售额”。
报表页眉中有一个标签,一个文本框,文本框的值为“=Format(Date(),"yyyy-mm-dd")”,按格式显示系统的当天日期。
页面页眉中只有一条水平线,每页的顶端都会打印一条水平线。
看一下这个报表的排序分组会发现本报表进行了二层的分组嵌套。
下载 ( KB)
2008-4-16 13:34
第一个分组字段为一个表达式“=DatePart("q",[发货日期])”,这个函数的意思为取发货日期中的季节,也即是按季节分组。
第 46 页 共 58 页
第二个分组字段为发货日期,但分组形式不是每一个值,而是年。这里分别给我们演示了两种不同的用法,其结果是一
样的。也就是说第一个分组字段,我们也可以设为发货日期,然后把分组形式设成季即可。
“=DatePart("q",[发货日期])”页眉中有一个文本框,值为“=DatePart("q",[发货日期])”,代表季节,另个设置了几个标签。还
加了四条直线作为分隔。发货日期的页眉为空,主体也为空,因为主体中一般列出的是满足分组条件的明细记录,在这
里我们只要每一年度的一个合计数,所以内容在发货日期的页脚中。发货日期页脚中有三个文本框,内容分别为
“=DatePart("yyyy",[发货日期])”:将发货日期转换为4位的年份数;“=Count([订单 ID])”:用 Count 函数计算同每一年的
订单 ID 数目;“=Sum([小计])”:用 Sum 函数计算各订单小计的合计数,也即是各年销售额。
“=DatePart("q",[发货日期])”页脚中只有一条水平线,用于标识本组的结束
页面页脚中只包含页码内容,居中显示。
报表页脚无。
3. “按年度汇总销售额”报表
“按年度汇总销售额”报表是显示每年各季度的销售额汇总报表,与“按季度汇总销售额”报表非常近似。只是在分组的层次
上顺序不一样而已。“按年度汇总销售额”报表是先按年分组,在同一年份中的数据再按季度分组。“按季度汇总销售额”报
表是先按季度分组,再统计出各个季度中不同年度的销售额。我们可以对照报表预览对比这两个报表的不同之处。
4.“发货单”报表
第 47 页 共 58 页
“发货单”报表提供在单独的页面打印每张发货单。进入设计视图
下载 ( KB)
2008-4-16 13:34
报表的记录源是“发货单”查询。
第 48 页 共 58 页
页面页眉中有罗斯文公司的名称,公司 LOG,报表名,公司地址、电话、传真,还是日期信息,它会在每一页的顶端显
示。
下载 ( KB)
2008-4-16 13:34
“订单 ID”页眉是组页眉,分组形式为“每一个值”,表示同一个订单 ID 的信息会显示在同一组中,排序次序为降序代表我
们在预览或打印时,最先出来的一份订单是订单号最大的一份订单。订单 ID 页眉中放置的内容为每一个订单中的唯一信
息有收货者和收单者的信息,由两个标签和一些文本框组成。文本框的控件来源来自报表数据源中的字段值。其中用到
一个很长的表达式“=IIf([地区] Is Null,[城市] & "
" & [邮政编码],[地区] & " " & [城市] & "
" & [邮政编码])”,这是一个 IIF 函数,把它分解成三部分来看即可,每一部分是条件,满足条件显示第二部分的内容,
如不满足则显示第三部份的内容,具体的可查看帮助。
而对于每份订单中产品的具体内容,在这里需要列出明细,这部分内容适合在主体中进行显示,本例中包含产品 ID、产
品名称、数量、单价、折扣、总价字段。
“订单 ID”页脚为分组页脚,这里适合显示每个组中的数据汇总信息。在这里计算出了一份发货单的小计金额等于各产品
的总价和“=Sum[总价]”,发货单合计金额等于发货单小计加上运货费“=[发货单小计]+[运货费]”。
当然在这个报表中我们也会学习到如何利用有颜色的水平线及矩形来对数据加以分隔,从而达到美化报表的作用。可结
合报表预览体会设置方法。
.“各类产品”报表
“各类产品”报表是按类别显示库存量,是个比较简单的报表,这里最大的特点是分列打印,这是通过页面设置实现的。
第 49 页 共 58 页
从“文件”菜单中选择“页面设置”,设置打印方向为横向。
下载 ( KB)
2008-4-16 13:41
在“列”选项卡中,设置列数为 3,表示每页分 3 列,列间距表示每列之间的距离。列尺寸中的宽度代表每列的宽。在设置
时,要参考选择的纸张的大小,来设置节的宽度,而如果分多列设置的话,这里每列的宽度乘以列数再加上所有的列间
距的宽度不能大于纸张的宽度。这里的高度设置没发现起什么作用。列的布局中选择先列后行,表示每个分组中的数据
先从新的一列开如,一列显示不下才在第二列显示。先行后列的效果可参见下一个“客户标签”报表。
进入视计视图
下载 ( KB)
第 50 页 共 58 页
2008-4-16 13:41
在设计页面安排控件时要按照设置的列宽来布置,具体可参看标尺。
报表的数据源是“各类产品”查询。
报表页眉中包含一个标签显示的标题及日期。并用灰色作为节的背景色。
类别名称页眉是一个组页眉,在排序与分组中设定“类别名称”字段分组,并显示组页眉和组页脚。组页眉中含组标题“类
别名称”,及为主体节数据提供标题的标签“产品名称:”和“库存量:”,另外还有两条粗水平线,用于分隔。查看组页眉
的属性,在格式页面的新行或新列属性中设成了“节前”。表示在一组显示完后,在下一列中显示下一组的数据。要是设
成无,则下一组的数据会接着本组的数据后面显示。可以更改设置并预览,体会这个设置的作用。
主体节中含“产品名称”和“库存量”,这是明细信息,在主体中显示。
类别名称页脚设置了一个标签及产品数目文本框,控件来源为:“=Count([产品名称])”, Count 是一个计数函数。这里在
每个分组的结果划上一条水平线,并在下面统计出这一分组类别中的产品数量。
页面页脚中包含页码信息。
报表页脚无。
6.“客户标签”报表
“客户标签”报表按 3 列显示客户信息。在报表的页面设置中指定列数为 3,列布局选择按“先行后列”的布局。进入视计页
面
下载 ( KB)
2008-4-16 13:41
报表的记录源为“客户”表。
报表只有一个主体节,主体节中包含 4 个文本框,控件来源中加入了 Trim 函数,去除数据两端的空格再显示。
7.“按金额汇总销售额”报表
“按金额汇总销售额”报表按金额降序显示销售额,并在第一页只显示 10 个最大的客户。以销售金额相差 1000 为一个分
组,每个分组之间以横线隔开,在每页的页脚中显示每页的销售金额合计数。这是一个让我们学习宏运用的示例,本示
例中没有任何代码。
第 51 页 共 58 页
进入报表设计视图:
下载 ( KB)
2008-4-18 10:45
报表的记录源是“按金额汇总销售额”查询。
报表页眉中包含报表标题“按金额汇总销售额”及打印日期。
页面页眉中是为主体进行说明的标题,用标签显示,并以灰色作为背景色。
主体节中包含三个文本框字段,它们对应的控件来源分别为:“销售金额”、“订单 ID”、“公司名称”。主要看最后一个名
为“计数器”的文本框,如下图
下载 ( KB)
2008-4-18 10:45
它的控件来源设为“=1”,并且设置运行总和的属性为“全部之上”,表示将该控件的值随着其在主体中出现的次数累加。
出现第一次时值为 1;出现第二次时,用控件来源中的值 1 加上上次出现的值 1,显示为 2;第三次出现时,用控件来源
中的值 1 加上上次出现的值 2,显示为 3;以此类推。这种方法常用在报表中,用来统计主体中记录出现的次数或用来实
现统计累计数。可以结合本示例来体会作为计数的用处,要体会用作累加的作用,可以把控件来源改为“销售金额”来看。
主体节的下方有一条虚线,这是一个名为“隐藏分页符”的分页符控件,分页符的作用是从放置分页符的位置开始强行分
页,下面的数据从下一页中显示。如果单纯从主体的这个位置放置这样一个分页符的作用是显示一行数据后就分页。但
通过预览可知本例并没有马上分页,击是在第一页显示了十条数据后才分页的。这个功能是通过宏来实现的。
第 52 页 共 58 页
从数据库的对象中选择宏,选中其中名为“按金额汇总销售额”的宏。单击设计,打开宏设计视图
下载 ( KB)
2008-4-18 10:45
“按金额汇总销售额”是一个宏组,其中包含了多个宏,在“宏名”中显示的是在本宏组中存在的宏。在执行宏时,如果指定
了宏名,将按顺序执行宏名下的每个操作,遇到其他宏名时,将停止执行。可以用宏组.宏名的形式来执行宏组中的某个
宏。下面依次讲解宏组中的每个宏:
1.“隐藏分页符”宏的作用是将分页符控件隐藏起来,这样报表就不会分页。它的操作为“SetValue”,表示设置值,在下半
部分的操作参数中,“项目”为“[隐藏分页符].[Visible]”,“表达式”为“No”,表示将“隐藏分页符”控件的可见性属性设为否,
这样这个控件就不会显示了。注释字段描述的是本宏的用法与说明。
2.“显示分页符”宏的作用是将分页符在[计数器]=10 的时候,显示出来,将报表分页。这个宏的操作也是“SetValue”,操作
参数中,“项目”为“[隐藏分页符].[Visible]”,“表达式”为“Yes”。看一下宏的条件一列,设置为“[计数器]=10”。表示只有当
满足这个条件时才将[隐藏分页符]的可见性属性设为是。
3.“隐藏页脚”宏的作用是在[计数器]=10 的时候,取消“销售金额”组页脚中的格式显示。这个宏的操作是“CancelEvent”,
表示取消事件的执行,这个操作没有参数。在哪个事件中执行该宏,那么这个事件即被取消操作。宏的条件为“[计数
器]=10”。
4.“页合计”宏的作用是将“销售金额”文本框的值累加到“页合计”文本框中。宏的操作也是“SetValue”, 操作参数中,“项
目”为“[页合计]”,“表达式”为“[页合计]+[销售金额]”。
5.“新增页”宏的作用是每一个页面开始时,将“页合计”控件中的值设为 0。宏的操作也是“SetValue”, 操作参数中,“项目”
为“[页合计]”,“表达式”为“0”。
第 53 页 共 58 页
学习完宏后,我们来看下各个宏在本报表中是如何调用的,查看主体节的事件
下载 ( KB)
2008-4-18 10:45
主体的格式化事件中设置为“按金额汇总销售额.显示分页符”,表示在格式化主体节时,执行“按金额汇总销售额”宏组中
的“显示分页符”宏。如果满足条件即显示分页符。另外主体的打印事件中设置为“按金额汇总销售额.页合计”,主体中的
每一条记录都会发生 Print 事件,这样当前记录显示一次就会在“页合计”文本框中累加一次,实现了页面的累加功能。
我们再回过头来看下页面页眉的事件
下载 ( KB)
2008-4-18 10:45
在页面页眉格式化中调用“隐藏分页符”宏,表示在显示每页页眉前就先将分页符控件隐藏起来了,配合主体格式化时调
用的宏“显示分页符”,这样就可以实现在第一页显示十条数据的功能。页面面眉打印事件中调用“新增页”宏,表示在每页
页眉显示前把当前页的“页”合计文本框中的值置为 0。
销售金额页脚是一个组页脚,在排序与分组的设置中,只设置了页脚,没有组页眉。分组形式为“间隔”,组间距为
“1000”,表示按销售金额的数值,每隔 1000 分一组,排序次序为降序,这样就会按销售金额由大到小显示。销售金额页
脚中只有一条水平线,用于分隔每组,在格式化事件中调用“隐藏页脚”宏。这是因为在主体中运行了“显示分页符”的宏,
在第十条数据时插入了分页符,这样该组的组页脚就会显示到下一页中,所以这里设置了“隐藏页脚”。
页面页脚中包含一条粗水平线及页码,另外还有一个名为“页合计”的文本框,内容未绑定,页合计中的值是结合页页面
眉打印事件中的“按金额汇总销售额.新增页”宏及主体打印事件中的“按金额汇总销售额.页合计”宏来生成的。
报表页脚无。
8.“各国雇员销售额”报表
本帖隐藏的内容需要回复才可以浏览
“各国雇员销售额”报表实现按国家和雇员分组打印销售额,并计算小计、百分比、总计等。运行时需要输入日期参数。
如果雇员的总销售额>5000 时,还会显示“超额完成”标签。这个报表中没有用到宏,有关功能是通过 VBA 编程来实现的。
第 54 页 共 58 页
进入设计视图
下载 ( KB)
2008-4-29 01:57
报表的记录源是“各国雇员销售额”查询,而“各国雇员销售额”查询是个参数查询,所以在报表运行时提示要求输入参数。
报表页眉中包含报表标题和一个统计的日期范围,这个范围是由一个名为区域的文本框实现的。文本框的控件来源为:“="
销售额:从 " & [起始日期] & " 到 " & [终止日期]”,它用“&”字符串连接符将三部分的字符串连接起来,其中“起始日期”
和“终止日期”是数据源中的参数,可以直接在报表中使用,从而在运行时跳出提示框要求输入。报表页眉设置了背景色。
页面页眉无内容
国家页眉是组页眉,按国家分组。包含一个标签,一个“国家”文本框,用一条粗线作分隔。
“=[姓氏] & [名字]”页眉是一个二层组页眉,嵌套在第一层国家组中,按姓名分组。由于并没有直接的姓名字段,所以将“姓
氏”和“名字”用连字符连起来使用。“保持同页”设置为“与第一条详细记录”,表示该组中的内容,第一条数据要与组页眉
第 55 页 共 58 页
在同一页。本组页眉中有一个显示姓名的文本,及一些提示标签,给主体内容以标示。另外还有一些分隔线。设成红色
字体的“超额完成”是否显示是通过代码来实现的。要在代码编缉器(VBE)中写入代码,我们可以通过事件属性进入 VBE
(VB 编程简介在下一节)。在这里我们先定位到“=[姓氏] & [名字]”页眉,双击该节前的小框框会弹出属性窗口,切换到
事件属性,如下图
下载 ( KB)
2008-4-29 01:57
我们可以在组页眉格式化中加入代码,点击右侧的生成器(有…的小方框),就会打开 VBE 窗口,并自动加上 sub 过程
的开始与结束语句,我们只需在只间写上要执行的语句即可。
If Me!销售人合计 > 5000 Then
Me!超标标签.Visible = True
Me! = True
Else
Me!超标标签.Visible = False
Me! = False
End If
这里用到一个条件结构,IF...then…else…END IF。具体可查看帮助,结合实例的意思如下,销售人合计>5000 时,超标
标签的内容“超额完成”就显示出来,下面的横线也可见;否则超标标签不可见,下面的横线也不可见。
国家页眉中也有一个格式化事件,可以通过同样的方法查看,内容只有一行“Page = 1”,这个语句的含义为当一个新的国
家组开始时,该页的页码显示为 1。
第 56 页 共 58 页
主体节包含四个文本框控件,前两个来自于数据源中的字段,“占销售人总销售额的百分比”文本框的控件来源为“=[销售
金额]/[销售人合计]”, [销售人合计]是姓名页脚中的字段,格式设为百分比。“占国家总销售额的百分比”文本框同些类似,
控件来源为“=[销售金额]/[国家合计]”,格式也为百分比,[国家合计]是国家页脚中的字段。
“=[姓氏] & [名字]”页脚是与“=[姓氏] & [名字]”页眉相对应的组页脚,包含三个文本框,“雇员合计标题”文本框的控件来
源为“="合计:" & [销售人] & ":"”。 “销售人合计”文本框的控件来源为“=Sum([销售金额])”,对本组中的销售金额用聚
合函数进行求和,在组页眉或页脚中可以访问本组中的数据。“占国家总销售额的百分比 2”的控件来源为“=[销售人合
计]/[国家合计]”,与 1 的区别是这是一个人的总销售额占国家合计的百分比,而不是每笔订单占国家合计的比例。
国家页脚中有四个文本框,与“=[姓氏] & [名字]”页脚雷同,只是所在的分组不同,所以访问的数据也不同。可以对比两
个相同的控件来源“=Sum([销售金额])”在两个组页脚中所产生的不同数据。理解组的含义。
页面页脚中包含日期和页码,背景为灰色。
报表页脚中包含全部销售额的汇总,控件来源还是相同的“=Sum([销售金额])”。
另外报表中还有一个无数据(NoData)事件,这个事件发生的报表的 Open 事件之后,如果记录集中无数据,就会执行这
个事件,在这里的用 MsgBox 显示了一个信息,然后退出。
在上一节的报表中我们使用了编程的方法来实现一定的功能。如果稍微深入一点学习 ACCESS,肯定要掌握一点 VB 编
程。编程就是通过编写程序语言,使之能实现我们预期的功能。编程的语言也是种类繁多,门派各异,但就编程基础来
讲各种语言又都是相通的,只不过在具体的实现语法上各有不同而已。在 ACCESS 应用程序中我们所用到的开发语言是
VBA(VisualBasic for Application),VBA 源自于VB,是Office 应用程序内置的程序设计语言。与 VisualB 有着
相似的结构和开发环境。那么VBA定在哪里呢?在哪里来管理它呢?在Access 中提供的开发环境叫做 VisualBasic 编
辑器,简称VBE,在Access 中以Alt+F11 的方式可以随时找开VBE,结构如下:
本帖隐藏的内容需要回复才可以浏览
第 57 页 共 58 页
下载 ( KB)
2008-5-28 08:52
在菜单栏和工具栏的下面就是主要的工作区了,左边上方的叫工程资源管理器,它显示了当前工程中的所有的类对象,
窗体、报表及自己建立的类及模块都会在列表中显示出来。右方的窗体便是代码编缉窗了,在这时进行 VBA 程序的编写
与修改。从视图菜单中可以添加其他窗口,如本地窗口,立即窗口等。
在简单了解了 VBA 及 VBE 后,我们再来简单了解一下 VBA 的语法。在了解了 VBA 语法后就可以通过查看示例语句及
向导自动生成的语句,来学习 VBA 了,通过多看,配合练习,慢慢的就会自己编写了。
VBA 程序是 VBA 语言代码及注释的集合,一条语句是一个完整的命令,语句之间以换行符分隔,大多数情况下,一条
语句就是一行代码,有时代码可能太长,为增加可读性,可以通过加上续行符“_”来分成几行续写。在续行符的前面要有
至少一个空格符,另外需要注意的是续行符不能将一个独立的关键字、变量名等拆分到不同的行。除了正常的代码外,
程序中还有一些注释,通过注释能增加可读性,也能方便二次开发及维护。注释可以用 Rem 加空格开头,也可以用英文
单引号“’”开头表示,以“’”开头的用法比较常见。
VBA 语句由规定的关键字及其他被赋予意义的单词组合而成。由单词等组成一个个语句。其中能实现某种特定功能的一
段语句,为了在以后再次实现功能时不用重复书写,我们就把这些能实现特定功能的一段语句进行单独的封装,从而形
成一个程序段,象这样的一个程序段称之为过程。
sub 过程与函数过程:
Sub 过程1()
……
End sub
第 58 页 共 58 页
以上便是一个 sub 过程,以 Sub 加过程名及()开始,()中放置参数,如没有参数则保留为空.以 End sub 结束。
函数过程也是一种过程,可以以 Function 加函数名开始,以 End function 结束。函数过程与 sub 过程最主要的区别是函数
有一个返回值。
除了过程还有其他一些需要了解的基础如常量、变量、数据类型、几种常见的结构制流程控制语句、生命周期等。在
这里只是作个说明,起到过渡作用,不作详细说明。读者可以自己查看帮助中可编程性部分的基本概念及其它相关章节。