将子表单中的新记录与父表单中的记录相关联

Posted

技术标签:

【中文标题】将子表单中的新记录与父表单中的记录相关联【英文标题】:Associating new records in a subform with record in parent form 【发布时间】:2012-10-11 01:07:36 【问题描述】:

我正在为非营利组织使用 MS Access 2010 中的采购数据库,遇到了使用其他资源似乎无法解决的问题。

我有两张与本次讨论相关的表格,一张是采购订单,一张是订单项。每个行项目记录都有一个关联的采购订单号(实际上是一个文本字段,因为允许使用字母),打开“强制参照完整性”,一个采购订单到多个采购行。)为了编辑采购订单,我有一个表单,我最初使用向导创建的,但从那时起进行了大量修改。 PO 编辑表单中有一个子表单,它显示采购行表的数据表视图,由主表单中当前的 PO 过滤。

最初,当我在子表单中创建新记录时,它会自动将链接 PO 字段设置为当前 PO。这样,新的采购行记录与当前采购订单相关联。不过最近,正在创建的新记录在链接字段中没有值,除非我在该列中手动选择采购订单,否则记录在保存时会从视图中过滤掉。

所以问题是,在这种类型的子表单中,什么属性控制新记录的初始化方式?是否存在可能导致此行为的其他问题?

不幸的是,我没有立即注意到这个问题,所以我不知道它工作和失败之间发生了什么变化。此外,它似乎是断断续续的,有几天工作而不是其他工作(但在一天内从未改变。)我认为这只是意味着我错过了另一个变量。

根据我在这里提问之前的研究,我尝试过的一些事情:

以前,子表单的“链接主字段”属性设置为父表单的“ID”字段。我现在在主窗体中创建了一个链接到该字段的文本框并将其设置为主字段。老实说,我不明白这有什么帮助,但多个操作指南推荐了它。

在采购行表中使链接字段成为必需。这可以防止记录消失,但不会更改初始化。

在两个字段之间强制执行引用完整性。正如我所说,它现在是强制执行的,但最初不是。这并没有引起任何明显的变化。

在进入子表单之前手动保存记录。同样在我退出之前保存子表单记录。

感谢您的任何建议。

【问题讨论】:

这在我的系统上正常工作。你能开始一个新的简单数据库,看看你是否遇到同样的问题吗?也许它是特定于数据库的。 新数据库没有同样的问题。他们工作得很好。我无法确定导致这个不起作用的差异,不幸的是我已经投入了太多的开发时间想要重新开始。 由于问题仅限于那一个db文件,看反编译能不能解决。 ***.com/questions/3266542/… Decompile 可以修复已编译的 VBA 代码中的损坏。但是,我不太相信它会在这种情况下有所帮助,因为我不明白您的应用程序在前一天失败后的一天如何能够正常工作。 @Ethan48 - 数据库是专有的还是您可以让我们拥有一份副本(即使是空数据或测试记录)以便我们查看? 大家好。再次感谢您的帮助。 @HansUp,我尝试了反编译并没有看到任何变化。请注意,我有一个 .accdb 文件,而不是说明中提到的 .mdb 文件。这不会有任何影响,对吗? 【参考方案1】:

我知道这篇文章比较老,但我最近遇到了这个问题并找到了解决方案。

我想你的数据库是分裂的。当您的 Access 版本高于您的数据库的内置版本时,就会出现问题。

从前端删除表格,然后重新链接到它们。重置您的表单主/子字段,一切都应该正常工作。

希望这对将来的其他人有所帮助。

【讨论】:

我很高兴这对你有用。有趣的是,我的数据库没有被拆分,但问题最终神秘地消失了。【参考方案2】:

在子表单上,确保将链接子字段和链接主字段属性都设置为创建关系的数据库字段。如果父表单绑定到包含创建关系的关键字段的记录源,则不需要指定文本框或任何其他要链接的控件,只需指定字段名称即可。

【讨论】:

以上是关于将子表单中的新记录与父表单中的记录相关联的主要内容,如果未能解决你的问题,请参考以下文章

LibreOffice Base 子窗体显示不相关的记录

如何在 Rails 4.0 表单中显示选定记录中的关联值

尝试将子表单记录源设置为 sql 查询时出错

查询时不显示oracle表单主明细关联记录

如何在 Access 的子窗体上不显示选定的记录?

使用 `:has_many :through` 记录关联处理复选框表单