多对多关系中的数据输入表单/子表单

问题描述 投票:0回答:2

我有一个具有多对多关系的 Access 数据库。源表称为 Property,目标表称为 Person。一处房产可以有多个所有者,一个人可以拥有多个房产。我创建了一个连接表来适应这种 M-M 关系。

关系布局如下:

为了填充这些表格,我为 Property 创建了一个表单,并为 Person 表创建了一个子表单。我遵循了几篇文章和帖子来实现所需的功能。他们是这里这里这里这里

表格如下:

PersonName 是一个组合框,其行源设置为以下 SQL 查询:

SELECT Person.idPerson, Person.PersonName FROM Person; 

列数设置为2,宽度设置为0cm;1cm

我用于组合框的NoInList事件的VBA代码是:

Private Sub PersonName_NotInList(NewData As String, Response As Integer)
strSQL = "INSERT INTO Person([PersonName]) " & _
                 "VALUES ('" & NewData & "');"
        DoCmd.SetWarnings False
        DoCmd.RunSQL strSQL
        DoCmd.SetWarnings True
        MsgBox "The new person has been added to the list." _
            , vbInformation, "Data Entry"
        Response = acDataErrAdded
End Sub

到目前为止一切正常,但我面临着两个人同名的情况。该表单不允许这样做,因为每次您键入表中已有的名称时,可以预见您会获得与此人关联的现有值。在 Person 表中创建新条目会使该条目在表单的组合框中可见,但我不希望数据条目用户编辑表。

如何实现从表单在 Person 表中创建新条目的功能,同时要求用户确认新条目?

附注我知道问题标题并没有具体反映内容,但我找不到更好的措辞。

编辑:为了使问题简单,我修剪了表格中的字段。还有一些其他属性,例如出生日期,可以区分两个同名的人。

ms-access many-to-many ms-access-2007
2个回答
0
投票

推荐的方法是弹出一个表单以将新人员添加到人员表中。您无法添加人员的直接问题可能是因为您将 [PersonName] 字段设置为人员表中的主键,或者将该字段设置为不允许重复的索引。

我建议您考虑查找有关数据标准化的信息。这将有助于理解主键和外键。


0
投票

我最近也遇到了类似的问题。我通过弹出表单附议该建议。我的问题似乎与你的问题相似。当多方已经有条目时,Access 不喜欢在关系的一侧添加内容。

赞同 acr_scout 所说的:您只需在表单上添加一个按钮即可打开另一个表单。

  1. 创建一个表单,允许您在人员表中输入新人员。

  2. 在原始表单的设计视图中,添加一个按钮。在 Access 2016 中,这应该只是一个名为“按钮”的按钮(还有其他按钮),然后 Access 将启动一个向导,并且有一个选项可以选择单击过程来打开您选择的表单。

    我刚刚尝试了一下,它工作完美,不需要 VBA 编码。如果您愿意,您还可以创建一个切换按钮并自行添加自定义 OnClick 过程。

另一种不太优雅的方法可能是在原始表单中包含人员表的子表单。

编辑: 对于您正在做的事情,如果我正确理解您的问题,则不需要 vba 代码。 Gerard Verschuuren 博士在 YouTube 上有一个很棒的教程,它在创建多对多表单时给了我很大帮助。

© www.soinside.com 2019 - 2024. All rights reserved.