收藏 分销(赏)

第10章Access创建多表查询和交叉表查询.doc

上传人:xrp****65 文档编号:6270729 上传时间:2024-12-04 格式:DOC 页数:26 大小:216KB 下载积分:10 金币
下载 相关 举报
第10章Access创建多表查询和交叉表查询.doc_第1页
第1页 / 共26页
第10章Access创建多表查询和交叉表查询.doc_第2页
第2页 / 共26页


点击查看更多>>
资源描述
第10章创建多表查询和交叉表查询 本章要点 • 介绍表的连接• 使表的所有字段可访问 • 连接表以创建多表查询• 在多个记录上计算 • 使用表中的查找字段• 设计参数查询 • 向表或者查询添加子数据表• 创建交叉表查询 • 外连接、自连接和t h e t a连接• 从其他数据库中的表创建查询 • 用查询更新表数据• 疑难解答 10.1 介绍表的连接 获取A c c e s s的目的无疑是为了利用其关系数据库管理能力。为此,你必须能够基于具有相 同值的关键字字段链接相关的表—这个过程在数据库术语当中称之为连接。第8章“设计 Access 查询”和第9章“理解查询操作符和表达式”向你展示了如何创建基于单个表的简单查 询。如果你曾试着运行了第9章中的例子,那么你可以算是已经见过多表查询了。当创建查询 测试表达式时,你曾将Order Details表连接到O r d e r s表,然后将O r d e r s表连接到C u s t o m e r s表。 本章的第一部分专门讨论从通过连接关联在一起的多个表创建的查询。 本章提供了使用在查询设计视图中创建的四种基本连接类型的各种查询的例子,这四种连 接为等值连接、外连接、自连接和t h e t a连接。但是,注意有两种查询类型无法在A c c e s s的“查 询设计”窗口中创建:联合查询和基于表的子查询。要创建这些查询类型,必须编写S Q L语句 —这是第2 3章“结构化查询语言”中的主题。 本章中的某些示例查询使用的是在第4章“A c c e s s数据库和表”中创建的Personnel Actions 表。如果你没有创建Personnel Actions表,则可以参考第4章“创建Personnel Actions表”一节 中关于如何建立或者导入该表的指导。 其他的示例查询建立在前面章节创建的查询之上。因此,你将发现,按照查询在本章的出 现顺序,顺序地阅读本章和创建示例查询,将比采用随机的方法更为高效一些。 本章还描述了可以用A c c e s s创建的五种查询中的四种和它们的一些例子,四种查询为:选 择、合计、参数和交叉表查询。操作类的四种查询类型可以用来创建或者修改表中的数据:创 建、追加、删除和更新。第11章“用操作查询修改数据”中提供了每种操作查询类型的典型应 用和它们各自的一些例子。 如下的Access 2000新特征适用于本章的主题内容: • 新的查询属性子数据表名称、链接子字段、链接主字段、子数据表高度和子数据表扩 展可以在查询结果集中容纳子数据表。 • 现在已经可以打印“关系”窗口的内容当“关系”窗口拥有焦点时,选择“文件”, “打印关系”,从“关系”窗口的内容创建一个报表,然后在“打印预览”模式显示该报 表,之后便可以打印出该报表。 • 将关系图表以“报表快照”格式作为电子邮件的一个附件进行发送接收者必须安装有 第10章创建多表查询和交叉表查询215 Access 2000或者“报表快照”阅读器。 10.2 连接表以创建多表查询 在创建表之间的连接之前,必须知道哪些或哪个字段具有相同的值,可以建立相关关系。 正如在第4章中曾提到的,在包含相关数据的不同表中,为主键和外部键指定相同的名称是一 个常见的设计习惯。M i c r o s o f t在创建Northwind 示例数据库时也使用了这种方法,使得在确定 表之间的关系和创建表之间的连接时显得更为容易。例如, C u s t o m e r s表的C u s t o m e r I D字段和 O r d e r s表的C u s t o m e r I D字段用于将订单和顾客建立连接。 图1 0 - 1给出了N o r t h w i n d数据库的结构,用图形方式显示了表之间的连接。A c c e s s查询设计 表示连接的方法为在不同表的字段名之间连以线段。粗体指示的是主键字段。通常每个连接至 少涉及到一个主键字段。 图10-1 Northwind 示例数据库中表之间的连接 显示Access 2000Northwind数据库表之间的连接结构时,首先使“数据库”窗口具有焦点 (按下F 11 ),然后单击工具栏上的“关系”按钮或者选择“工具”、“关系”。图1 0 - 1中显示两表 之间连接的线段上的1指示的是一对多关系中“一”的一方;无穷大符号(∝) 指示“多”的一方。 在Access 2000中,可以只显示某个表的直接关系(使用工具栏上的“显示直接关系”按钮) 或者数据库所有表之间的关系(“显示所有关系”按钮)。在默认情况下N o r t h w i n d . m d b的所有 表,当打开Northwind 示例数据库的“关系”窗口时将全部显示出来。这时,单击“显示直接 关系”按钮将不起作用。 提示只显示某个表的关系时,可单击工具栏的“清除布局”按钮,单击“显示表”按钮,显示 “显示表”对话框,在“表”列表中选择要显示的表,然后单击“添加”并“关闭”该对话框。 单击“显示直接关系”按钮,显示所选表的关系。清除“关系”窗口的布局不会对后台表之间 的关系产生任何影响。“显示直接关系”的特征主要用于包含许多相关表的数据库。 A c c e s s在“查询设计”窗口中支持四种类型的连接: • 等值连接(也叫做内连接)是创建选择查询时最为常见的连接。等值连接显示某表中的全部 记录与另一个表中相应记录。记录之间的对应关系是由连接表的字段中相同的值决定的 ( S Q L语句:WHERE field1 = field2 )。在大多数情况下,连接都是基于某个表中唯一的主 键字段和一对多关系中其他表的外部键字段来完成的。如果担当关系中多方的表中没有 记录的字段值与一方表中的记录相对应,则一方中相应的记录将不会出现在查询结果中。 如果两个表之间共同的字段名称所对应的字段为其中某个表的主键, A c c e s s将自动地创建 表之间的连接。如果在前面曾在关系窗口中指定过表之间的关系,这些连接也会自动地创建。 216 第二部分最大限度地利用查询 • 外连接可以用于数据库维护,通过创建一个包含具有唯一值记录的新表,从表中删除 孤立记录和复制数据。外连接不管在连接的其他方是否存在与之对应的记录,将显示连 接中某成员表中的全部记录。 • 自连接在单个表之内结合数据。在A c c e s s中创建自连接时,需要向查询添加一个表的 复制件( A c c e s s将为复制件提供一个别名),然后与复制的记录之间创建连接。 • T h e t a连接在结合数据时使用的是比较操作符而不是=。Theta 连接包含用于返回不具备 某个特定关系的记录的查询所使用的不等号( < > )。实现theta 连接用的是W H E R E准则而 不是SQL JOIN 保留字。“查询设计”窗口并不用字段名之间划线的形式指示theta 连接, theta 连接不会显示在“关系”窗口。 本书所带光盘\ B e c k w i t h文件夹下的B e c k w i t h . m d b数据库具有环状的关系集合。从C D - R O M 或者从硬盘上的复制件打开B e c k w i t h . m d b,然后单击“关系”按钮,打开“关系”窗口(见图 1 0 - 2 )。S e c t i o n s和C o u r s e s之间为多对一的关系, D e p a r t m e n t s和C o u r s e s之间为一对多关系, E m p l o y e e s和D e p a r t m e n t s之间为多对一关系,E m p l o y e e s和S e c t i o n s之间为一对多关系。你还可以 看到C o u r s e s、E n r o l l m e n t s、S t u d e n t s、G r a d e s和C o u r s e s之间也存在一个环形的关系集。当你想 测试具有大量记录的查询性能时, B e c k w i t h . m d b十分有用。这个虚构的Beckwith College位于 N a v a s o t a、Te x a s,拥有30 000名学生,2 320名雇员,在1 4个系的5 9 0门课程中提供了1 770班级。 图10-2 Beckwith 示例数据库中表之间的关系 注意Beckwith数据库的设计上存在小小的缺陷。一个教授同时属于多个系的情况是极为可能的, 但是在图1 0 - 2所示的结构图中却不允许这种情况发生。允许教授隶属于多个系时,需要建立多对 多关系和Employee-Departments关系表。 10.2.1 创建传统的单列等值连接 基于每个表中的一列所建立的连接称为单列连接。下面详细给出了创建一个数据库、使所 有查询都使用简单的单列连接时需要满足的基本规则: • 关系中一方的每个表必须具有一个主键,并具有无重复索引来维护参照完整性。A c c e s s 将自动地在一个表的主键字段上创建无重复索引。 • 多对多关系,例如O r d e r s到P r o d u c t s的关系,是靠一个中间表来实现的(在这里为O r d e r D e t a i l s ),该中间表和其中某个表之间存在一对多关系( O r d e r s到Order Details),而和另一 个表之间存在多对一关系(Order Details到P r o d u c t s )。 第10章创建多表查询和交叉表查询217 • 表中存在的重复数据(假设允许重复)被提取到一个具有主键、无重复、与提取重复数 据的表具有一对多关系的新表中。使用多列主键来标识提取的数据常常是必须的,因为 单个关键字字段可能会包含重复的数据。但是,关键字字段值的结合(也称为串联)必须 是唯一的。Access 2000的“表分析器向导”可以自行定位和提取大部分重复数据。我们 在第11章将描述如何手工地从表中提取重复数据。 如果需要使用生成表查询的帮助,请参见11 . 2节“用生成表查询创建新表”。 如果你对如何创建关系还不熟悉,请参见4 . 1 0 . 1节“建立表之间的关系”。 N o r t h w i n d数据库中的所有连接,在图1 0 - 1中用相邻表字段名之间的连线标识,都是具有 一对多关系的表之间的单列等值连接。A c c e s s使用ANSI SQL-92 保留字INNER JOIN来标识传 统的等值连接,用LEFT JOIN或者RIGHT JOIN指定外连接。 如果想学习有关S Q L连接的更多术语,请参见2 3 . 4 . 4节“用S Q L创建连接”。 在基于等值连接的查询中最为常见的用法便是用顾客名字和地址接收到的订单匹配。例如, 你或许希望创建一个简单的报表,列出顾客名字、订单数目、订单日期和数量。遵循如下步骤, 创建一个传统的一对多,单列等值连接查询,将N o r t h w i n d的顾客和他们的订单关联起来,并 按照公司和订单的日期进行排序: 1) 如果N o r t h w i n d . m d b是打开的,关闭除了“数据库”窗口之外的所有窗口;否则打开 N o r t h w i n d . m d b。 2) 单击“数据库”窗口中的“查询”快捷方式,然后双击在“设计”视图中“创建查询” 快捷方式。Access 在空的“查询设计”窗口上显示“显示表”对话框。 3) 从显示表列表中选择C u s t o m e r s表,单击“添加”按钮。或者,也可以双击C u s t o m e r s表 名字,将该表添加到查询中。A c c e s s将在“查询设计”窗口中添加C u s t o m e r s表的“字段名字” 列表。 4) 双击“显示表”列表中的O r d e r s表,然后单击“关闭”按钮。A c c e s s将O r d e r s表的“字 段名称”列表添加该窗口中,并在两个表的C u s t o m e r I D字段之间添加了一条连线,指示两者之 间存在的连接。A c c e s s是自动创建该连接的,因为C u s t o m e r I D是C u s t o m e r s表的主键字段,而 A c c e s s在O r d e r s表中发现了具有相同名字的字段(外部键)。 5) 为了用顾客的名字标识每个订单,可选择C u s t o m e r s表C o m p a n y N a m e字段,并将字段符 号拖到“查询设计”网格的第一列的“字段”行。 6) 选择O r d e r s表的O r d e r I D字段,将字段符号拖到第二列的“字段”行。将O r d e r D a t e字段 拖到第三列。查询设计现在的状态如图1 0 - 3所示。 图10-3 该查询显示按公司名字和日期排序的顾客签订的订单 7) 单击“运行”或者“查询视图”按钮,显示查询结果, R e c o r d s e t如图1 0 - 4所示。注意查 询结果集的字段标题显示了表字段的标题(其中包含有空格),而不是实际的字段名,实际的 字段名中是没有包含空格的。 图10-4 连接Customers和Orders表的图10-3所示的查询设计所产生的结果 10.2.2 为查询结果集指定排序次序 Access 显示查询结果集时是按照主键 字段上的索引的次序进行显示的。如果代 表主键字段的列不止一个, A c c e s s将按照 关键字列出现的次序从左到右排序简单的 查询结果集。因为C o m p a n y N a m e是最左 边的主键字段,查询结果集将为单个公司 按订单编号顺序显示所有订单。你可以改 写主键显示的次序,只要向查询添加一个 排序次序即可。例如,如果你想首先看到 最近的订单,可以指定按订单日期的降序 排序。遵循如下步骤,向查询添加这个排 序次序: 关于主键索引的更多信息,请参见 4 . 1 0 . 4节“往表中添加索引”。 1) 单击“设计视图”按钮,返回“查 询设计”模式。 2) 将插入符放到“查询设计”网格 Order Date 列的“排序”行,按下F 4,打 开下拉列表。 3) 从下拉列表中选择“降序”,指定 在日期上按降序排序—最近的订单在先 (见图1 0 - 5 )。 4) 单击“运行”按钮或者“数据表视 图”按钮,显示新排序次序下的查询结果集(见图1 0 - 6 )。 218 第二部分最大限度地利用查询 图10-5 向查询添加一个特定的排序次序 图10-6 向查询添加Order Date降序排序之后的结果 第10章创建多表查询和交叉表查询219 10.2.3 使用表之间的间接关系创建查询 可以创建查询返回不直接相关的记录,例如每个顾客所购买的产品的类别。必须将作为连 接链中一个链接的每个表包含在查询中。例如,如果创建查询是为了显示每个顾客所购买产品 的类别,则必须将C u s t o m e r s和C a t e g o r i e s表之间存在的连接链上的每一个作为中间链接的表都 包含到查询中。该链中包含C u s t o m e r s、O r d e r s、Order Details、P r o d u c t s和C a t e g o r i e s表。但是, 不需要从中间表向查询设计网格添加任何字段; C o m p a n y N a m e和C a t e g o r y N a m e字段就足够了。 遵循如下步骤,修改顾客和订单查询,创建一个查询,显示间接相关记录中的的字段: 1) 在“查询设计”视图中,删除查询的OrderID 列,单击字段行上方的细条,将整个列选 定(突出显示), 然后按下D e l e t e键。在OrderDate 列上也执行相同的过程,只留下 CompanyName 列显示在查询中。 2) 单击工具栏的“显示表”按钮或者选择“查询”,“显示表”,按顺序将Order Details、 P r o d u c t s和C a t e g o r i e s表添加到查询中;然后单击“添加表”对话框的“关闭”按钮。图1 0 - 7上 面的窗格显示出Access 自动地在C u s t o m e r s和C a t e g o r i e s表之间基于每个中间表的主键字段和相 邻表中同名的外部键字段创建出来的连接链。 提示在添加表到“查询设计”窗口中时,该表的字段列表可能不随之出现在上面的窗格中。可 以使用上面窗格中的垂直的滚动条来显示“隐藏起来”的表。可以将“表字段”列表拖放到上 面窗格的上方,然后重新排列字段列表,使之与图10-7所显示的式样相匹配。 3) 从C a t e g o r i e s字段列表将C a t e g o r y N a m e拖到网格第二列的“字段”行。或者,通过双击 字段名字也可以将之加到网格中的下一个空列上(见图1 0 - 7 )。 图10-7 从没有直接关系的表创建查询所必须的连接链 4) 单击工具栏上的“运行”按钮。查询结果集如图 1 0 - 8所示。 5) 单击窗口的“关闭”框,关闭查询。该查询只是一 个例子,所以不需要保存它。 提示图1 0 - 8中的查询结果集有2 100多行,大多数都是重复的。 为了删除重复,可以右击“查询设计”视图上面窗格中的空 白区域,并选择“属性”,打开“查询属性”页。双击“唯一 值”文本框,将唯一值设为“是”。再次运行查询验证一下重 复是否不见了。本章后面的“创建多列等值连接和选择唯一 值”一节将给出一些其他使用“唯一值”查询属性的例子。 图10-8 图10-7中的查询所产生的 Customers-Categories记录集 在不直接相关的表上进行查询的情况极为常见,尤其当你想用S Q L总计函数或A c c e s s的交 叉表查询进行数据分析的时候更是如此。更多的信息,可以参见本章后面“使用S Q L总计函数” 和“创建交叉表查询”两节中的内容。 10.2.4 创建多列等值连接和选择唯一值 在两个表之间可以具有多个连接。例如,你可能希望能创建一个查询,返回票据和运输地 址相同的顾客名字。票据地址是C u s t o m e r s表的A d d r e s s字段,而运输地址为O r d e r s表的 S h i p A d d r e s s字段。因此,需要匹配两个表中的C u s t o m e r I D字段以及C u s t o m e r s . A d d r e s s和 O r d e r s . S h i p A d d r e s s。这个任务需要多列等值连接才能完成。 遵循如下步骤,创建这个地址匹配多列等值连接的例子: 1) 在“设计”视图中打开一个新的查询。 2) 向查询添加C u s t o m e r s和O r d e r s表,关闭“添加表”对话框。 3) 单击并将C u s t o m e r s表“字段列表”框中的A d d r e s s字段拖到O r d e r s表的“字段列表”框 的S h i p A d d r e s s字段。这将创建另一个连接,由A d d r e s s和S h i p A d d r e s s之间新的连线指示(参见图 1 0 - 9中上面的窗格)。A d d r e s s和S h i p A d d r e s s之间新的连线在两端都有园点,指示出这时在一对 没有特定关系的字段之间建立的连接,它们不具有相同的字段名字,或者主键索引。 4) 将C u s t o m e r s表的C o m p a n y N a m e和A d d r e s s字段分别拖到查询的第一和第二列的字段行, 然后丢放该字段。将O r d e r s表的S h i p A d d r e s s字段拖到查询的第三列并将该字段丢放在该列的字 段行(参见图1 0 - 9中下面的窗格)。 图10-9 将一个表中的某个字段名称拖到另一个表中某个字段上,创建一个多列等值连接 5) 单击工具栏上的“运行”按钮。图1 0 - 1 0所示为查询产生的结果。 6) 要消除重复的行,必须使用“查询属性”窗口的“唯一值”选项。为了显示“查询属性” 窗口,如图1 0 - 11,需要单击“设计视图”按钮,然后单击工具栏的“属性”按钮或者双击 “查询设计”窗口的上面窗格中的空白区域。如果“属性”窗口的工具栏显示“字段属性”或 者“字段列表”,单击“查询设计”窗口上面窗格中的空白区域,让标题栏显示“查询属性”。 或者,右击上面窗格中的空白区域,从弹出菜单中选择“属性”。 7) 在默认情况下,“唯一记录”的属性和“唯一值”属性的设置都为“否”。将插入符放到 “唯一值”文本框并按下F 4,打开下拉列表。选择“是”并关闭该列表。设置“唯一值”属性 220 第二部分最大限度地利用查询 手工添加连接 为“是”将导致在查询上添加ANSI SQL 保留字D I S T I N C T。再次单击“属性”按钮,关闭 “属性”窗口。 关于删除重复记录的更多的信息,请参见2 3 . 6 . 9节“ J e t的D I S T I N C T R O W和S Q L的 DISTINCT 关键字”。 提示或者,也可以双击“属性”窗口中其文本框来改变“唯一记录”和“唯一值”属性的设置。 所有具有“是/否”值的属性都可以靠双击来切换它的值。 8) 单击工具栏上的“运行”按钮。结果集中不再包含重复的行,如图1 0 - 1 2所示。 图10-12 删除了重复行的查询结果集 9) 单击“关闭窗口”按钮,关闭查询,不进行保存。这样便可以避免让过时的查询例子搞 乱“数据库”窗口中的“查询”列表。 因为大部分订单具有相同的票据和运输地址,所以更为有用的查询是找出顾客的票据和运 输地址不同的订单。但是,使用多列等值连接是无法创建这个查询的,因为Access SQL的 INNER JOIN 保留字不能接受<> 操作符。所以需要使用准则添加一个不相等连接,而不是使 用一个多列连接,具体见本章后面“用准则创建不相等t h e t a连接”。 如果在你运行前面的查询时,遇到“输入参数”对话框,请参见本章后面“疑难解答”部 分中的“缺少查询的对象”。 第10章创建多表查询和交叉表查询221 图10-10 订单查询结果集,返回票据地址和 运输地址相同的顾客订单 图10-11 使用“查询属性”窗口来 只显示具有唯一值的行 222 第二部分最大限度地利用查询 10.3 使用表中的查找字段 Access 2000的表字段查阅功能允许你替代传统的字段文本框所使用的下拉列表框或者列表 框。查阅功能是一个由Access 自动地创建的一对多查询。查阅功能允许你为某个特定的字段提 供一个可接受值的列表。当你从该列表中选择值的时候,该值将自动地输入到当前记录的字段 中。可以指定的查阅字段有以下两种类型: • 在一个包含外部键值的字段,来自一个相关基本表的一个或者多个字段组成的值列表的 字段。这种类型的查找字段目的是添加或者更改外部键值,确保外部键值和一个主键值 相匹配,从而保持了相关的完整性。在定义一个包含外部键的字段时,两表之间必须在 关系窗口中存在一个关系。例如, N o r t h w i n d . m d b的O r d e r s表具有两个外部键字段: C u s t o m e r I D和E m p l o y e e I D。C u s t o m e r I D字段的查找功能在一个下拉列表中显示了 C u s t o m e r s表中的C o m p a n y N a m e字段值。E m p l o y e e I D字段显示的是E m p l o y e e s表的 L a s t N a m e和F i r s t N a m e字段,两个之间由逗号和空格进行分隔(见图1 0 - 1 3 )。 • 除了单个主键字段外的任何字段中,提供一个可以从中选择的具有固定值的列表。字段 列表保持了参照完整性,因为这样可以约束对应外部键字段值的主键值的选择。 图10-13 查找字段的下拉值列表 可以在“设计”视图或者表“数据表”视图中添加一个新的查阅字段;但是,在“设计” 视图中只能向一个现有的字段上添加查阅功能。在“数据表”视图中,只能显示组合框控件, 即便你指定的是列表框控件。在与具有查阅字段的表进行了绑定的窗体上,可以显示组合框或 者列表框。在实践中,下拉列表(组合框的限制列表属性被设为了“是” )是查阅字段控件的最 为常见的类型。以下几节将描述如何添加外部键和固定列表查阅功能到一个表字段上。 10.3.1 用查阅向导添加外部键下拉列表 在本书前面章节中创建的Personnel Actions表是一个使用外部键下拉列表的查找字段的 “候选人”。遵循如下步骤,使用“查阅向导”将Personnel Actions表的p a I D字段改变为一个查 找字段: 1) 在“数据库”窗口中,选择Personnel Actions表,按下C t r l + C将该表复制到剪贴板上。 2) 按下C t r l + V,显示“粘贴表方式”对话框。为复制输入一个名字,例如t b l L o o k u p,单 击“确定”按钮,使用“结构和数据”创建复制。 第10章创建多表查询和交叉表查询223 3) 在“设计”视图中打开表的复制,并选择p a I n i t i a t e d B y字段。单击“查阅”选项卡,显 示当前查阅属性;文本框控件不具有查找属性。打开“数据类型”下拉列表,选择“查阅向导” (见图1 0 - 1 4 )。“查阅向导”的第一个对话框便会出现。 图10-14 选择“查阅向导”向一个字段添加查阅功能 4) 你要用该字段去查找另一个表( E m p l o y e e s)中的值,所以接受第一个(默认)选项(见图 1 0 - 1 5 )。单击“下一步”按钮,显示“查阅向导”的第二个对话框。 5) 在激活“视图表”选项的情况下,选择E m p l o y e e s基本表,p a I n i t i a t e d B y字段与之是相关 的(见图1 0 - 1 6 )。单击“下一步”按钮,显示第三个对话框。 6) 单击>按钮三次,添加E m p l o y e e I D、L a s t N a m e和F i r s t N a m e字段到查找列表中(见图1 0 - 1 7 )。必须包含与基本表关键字字段相关的外部键字段。单击“下一步”按钮,进入第四个对 话框。 7) 调整列的宽度,使得在显示姓名时不要留下过多的尾部空白。向导将确定E m p l o y e e I D 是关键字列并推荐隐藏该关键字列(见图1 0 - 1 8 )。单击“下一步”,显示第五个同时也是最后一 个对话框。 图10-15 在表的外部键和第一个“查阅向导” 对话框中的固定列表查找之间进行选择 图10-16 为外部键查找字段选择 基本表或者查询 8) 在文本框键入Initiated By作为查找字段的标签。 9) 单击“完成”按钮,结束向导的工作。当向导问你是否保存表的设计时,单击“确定”。 新的查找字段属性将出现,如图1 0 - 1 9所示。由向导创建的作为行来源属性的Jet SQL 查询语句 为SELECT DISTINCTROW [Employees].[EmployeeID] , [ E m p l o y e e s ] . [ L a s t N a m e ], [Employees].[FirstName] FROM [Employees];。 图10-19 添加到paInitiatedBy字段的查找属性 提示步骤6之前各步中是以它们的表次序添加字段的,但是你可以用“查阅向导”以你喜欢 的任何次序添加字段。或者,也可以在创建了查找列表之后编辑行来源属性的S Q L语句来重新 安排各列。 10) 向导将p a I n i t i a t e d B y字段重新命名为E m p l o y e e I D,所以将“字段名称”属性改回 p a I n i t i a t e d B y。改变字段名字不会影响到该查找操作。 11) 单击“表视图”按钮,保存在显示该表数据表上的改变。只有列表的第一个可见的列 出现在Initiated By 列。将Initiated By 列的宽度调整为和下拉列表的宽度大致相同,约为1.5 英 寸。将插入符移到Initiated By 列,打开下拉列表,显示向导的工作(见图1 0 - 2 0 )。 12) 返回“设计”视图,选择p a I n i t i a t e d B y字段的行来源属性,单击“创建”按钮,在“查 询设计”窗口中显示行来源的S Q L语句(见图1 0 - 2 1 );然后关闭“查询设计”窗口。 224 第二部分最大限度地利用查询 图10-17 选择字段包含在你的查找列表中图10-18 调整查找列表的列宽,隐藏关键字列 第10章创建多表查询和交叉表查询225 提示如果查阅向导改变了查阅字段 的名称,确保将之改正为最初的值。 如果字段名与基本表的字段名不同, 向导便会改变字段名字。尽管说“名 称自动更正”可以处理字段名字的改 变,但是解冻表和字段的名字是一个 很好的数据库设计习惯。在开发过程 中改变表和字段名的做法属于迫不得 已而为之。 如果需要向导创建的组合框控件 的属性列表,请参见1 3 . 3 . 9节“使用 组合和列表框”。 图10-21 在“查询设计”视图中的行来源属性的SQL语句 提示如果在查阅字段和基本表字段之间存在一个关系,A c c e s s将重新创建这个关系。此时,一 些带有_ 1或者_ 2后缀的特别的表将出现在“关系”窗口中。这个问题在Access 95就有,在A c c e s s 2 0 0 0中仍未修复。你可以从“关系”窗口中删除这些伪造的表,不会影响到查找字段的操作。 10.3.2 向一个表添加固定值查找列表 添加另一个查找功能—固定值列表的过程和在前面章节中使用查找向导创建外部键查找 列表的过程在很多地方都是一样的。遵循如下步骤,向Personnel Actions表的复制件中的 p a Ty p e字段添加一个固定列表查找功能: 1) 选择p a Ty p e字段,打开“数据类型”列表,选择“查阅向导”,启动向导。 2) 在第一个“查阅向导”对话框中,选择“我将键入我想要的值”选项,单击“下一步” 按钮。 3) 在第二个“查阅向导”对话框中,在“列数”文本框中键入2,按下Ta b键,创建第二个 列表列。 4) 在四行的列1和列2列中键入H,Hired; Q,Quarterly Review; Y,Yearly Review;和S, Salary Adjustment。调整列的宽度与输入相适合(见图1 0 - 2 2 )。单击“下一步”按钮,显示向导 的第三个对话框。 5) paTy p e字段使用的是人员操作类型的单字符缩写,所以选择列1作为“唯一标识该行的 图10-20 “查阅向导”创建的下拉查找列表 字段”( p a Ty p e字段不能唯一的标识该行;列1包含的是你想插入到字段中的单个字符值)。单 击“下一步”按钮,显示第四个也是最后一个 向导对话框。 6) 键入Ty p e作为列的标签并单击“完成” 按钮。p a Ty p e字段的查找属性便会出现,如图 1 0 - 2 3所示。“行来源类型”为“值列表”。在 “行来源”中包含如下的值:“H”;“H i r e d”; “Q”;“Quarterly Review ”;“Y”;“Ye a r l y R e v i e w”;“S”;“Salary Adjustment”。 7) 向导又一次改变了字段名字,这次是标签 的名字,所以将字段名属性的值改变为paType。 8) 单击“表”视图按钮并保存对表所做的 改变。将Type 列的宽度增加为约1.5 英寸,将插 入符放入到Type 列内,打开固定值列表,检查一下向导的工作是否正确(见图1 0 - 2 4 )。 9) 如果你不要缩写出现在下拉列表中,便将“列宽”属性值的第一项改变为0。 10) 如果你想从一个字段删除查找特征,便选定该字段,单击“查找”选项卡,从“显示 控件”下拉列表中选择“文本框”。 提示将一个查找字段的“列表宽度”属性设置为足以显示描述列的字符的值,以提供确定的选 择。“列表宽度”属性决定着列表的最大宽度,所以不需要扩展数据表视图中的字段宽度。 注意查找功能在经验老练的数据库开发人员之间引发了一场争论。关系数据库纯化论者拒绝将 查询作为表属性嵌入。使用外部键、下拉列表的另一个异议是不熟练的用户在打开列表之后容 易在不经意间便改变了表中的数据。但是, Access 2000的查阅功能是一个有用的工具,对新数 据库用户来说更是如此。 10.4 向表或者查询添加子数据表 子数据表与查阅字段密切相关,但是两者的目的却不相同。子数据表用于显示一个嵌入数 据表中的相关的值,而查阅字段则是在一个组合框或者列表框中显示基本表的值。A c c e s s的这 两个特征都依赖于一对多查询的等价物;查询之间的差异在于子数据表的多方为一个相关的表, 而查找字段却使用对基表的查询来提供多方的值。你还可以将子数据表级联或者层叠起来进行 226 第二部分最大限度地利用查询 图10-22 在“查阅向导”的第二个对话框中 添加查找列表值 图10-23 用值列表属性创建的查阅字段属性图10-24 “查阅向导”创建的固定值列表 多级连接表中相关数据的显示,查找字段不具有这项功能,但是一个表或者查询不能具有多个 子数据表。图1 0 - 2 5所示的C u s t o m e r s表显示的是Alfreds Futterkiste的Orders 子数据表,其上带 有为前三个订单显示Order Details记录的子-子数据表。 有关子数据表的更多信息,请参见4 . 5节“理解表和字段的属性”。 图10-25 Customers表上具有Orders 子数据表和Order Details子-子数据表扩展 注意子数据表与Visual Basic 6.0的层次式FlexGrid (MSHFlexGrid)控件很相似,后者在扩展的网 格中显示相关的值。与子数据表不同, M S H F l e x G r i d控件是只读的并且使用了一种非标准 SHAPE 查询语法向网格提供数据。 10.4.1 表子数据表 N o r t h w i n d . m d b的大部分表已经具有了子数据表;但是, E m p l o y e e s表还没有。遵循如下步 骤,向E m p l o y e e s表添加一个Personnel Actions子数据表: 1) 如果还没有在Personnel Actions表的p a I D字段和E m p l o y e e s表的E m p l o y e e I D字段之间添 加一个关系,则现在便需要添加该关系。 选择“工具”,“关系”,打开“关系”窗口,单击工具栏的“显示表”按钮,添加 Personnel Ac
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服