MS Access 保留子表单中的 ID 字段,填充父表单中的 ID

Posted

技术标签:

【中文标题】MS Access 保留子表单中的 ID 字段,填充父表单中的 ID【英文标题】:MS Access keep ID field in subform filled with ID from parent form 【发布时间】:2015-03-11 16:12:29 【问题描述】:

每次我跳转到可以输入新记录的位置时,父级的 ID 字段为空,因此连接丢失。我正在寻找解决方法。

我的设置

我有一个处理两个 1:n 关系的父表单

(学校班级 --> 学生,学校班级 --> 测试)。

对于第一个关系,我使用了向导。一切正常。第二个我在未绑定列表中显示连接的测试。列表下方是一个打开表单的按钮,用于为我来自的班级(父表单)输入新记录(测试)。所以我通过 VBA 过滤子表单,以便只显示当前类的测试。这也很好用。

当通过已经与类连接的测试时,正确的 ID(过滤的类)是相应输入字段的值。但是当我进入新的新记录状态(所有字段为空)时,与父级的连接中断,用户必须手动输入父级(学校班级)的 ID。

我的问题

我的设置是否正确? 有没有更好的方法来创建一个提供(仅)输入连接到父数据的新记录的子表单? (可能没有子表单中的 ID 输入字段并通过 VBA 强制传递值?)

感谢您的宝贵时间!

【问题讨论】:

【参考方案1】:

您可以使用 Default Value 设置 Tests 表单的 classid,但请确保父表单在后台或弹出窗口后面打开。

在测试表单的classid控件的属性表/数据选项卡下,在默认值单元格中输入:

=Forms!parentformname!classid

或者,在测试表单的 OnOpen 事件中的 VBA:

Me.classid.DefaultValue = Forms!parentformname!classid

然后您可以选择隐藏(可见 - 否)这个 classid 控件,这样用户就不会修改它。始终建议不要让用户控制主键和外键。

【讨论】:

哦,我的... 这个解决方案非常简单 - 几乎受伤 :-) 我只是设置了默认值,一切都很好。谢谢! 嗯......这个解决方案有效,但现在我遇到了另一个问题。当有人按下按钮时,他会自动跳转到以父项为默认值的“新记录”。如果用户现在在没有编辑的情况下关闭表单,则将几乎空白的记录保存到数据库中。有没有聪明的方法来解决这个问题?好吧,当我只是根据需要定义一些输入参数时,用户会得到一些难看的提示。我希望输入只是不存储。任何的想法?带或不带 VBA? 你用的是上面哪个版本?表单控件还是 VBA?在保存记录之前不会保存默认值。如果表单关闭时所有表单字段都为空,则不会保存任何数据。检查以查看您的表单关闭或任何关闭按钮事件。删除任何保存记录命令。

以上是关于MS Access 保留子表单中的 ID 字段,填充父表单中的 ID的主要内容,如果未能解决你的问题,请参考以下文章

MS Access:如何根据子表单中的字段打开表单

可以通过 VBA 更改 MS Access 子表单字段吗?

MS Access - 基于同一张表但不同记录的表单和子表单

MS Access 子表单的多个分离条件

根据 MS Access 中的用户过滤子表单

基于查询的子表单中的字段的 Access 2007 验证帮助