将值从主表单传递到子表单

时间:2018-10-05 16:18:42

标签: vba ms-access access-vba ms-access-2016

我有两个表tblContactstblAddresses,它们与contactID相关,作为tblAddresses上的外键。并非每个地址都与联系人相关联,因为其中一些地址与组织相关,但与人员无关。当前,表之间的关系是联系人和地址之间的一对多关系,因为有时一个联系人可以具有多个地址(办公室,邮件等),我不对这种关系实施参照完整性,因为出于上述原因-并非每个地址都有联系人。

在以frmContacts作为记录源的表单tblContacts中,我有一个以fsubAddresses作为记录源的子表单tblAddresses,需要链接到当前记录的contactID。但是,contactID上的窗体和子窗体之间的父子关系似乎无效-当我将控件源设置为子窗体中contactID的文本框时,我看到一个空值,而不是与当前联系人匹配的预期contactID号码。

我创建了一个不完整的解决方法,我想看看是否有更好的解决方案或其他方式来构建这种关系。

我在txtContactID主窗体中创建了一个文本框frmContacts,其控制源设置为contactID,然后在fsubAddresses子窗体中创建了一个带有默认设置的锁定组合框值设置为txtContactID,这将为当前记录显示正确的contactID。然后,我将此组合框的控件属性设置为contactID,这样它将把该值传递到tblAddresses的{​​{1}}字段中。这行得通,但我觉得问题过于复杂了。我想念什么?

1 个答案:

答案 0 :(得分:0)

添加新地址时,您不必访问主表单的contactID并使用它来填写子表单的contactID。另外,我认为您既不想在主窗体上也不在子窗体上看到contactID,实际上您也不必这样做。当在子表单中添加新地址时,Access使用“链接子域”和“链接主域”定义的关系来填充子表单的记录源的contactID。保存地址之前不会发生这种情况,因此当记录仍然是新的且未保存时,您就不会在子窗体上“看到”该值。