将值从主窗体传递到子窗体

Posted

技术标签:

【中文标题】将值从主窗体传递到子窗体【英文标题】:Passing a value from a main form to a subform 【发布时间】:2018-10-05 16:18:42 【问题描述】:

我有两个表,tblContactstblAddresses,它们通过 contactID 作为 tblAddresses 上的外键关联。并非每个地址都与联系人相关联,因为其中一些地址与组织相关,但与人员无关。目前,表之间的关系是联系人和地址之间的一对多关系,因为有时一个联系人可以有多个地址(办公室、邮件等)。我没有对这种关系强制执行引用完整性,因为以上原因 - 并非每个地址都有联系人。

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

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

我在frmContacts 主窗体中创建了一个文本框txtContactID,控制源设置为contactID,然后在fsubAddresses 子窗体中创建了一个锁定的组合框,默认值设置为txtContactID,这个为当前记录显示正确的contactID。然后我将这个组合框的控制属性设置为contactID,这样它就会将该值传递到contactIDtblAddresses 字段中。这行得通,但我觉得我把问题复杂化了。我错过了什么?

【问题讨论】:

请显示您当前的代码 你有什么作为父窗体的子窗体控件上的链接主字段和链接子字段属性? @HansUp 我有 ContactID 作为主子字段的字段,结果是“使用ContactIDtblContacts 中的每条记录显示tblAddresses frmContactfSubAddresses 的 RecordSource 是什么?请使用信息编辑帖子(请参阅问题下方的链接)。 @ElizabethHam 听起来您描述了您所看到的关系属性。我问的是子窗体控件的属性。 【参考方案1】:

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

【讨论】:

以上是关于将值从主窗体传递到子窗体的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从子窗体传递回父窗体?

使用 VBA 从主窗体设置子窗体上的窗体属性

从主窗体引用子窗体错误

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

如何从主窗体内部引用子窗体中对象的事件

通过将焦点设置到子窗体中的控件来隐藏焦点控件