我正在使用Access 2010中存储地址的数据库 . 我仔细设计了表格,以便我可以分别存储一个人和一个地址,然后通过另外两个表格将它们联系起来(人们之间的关系也需要与他们的地址分开存储) .
我有以下表格(对于这个问题,重点是 PERSON
和 RELATIONSHIP
):
PERSON RELATIONSHIP ADDR_REL ADDR
------------ ------------ ----------- -----------
(PK)PERSON_ID (FK)PERSON_ID (FK)RELATIONSHIP_ID (PK)ADDR_ID
FIRST (K)RELATIONSHIP_ID (FK)ADDR_ID ADDR_LINE1
LAST RELATIONSHIP_TYPE (PK)ADDR_REL_ID ADDR_LINE1
(PK)REL_PK ...
Without using VBA (if possible) ,我希望能够在表单上显示给定的 PERSON
,并且有一个Subform在匹配 RELATIONSHIP
中显示其他 PERSON
,但不显示原始 PERSON
(在父表单中显示的任何记录)子表单结果集 .
仅供参考:我能够自己在VBA中为此构建一个解决方案,但看起来他们应该能够在没有它的情况下解决这个问题 .
我已经尝试过隐藏字段,链接子表单和自定义查询,但我总是最终显示子表单中显示的关系中的所有人(或根本没有结果或参数提示) . 没有编写代码,真的没有办法打败这个吗?
2 回答
就在这里 . 自从我使用Access以来已经有一段时间了 . 听起来有点像你非常接近 .
首先创建主/主表单 . 然后创建子表单/详细信息表单 . 只需将详细信息表单拖到主表单上,如果您的关系正确,它将自动为您设置父/子关系 .
设置父/子关系后,您将修改子表单/详细信息表单的记录源信息 . 如果它基于表,则将其更改为查询 . 这可以在表单设计视图中完成 .
简单的答案是,在查询构建器中,您可以隐藏字段 . 在您的情况下,您可能希望隐藏子表单中的Person_ID字段 .
查询必须包含关键字段,以便保留父子关系 .
此外,如果您的子表单是带有文本框的表单,您也可以删除不希望看到的文本框 .
所以正确的答案是肯定的,但我能解释得足以让你理解吗?
设置子窗体的记录源以包括关系中除主窗体上显示的记录之外的所有行 . 我不确定定义“匹配关系”的逻辑是什么样的,但我在下面做了一个猜测:(这是所有的一个查询,但为了理解目的我已经将其分解了一些 - 删除了评论使用它)