Ms Access中更新主窗体时更新子窗体的相关字段

Posted

技术标签:

【中文标题】Ms Access中更新主窗体时更新子窗体的相关字段【英文标题】:Update Related Fields of Subform When Updating Main Form In Ms Access 【发布时间】:2018-11-15 10:48:31 【问题描述】:

我有一个主窗体和一个连续的子窗体,它使用invoice id, customer name and invoice date 连接到主窗体。当我添加新发票时,我在主表单中选择客户并在子表单中输入数据,因为我允许在子表单中进行编辑。

现在,如果我在主表单中更改客户,客户也应该在子表单中更改我已经添加的数据。但是我的子表单变成空白,当我选择以前的客户时,它会显示输入的数据。

我希望我的子表单客户更新到主表单中新选择的客户。我使用了一些 vba 代码,但它不起作用。下面是我从教程中得到的代码。

Private Sub Customer_Name_AfterUpdate()
With Me.[Sales_Invoice_Detail(its my subform].Form.RecordsetClone
Do Until .EOF
.Edit
!Customer_Name = Me.Customer_Name (This is the Field which i want to update in my subform)
!Invoice_Id = Me.Invoice_Id( it has one to many relationship between forms)
.Update
.MoveNext
Loop
'MsgBox "You Change Customer To " & Customer_Name & "!"
End With
Me.Refresh
End Sub

【问题讨论】:

如果是基于查询的,您可以通过 ID 链接两者或使用子表单的.requery。表单是如何设置的,你有没有使用表单向导链接? 为表单和关系提供表定义。 表单与 ID、客户姓名和日期相关联。子表单是基于查询的,有两个表。 如果缩进不当,一旦代码变大,将很难阅读。 【参考方案1】:

使用发票 ID 连接到主表单的连续子表单, 客户名称和发票日期

从连接中删除客户名称和发票日期(MasterLinkFields/ChildLinkFields)。这些可以直接从父表单中提取,也可以使用查询从子表单的源中提取。

【讨论】:

如果我删除客户名称链接,那么在我的子表单中此字段将为空白。 您的主/子链接必须在主键和匹配的外键之间。 是的,你是对的。我删除了链接,但现在我的子表单正在输入数据而没有在主表单中选择客户。你对此有什么建议吗? 如果没有选择客户,我会禁用子表单。

以上是关于Ms Access中更新主窗体时更新子窗体的相关字段的主要内容,如果未能解决你的问题,请参考以下文章

更新子窗体 Access 2010 时出错

在子窗体中输入数据时,MS Access 会自动在主窗体中填写 id

鼠标滚动 1 个主窗体和 2 个子窗体 MS ACCESS

如何从主窗体更新子窗体中的图像框控件源

MS Access 子窗体不显示记录且不导航

子表单在 MS Access 中的主表单之前打开