1、罗斯文库是Access自带的示例数据库,也是一个很好学习教程。让我们一起来学习一下吧。通过罗斯文数据库的学习,能对数据库的表、关系、查询、报表、窗体、切换面板等内容有个全面的了解。我们做数据库开发,应该来讲是现实生活中一种管理思路的体现与高度概括。那么要构思之前肯定要对整个流程有个清晰的了解。那我们就先来了解一下这个罗斯文公司的业务流程吧。罗斯文公司是一个虚构的商贸公司,该公司进行世界范围的食品的采购与销售,就是通常所讲的买进来再卖出去,赚取中间的差价。罗斯文公司销售的食品分为几大类,每类食品又细分出各类具体的食品。这些食品由多个供应商提供,然后再由销售人员售给客户。销售时需要填写订单,并由货
2、运公司将产品运送给客户。要打开“罗斯文数据库”,先启动Access,从“帮助”菜单选择“示例数据库”“罗斯文数据库”即可。如你所安装的是精简版不带有示例数据库,那就从网上下载一个吧。罗斯文数据库示例下载: http:/ 图二 关于数据库的基本组成表,查询,窗体等及表的基本组成字段,记录等概念就不用再讲了吧。其中一些常用的知识将在示例中一起讲解。在表设计中重点要掌握的是数据类型、字段属性的设置与应用。一、 数据类型的用法文本用于存储不需要计算的数字,文本、其他字符或组合内容。最多可存储255个汉字,英文或字符。备注用于存储长文本和数字。如注释或说明。最多可存储65536个汉字,英文或字符。数字用
3、于存储要进行计算的数据。如库存量,销售数量等。日期/时间用于存储日期和时间,如出生日期,发货日期等。要注意日期型数据要注意分隔符的正确使用。以“-”,“/”分隔年月日,如“2007-01-10”,而“2007.01.10”这种格式是错误的。货币用于存储货币值,计算期间禁止四舍五入,精度较高。如单价。自动编号用于在添加记录时自动插入一个唯一不重复的编号,如员工编号等。一般用作主键。是/否用于存储二选一的数据,如“是/否”,“真/假”,“开/关”等。OLE对象用于存储一些用其他应用程序创建的对象,如WORD文档,EXCEL表格,图片等。如员工照片。超链接用于存储超链接。如网址,EMAIL地址。10
4、查阅向导查阅向导允许用户使用组合框或列表框选择来自其他表或来自值列表的数据。在表设计视图新增该数据类型的字段会启动向导进行定义。二、 字段属性字段属性是指字段拥有的一些特点,不同数据类型的字段,属性也不尽相同,常用的属性如下:字段大小文本型字段,默认的大小为50;数字型字段,默认大小为长整型;自动编号的字段,默认大小也是长整型。格式格式属性决定了单元格中数据的显示和打印方式,所看到的并不一定就是表中所存储的。小数位数小数位数属性决定了在单元格中显示几位小数。如设为0,将不显示小数。输入掩码输入掩码属性决定了数据输入和保存的方式。标题标题属性影响着字段的显示名称,默认情况下,标题与字段名相同,也
5、可以输入不同内容,在数据表视图中打开表时,将看到字段的列标题与标题属性相同。默认值在默认值中填入数据时,在新增记录时将自动将该值添加到相应的字段中。有效性规则有效性规则用于限制在字段中输入的数据,在数据录入后,自动检查是否满足有效性规则,如不满足则发出警告,不接受录入值。如在单价字段的在效性规则中填入:0,即可防止忘记填写该数据,或误填入负数。有效性文本在用户录入时如违反有效性规则时,系统会发出警告,而如果有效性文本中填入了内容,则在提示时,对话框中会显示有效性文本中的内容,替代系统的提示内容。必填字段必填字段如果设为是,那么在录入数据时必须在该字段填入相应的数据。10允许空字符串字符串的概念
6、是以字符形式存储的数据,一般要在字符串的两端加上英文的双引号,如”abc”等,而在文本和备注型的字段中,无需加入英文双引号,录入数据会直接作为字符串处理。如果允许空字符串设为否,将不允许输入空字符串。这里要注意的是空字符中”与空格字符串是不同的” ”,前者双引号中没有空格。11输入法模式输入法模式可以设为开启或关闭,根据字段中是否要输入中文字,做好设置,可以避免录入人员在中英文输入法之间做切换。12索引索引用于加快排序,查询和分组操作的速度。索引的值有3种,如果字段为主键,将自动设索引的属性为有(无重复),另外两种是有(有重复)和无。索引属性中只能设置单一字段的索引,如果要设置多字段索引,可在
7、设计视图中,点击工具栏的索引(或菜单视图索引),在索引框中设置。图三具体的用法及示例将结合罗斯文示例进行说明。表的具体分析:一、“供应商”表 供应商表记录的是为罗斯文公司提供货源的厂商记录图四 选择 “供应商”表,单击“设计”按钮,进入表设计视图,表中的字段包括了常用的联系信息。图五 我们重点来关注一下“供应商ID”字段。这是一个自动编号类型的字段,在表中具有唯一性,一般的我们设计的表中都需要一个唯一的不重复的字段,我们可以把该字段设为主键,该字段将会用于与其他表之间建立关系。 表中的大部分字段都是文本类型,大小可以根据实际要输入的内容来设置,比如城市,地区的字段设为,而地址的字段大小是。采用
8、合适的大小会尽可能的减少存储空间的占用。一般不需要进行数据计算的字段我们都用文本类型来存储。 主页和Email之类的可以采用起超链接类型。 查看该表中的索引图六 可以发现公司名称和邮政编码字段的索引属性为有(有重复)也即唯一索引为否,主要是为了通过索引加快对这两个字段的查询等操作,有重复说明该字段中的数据是有可能重复的,比如两个公司在同一地区,那邮政编码就是一样的。 另外我们在常规属性中除了字段大小属性以外,还有其他的一些属性,可以在相应的栏内点,查看相应的帮助。二、“类别”表 划分类别是表设计时的必须要考虑的,因为不同类别的产品可能由不同的部门负责销售,为了方便统计出各类产品或部门的销售情况
9、,须将产品进行分类。类别表中将产品分为8大类。图七 选择类别表,点设计,进入设计计视图图八 可以看到“类别ID”是自动编号类型,用作主键; 说明字段,数据类型为备注,在实际操作中如果要说明的字数不会超过255个字符,可以采用文本类型,这样更节省空间。 图片字段的数据类型是OLE对象,OLE对象在表中不能直观地看到图片,如果要查看图片可以在字段上双击,如需插入,则在图片字段上单击右键,选择“插入对象”,再从对话框中选择“由文件创建”,浏览到所需图片,也可以链接对象,这样只是保存了链接地址,不会直接把文件插入数据库。三、“产品”表 产品表中保存了罗斯文公司销售的各种产品的明细数据。这个表清楚的记载
10、了每个产品是属于什么类别,供应商是谁,库存量,单价等信息,是填写订货单时的重要依据。图九 选中“产品”表,点设计,进入设计视图 “产品ID”是自动编号类型的主键; 单价,库存量,订购量,再订购量字段中设置的有效性规则与有效文本性文本属性,可以学习一下; “中止”字段的数据类型是“是/否”型,这对于处理两选一的结果最为合适; 重点来关注一下“供应商ID”和“类别ID”,这两个字段都是数字类型,分别对应“供应商”表中主键和“类别”表中的主键。先来看下“供应商ID”,这个字段的标题属性中填的是“供应商”,这样在数据表视图中,看到的字段标题就会是“供应商”,而不是默认的“供应商ID”。另外这两个字段都
11、是查阅列,这是一个很有用的属性,我们对“供应商ID”作一下详细的讲解,“类别ID”与“供应商ID”的设置方法相同。查阅列我们在表中输入数据时,经常会遇到需要重复输入的内容,比如人员的性别为“男”或“女”,这是单表中的重复录入;比如产品表中需要输入“供应商”,而“供应商”字段在“供应商”表中已经录入过了,这属于跨表的重复录入。这些内容如果直接录入不仅花费了用户较多的时间,而且极容易出错。为了方便用户录入重复性的数据,可以借助ACCESS提供的查阅列的功能。图首先来看下查阅列中的各项具体属性显示控件图从显示控件右侧的下拉框中可以看到该属性可以设为文本框,列表框或组合框。如果设为文本框,那数据就只有
12、接受从文本框中的录入,查阅的其他属性都不可用。我们主要要掌掘的是列表框和组合框的使用。组合框和列表框的使用基本相同,只是列表框除了可以从列表中选择还可以接受录入,相当于是列表框各文本框的组合。行来源类型图行来源类型是指控件中的数据来自于何处。共有三处选择,表/查询,值列表,字段列表。如果选择“表/查询”,则列表框或组合框中的数据将来源于其他表或查询中的结果。如果要录入其他表中已经存在的数据,或录入从几个表中查询得到的结果,用这个选项最为方便。如果选择“值列表”,只需在行来源中直接输入列表中的数据,并用英文分号隔开即可。这种类型只适合于输入的内容固定在某几个值之间,如性别的值可以是“男”或“女”
13、。如果选择“字段列表”,该字段中将填入某个表中的字段名称信息。这种类型较少用到, “表/查询”的使用就包含了这种简单的用法。行来源“行来源”中是列表框或组合框中将要列出的数据。如果“行来源类型”是“表/查询”,可单击“行来源”右侧的下拉箭头,选择某个表或查询,以该表或查询中的数据作为列表框或组合框中的数据。如果没有直接的查询可用,也可以单击右侧的生成器 ,在查询生成器中直接创建SQL语句。如果“行来源类型”是“值列表”,直接输入即可,如“男;女;”如果“行来源类型”是“字段列表”,可单击右侧的下拦箭头,选择某个表,以该表中的字段名称作为列表框或组合框中的数据。绑定列在列表框或组合框中进行选择时
14、,所显示出来的数据并不一定就是存储在该字段中的内容。在“绑定列”中设置的列中的值才是表中真正存储的值。列数在列表框或组合框中所显示的列数,可以同时显示表中的多列。列标题用字段名称,字段标题或首行数据作为列表框或组合框中列的标题。如果在列表框或组合框中同时显示多列时,加上标题方便识别各列的内容。列宽列表框或组合框中有多列时,可指定每列的宽度,每列宽度之间以英文分号分隔。如列数为3列,则可设列宽为:2;2;2,系统会自动加上cm单位;如果某一列无需显示,则列宽设为0即可。如:0;2;2。列表行数是指在组合框中一次最多可以显示的行数,其余的数据需拖动滚动条查看。列表宽度在组合框中,列表框部分的宽度,
15、可以设为“自动”,也可以设为数值。10限于列表在组合框中,如果允许输入除列表框中值以外的数据,则选择“否”。如果值必须为列表中的一项时,则选择“是”。示例:在“产品”表中,设置“供应商ID”字段的查阅列属性在数据库窗口中,选择“产品”表,单击设计,进入设计视图。可以在最后一个字段的下面的第一个空白行,输入新字段名称“供应商2”,设置完相关属性后,可以与“供应商ID”字段进行比较。数据类型改为数字,在这里说明一下,在表中相关联的两个字段的数据类型必须相同,而且字段大小也要相同。在本例中因为在“供商表”,“供应商ID”字段是自动编号类型,自动编号的字段默认大小是长整型,所以在这里“供应商2”的数据
16、类型必须为数字,字段大小为长整型。在下半部分窗口中选择“查阅”选项卡,将显示控件改为组合框。图在行来源类型中选择“表/查询”。点击行来源右侧的生成器 按钮,在显示表中,选中“供应商”表,点添加后关闭。从表中选择字段供应商ID,公司名称,可以双击,也可以拖入下方的字段中。设置公司名称字段的排序为升序,代表组合框中的供应商按名称进行排序。图点关闭按钮,跳出提示窗口图点“是”在绑定列中填入1,代表该字段存储的值是查询结果中第一列“供应商ID”中的值。要求这两者的数据类型必须相同,本例中都为长整型。在列数中填入2,代表有两列。列标题选“否”。列宽中填入0;2。罗斯文示例中,第2列的宽并没有填入,这是因
17、为列表宽度设为了自动,不隐藏的宽度都会根据字段的大小自动显示出来。列表行数默认为8。10列表宽度为自动,限于列表选“是”。图11关闭设计视图并保存修改,切换到数据表视图,体会查阅列的用法。客户表及运货商表 “客户”表记录的是罗斯文公司的客户信息,类似于“供应商”表。 通过对“客户”表设计视图的查看可以发现表中的“客户ID”字段与前几个表中的ID字段不同,没有采用自动编号的数据类型,而是用了文本类型,长度为。这个“客户ID”字段也是作为主键的,也就是说不允许在该表中输入重复的客户代码。在“客户ID”字段中还设置了“输入掩码”的属性,“LLLLL”,“”是将所有输入的字符自动转为大写,这样在输入时
18、就不用理会大小写,“L”代表字母A-Z,是必选项。这样设置的意思就是在“客户ID”字段中必须输入5个字母,不能输入其他的字符或者少一位。 “输入掩码”可以帮助客户准确地输入数据,避免不必要的错误。比如可以用“000000000000000999”来作为身份证的输入掩码,既可以输入15位数字,也可以输入18位数字,这里的和9都是输入掩码的常用控制字符,0代表必选的数字项,9代表可选的数字和空格。如果想了解有关更多的输入掩码,可以把光标放在这一属性栏里,按F1查看帮助,学会用帮助可是个好习惯哦。 另外“格式”属性也是对字段的格式作的规范,要注意两者的区分。“输入掩码”是控制输入和保存方式的,而“格
19、式”属性是控制输出和打印方式的,如在“输入掩码”中使用“”代表的是不管输入字符是大写还是小写,在数据库中保存的都会是大写的字符,而如果在“格式”中使用“”代表的是在该字段中显示为大写,而不管实际存在数据库中字符的大小写。如果一个字段既定义了“格式”属性又定义的“输入掩码”属性,则在显示数据时,“格式”属性优先于“输入掩码”属性,而在保存数据时则相反。 “客户”表中其他字段都采用文本类型。 “运货商”表记录的是帮助罗斯文公司运送货物的公司的联系信息。这个表中没有新的知识点,不再进行细讲。雇员表 “雇员”表记录的是罗斯文公司的雇员信息。 雇员的姓氏和名字分别用两个字段来代表,这样设计是考虑到能把信
20、息拆分的更细,方便对更细的信息进行处理,比如可以按照姓氏来进行统计等等,当然如果没有这种必要的话,完全可以用姓名一个字段来处理。本例中对地址和电话都进行了拆分的处理方法。 选中“雇员”表,单击设计按钮,进入表设计视图。“雇员ID”是自动编号的主键,“出生日期”是“日期/时间”类型,它的“格式”属性是“yyyy-mm-dd”,表示显示时的格式,“有效性规则”属性是“”,“=”,“=”,“”,“=”;逻辑运算符“and”,“or”,“not”;连接运算符“&”,“+”;及常用的!和.(点)运算符。常见的操作数如字符串,日期/时间值,常量,变量,函数及引用窗体或报表中的字段值,控件值或属性等。常见表
21、达式示例:数学及比较运算表达式表达式说明=数量*价格计算数量与价格的乘积,可以得出总价=到货日期-发货日期计算两个日期之间的天数2500比2500大的数日期表达式表达式说明Between #1997-01-01# And #1997-12-31#在1997-01-01各1997-12-31之间的数据#2007-12-30#2007-12-30以前的数据30大于30岁的男性数据= “中国” & “北京”值为 “中国北京”通配符表达式表达式说明Like “张*”以张开头的数据Like “张?”以张开头后面还有一个字的数据聚合函数表达式表达式说明Sum(数量*价格)求数量和价格相乘后的和Avg(费用
22、)求费用的平均值Count(*)计算记录条数“当前产品列表”查询当前产品列表统计出未被中止的产品。 在数据库的查询对象窗口,双击“在设计视图中创建查询”或单击“新建”按钮,在跳出的“新建查询”的窗口中选择“设计视图”,进入设计视图界面,从显示表中添加“产品”表。选中“产品ID”,“产品名称”,“中止”三个字段(注:选中字段可以把字段从设计视图界面的上方拖到下方,也可以双击字段名称),去掉“中止”下面“显示”的勾,在条件一栏输入“no”,代表只查询出未被中止的产品,但只要显示产品的ID和名称就行了,是否中止的状态不用显示出来。我们还想将输出的结果按照产品名称进行排序,在“产品名称”下面的“排序”
23、栏里选中升序。这样查询就完成了,点保存,给查询起个名字就可以了。 我们打开罗斯文数据库中的当前产品列表查询,会发现数据源是“产品列表”,不是“产品”表,这里是用到了表的别名,一般的我们在查询中为了方便,经常会给比较长的表名取个短一些的名称,更方便引用表。方法是在显示的表上点击鼠标右键,选择属性,在别名中填上合适的别名就行了。本例中其实完全没有这个必要,可能只是想让大家了解这样一个用法而已“各类产品”查询 各类产品查询为各类产品报表提供数据源,在查询对象中选中“各类产品”,单击“设计”按钮, 我们发现默认的是按SQL视图显示的,这时从“视图”中选择“设计视图”即可显示设计视图,当然要再切换到SQ
24、L视图,再从“视图”中选择“SQL视图”即可。通过在“设计视图”中设计查询,再切换到“SQL视图”中查看SQL语句也是我们学习SQL语句的方法。 查询的数据来自“类别”表和“产品”表,“类别名称”字段和“产品名称”字段的“排序”都是升序,查询结果将先按类别名称排序,当类别名称相同时再按照产品名称排序。中止条件为“no”,结果只包含未被中止的产品。“按汉语拼音顺序的产品列表”查询 这个查询是为“按汉语拼音顺序的产品列表”报表提供数据源的。双击查询即可运行并显示查询的结果,在查询结果中并未按拼音顺序来排列,这个功能是在报表中实现的。进入设计视图 这个查询的数据来自两个表,“类别”表和“产品”表。查
25、询的结果中只包含未被中止的产品,因此在产品字段上设置了条件,这里代表“否”,在ACCESS中用代表“否”,FALSE,“假”,而用-1代表“是”,TRUE,“真”十种最贵的产品 进入设计视图: 查询的数据来自于表“产品”,选用的字段只有产品名称和单价两个,如果要给选择的字段另外取个名称,可以给这个字段前面添加名称,中间用英文状态的冒号“:”隔开,如上图。 要查询出十种最贵的产品,只要将产品按产品单价降序来排列再取前十种即可。在单价字段上设好“降序”排列,在工具栏上的上限值列表框中输入10即可。双击查询查看运行结果,体会在设计视图中设置的作用。季度订单 这个查询列出了在1997年度有订单的客户,
26、不是某个季节的记录,而是含盖了全年度的记录,这个结果用于给“季度订单”窗体提供数据源,在窗体中再具体实现按四个季度显示统计结果。 进入设计视图: 这个查询的数据来自于“客户”表和“订单”表,“订单”表中用到的订购日期只是作为一个条件项,不用被显示出来,条件里是一个表达式,代表的含义是订购日期介于1997年1月1日到12月31日之间的,这里用到“betweenand”这种语法。日期型的数据应该在两侧加上“#”号。接下来我们还要考虑到有些客户可能在1997年度有多次订货,而我们希望的结果是每个客户只出现一次。这时可以在查询视图的上半部分窗口的空白处右击鼠标,从浮动菜单中选择“属性”,也可直接在工具
27、栏上选择“属性”设置查询属性中的“唯一值”属性为“是”即可。设置了这个属性就能保证每组中的重复数据只会列出一个。在这里还要提一下的是要注意一下选择表的联接类型,在联接线上双击可以显示联接属性,联接属性分为三种,可以根据要求选择。一般默认的联接类型为,只包含两个表中联接字段相等的行,在本例中改成联接类型为,包含订单表中的所有记录,在SQL语句方面分别体现为内联接,左联接和右联接,这是有区别的,可以参考运行结果体会联接的作用。扩展订单明细 扩展订单明细为窗体“客户订单子窗体2”提供数据源,查询中带有计算字段,查询出每个订单每种产品的一些明细信息。 进入设计视图: 查询的数据来自于“产品”表和“订单
28、明细”表,查询结果按订单ID升序排列。 查询中的字段总价是个计算字段,总价为该字段的名称,计算表示用“订单明细”表中的“单价”乘以“数量”后再乘以(1-折扣),相当于算出了打过折后的总价。字段中用到一个CCur()转换函数,它的作用是将数据转换为货币类型,另外表达式中用了先除以100,再乘以100,相当把数据还原,同时小数点后面保留两位小数。不过我试了直接用CCur(订单明细.单价*数量*(1-折扣),得到的结果也是两位的?欢迎共同讨论。订单小计 订单小计统计出每个订单上各种产品的销售金额的总计金额,为汇总销售额等多个查询提供数据。 进入设计视图: 查询的数据来自于“订单明细”表,选用的字段只
29、有一个“订单ID”,小计字段是个计算字段,小计是这个字段的名称,后面是计算表达式。计算方法同“扩展订单名细”查询中的“总价”字段,这里由于只有一个表,所以订单明细.单价可以直接写成单价,该字段为:小计: CCur(单价*数量*(1-折扣)/100)*100。本例到这里只是计算出了每个订单ID中每种产品的总价,而我们要统计出的是每个订单ID中所有产品总价的和,所以我们要对订单ID进行分组,要用到“总计”行的功能,“总计”行默认是不显示的,可在设计窗体的下半部分右击鼠标,选择“总计”,或者单击工具栏上的按钮,这样都会多出一行总计来,在总计行,可从下拉框中对每个字段选择相应的操作,可以作为分组依据或
30、条件字段也可以选择聚合函数或其他函数来对字段进行计算,如果要自己写表达式,则选择表达式。在本例可以把“订单ID”字段设成分组字段,对“小计”字段要进行求和,只要选成“总计”就可以了。罗斯文的示例中并没有选用“总计”的功能,而是对“小计”字段设成了“表达式”,而在表达式中加上了求和函数Sum(),大家可以比较一下,用这两种方法生成的查询运行结果都是一样的,而SQL查询的语句也是一样的。对于表达式如果一开始觉得写起来有些困难的话,可以借助于生成器来生成,生成器中有数据库中的各种对象,操作符以及函数,只要进行选择再修改一下就可以了。方法是在字段上右击鼠标,从中选择“生成器”,在生成器的下方选择相关参
31、数,计算符等,表达式生成在上方可进行修改。按年度汇总销售额“按年度汇总销售额”查询为“按年度汇总销售额”报表提供数据,另外“按季度汇总销售额”查询与本查询完全一样,也就是本查询也能为“按季度汇总销售额”报表提供数据源,按季度的功能是在报表中实现的。本例要统计出已经发货的各订单的计单ID号及各订单小计金额。进入设计视图:查询的数据来自于查询“订单小计”及“订单”表,取“订单”表中的发货日期字段,并按该字段升序排列,另外该字段还设了条件,为“Is Not Null”,这个表达式代表数据不为空,没有填写过发货日期的记录则为空,代表尚未发货,并排除在外。10按金额汇总销售额 “按年度汇总销售额”查询统计了1997年订单的小计金额在2500元以上的订单,为“按金额汇总销售额”报表提供数据。进入设计视图: 查询的数据来自于“客户”,“订单”表及“订单小计”查询。对小计字段另取名称为“销售金额”,加上条件“2500”,表示只要订单小计在2500元以上的记录;发货日期加上条件“Between #1997-1-1#and #1997-12-31# ”表示只要发货日期在1997年的记录。两个条件在同一行表示要求同求满足。11各国雇员销售额 “各国雇员销售额”查询统计各国雇员的销售情况,为“各国雇员销售额”报表提供数据。进入设计视图: 查询的数据来自于“雇员”,“订单”表及“订