【问题标题】:How to create a one-to-many relationship between a query and a table in Access 2016?如何在 Access 2016 中的查询和表之间创建一对多关系?
【发布时间】:2019-02-17 07:26:15
【问题描述】:

上面是“人”表

以上是基于“People”表查询“Count Country”的SQL视图

以上是基于表“People”的查询“Count Country”的数据表视图

上面是另一个名为“城市列表”的表格

为什么不能在Query“Count Country”和Table“City List”之间建立一对多的关系?

【问题讨论】:

  • 您可以,只需将字段从一个查询拖到另一个查询的匹配字段上即可。这不是一个可执行的关系,因为两个源都是查询而不是表,因此向导会感到困惑。如果您双击连接线,您可以将其从连接更改为左/右连接。
  • 首先要确定/解释您为什么要尝试建立这种关系。你希望用它实现什么功能。
  • 我知道建立这种关系似乎毫无意义,它实际上只是我创建的一个简单示例,只是为了更好地解释我的问题(因为我的实际数据库更复杂和保密)。在这个例子中,我想建立一个基于查询“Count Country”的表格,然后我可以选择任何国家,点击一个按钮,它将带我到链接表“City List”,只显示我的城市选定的国家。为了实现这一点,我需要先在 Query “Count Country” 和 Table “City List” 之间建立一对多的关系。如果我的解释不清楚,请告诉我。
  • 当对表 CityList 的 DISTINCT 查询将返回每个国家/地区的唯一记录时,为什么需要从表 People 中计算国家/地区?如果您想要仅列出 People 表中使用的国家/地区的列表,那么在 People 表中进行聚合将是合适的。仍然不清楚您要完成什么。 France 显示在 People 表中,但不在 CityList 中。为什么不将 CityList 的 ID 保存到 People 表中?

标签: ms-access ms-access-2016


【解决方案1】:

您所描述的听起来像是级联(依赖)组合框。因此,如果您没有国家/地区表,cbxCountry 的 RowSource 可以是 SELECT DISTINCT Country FROM CityList;。然后是由 cbxCountry SELECT City FROM CityList WHERE Country=[cbxCountry]; 过滤的 cbxCities 的 RowSource。当移动到另一条记录和/或更改 cbxCountry 中的选择时,您将需要代码来重新查询 cbxCity。

如果您想要一个显示不同国家/地区的表单,那么 RecordSource 可以是相同的 DISTINCT 查询。然后编写代码为关联城市打开一个表单:

DoCmd.OpenForm "Cities", , , "Country='" & Me.Country & "'"

【讨论】:

    【解决方案2】:

    您只能在表之间创建具有参照完整性的关系。此外,两个字段必须具有相同的数据类型,并且左侧的字段(您拖动到另一侧的字段)必须是该表的主键(或至少具有唯一索引不允许 Null 值)。

    在没有参照完整性的情况下创建关系的唯一原因是告诉 Access 数据是如何相关的,因此当您将两个表都添加到询问。此外,Access 可能会在处理数据表时自动创建“子数据表”。

    要“自动”构建跳转到城市的表单,请使用表单向导并从您的查询和表格中添加字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-03
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多