首页 文章

除了在没有VBA的Access 2010中的主窗体中显示的记录之外,如何显示子窗体中的所有记录?

提问于
浏览
0

我正在使用Access 2010中存储地址的数据库 . 我仔细设计了表格,以便我可以分别存储一个人和一个地址,然后通过另外两个表格将它们联系起来(人们之间的关系也需要与他们的地址分开存储) .

我有以下表格(对于这个问题,重点是 PERSONRELATIONSHIP ):

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 回答

  • 1

    就在这里 . 自从我使用Access以来已经有一段时间了 . 听起来有点像你非常接近 .

    首先创建主/主表单 . 然后创建子表单/详细信息表单 . 只需将详细信息表单拖到主表单上,如果您的关系正确,它将自动为您设置父/子关系 .

    设置父/子关系后,您将修改子表单/详细信息表单的记录源信息 . 如果它基于表,则将其更改为查询 . 这可以在表单设计视图中完成 .

    简单的答案是,在查询构建器中,您可以隐藏字段 . 在您的情况下,您可能希望隐藏子表单中的Person_ID字段 .

    查询必须包含关键字段,以便保留父子关系 .

    此外,如果您的子表单是带有文本框的表单,您也可以删除不希望看到的文本框 .

    所以正确的答案是肯定的,但我能解释得足以让你理解吗?

  • 1

    设置子窗体的记录源以包括关系中除主窗体上显示的记录之外的所有行 . 我不确定定义“匹配关系”的逻辑是什么样的,但我在下面做了一个猜测:(这是所有的一个查询,但为了理解目的我已经将其分解了一些 - 删除了评论使用它)

    'get all persons in a given relationship
    SELECT p.Person_ID, First, Last 
    FROM Person p INNER JOIN Relationship r ON p.Person_ID = r.Person_ID 
    
    'define given relationship
    WHERE Relationship_ID = (
      SELECT Relationship_ID FROM Relationship 
      WHERE Person_ID = Forms(nameOfYourMainForm)!nameOfTextboxInMainFormContainingPersonID)
    
    'and the person isnt the person displayed on the main form:
    AND p.Person_ID <> Forms(nameOfYourMainForm)!nameOfTextboxInMainFormContainingPersonID;
    

相关问题