【问题标题】:Subforms integration not working seamlessly in Ms Access 2010子表单集成在 Ms Access 2010 中无法无缝工作
【发布时间】:2011-05-16 13:19:10
【问题描述】:

我在 MS Access 2010 中有一个表单,其中包含两个子表单。我已经定义了与表格后面的表格的一对一关系。这两个子表单都应该用于在相应的表中创建记录,然后更新父表单中的外键。但是当我首先填写子表单时,会在相应的表中创建一个条目,但外键没有更新。这不应该自动发生吗?还是应该添加代码来更新父表单的字段?

此外,当我先开始填写主表单然后跳转到任何子表单时,我会收到以下错误消息:
“您必须在 'Activations.dbBoxID' 字段中输入一个值”(Activations 是这里的主要形式,dbBoxID 是外键字段。)

另一个问题是我不希望子表单更新相应的表,直到主表中的条目也被创建(即主表单中的所有必填字段也被填写)。

我是 MS Access 的新手。任何帮助将不胜感激!

【问题讨论】:

  • 您的表格是颠倒的。存储外键的表是 CHILD 表,应该在子表单中,从中提取 FK 值的表作为父表单。这是 LinkChild/LinkMaster 属性可以操作的唯一方式。
  • 这是有道理的。我不知道子表单 - 父表单关系以这种方式工作。我很快写了一个示例数据库,它完美无缺。谢谢大卫!

标签: ms-access ms-access-2010


【解决方案1】:

您在这里缺少的概念,并且没有向您解释的是,当您在访问中建立主子关系时,您可以使用表单和子表单对这些关系进行建模,但是您将表单基于实际表而不是将这些表连接在一起的查询。

换句话说,您的主表单应该基于主表或父表。不要加入子表。我要再重复一遍:不要加入子表。

因此,您可以将主表单或主表单基于查询,但是当您这样做时,不要加入该查询的子表。事实上,在大多数情况下,无论如何使用和基于查询的表单确实没有任何优势。只需创建表单,并将其基于表格。

相同的建议适用于子表单。您将子窗体基于子表。不要使用带有连接的查询。

您收到错误消息的原因是您有一个基于两个表的主表单查询。使用强制关系,当您的焦点从主窗体切换到子窗体时,会发生主窗体的记录保存,因此您会收到错误消息。

因此,您的错误和问题是由于在这种情况下不需要时,您将表单基于作为两个表连接的查询。

【讨论】:

  • 我将子表单基于实际表而不是查询,但是主表单基于具有外键的表。正如大卫所说,我的表格是颠倒的。交换表格解决了问题。谢谢!
【解决方案2】:

如果先输入父表单中的数据,则具有子表单的表单效果更好。然后子表单可以在每个表中的 parent_key 上连接到 foreign_key 上,而无需任何代码。

如果您想让用户首先在子表单中输入记录,请在完成/保存父表单之前不要更新它们,您将需要进行一些编码。不确定您为什么需要/想要这样做?

带有账单和付款子表单的客户表单,例如,您将输入足够的客户数据来创建记录。然后可以输入账单和/或付款。

【讨论】:

  • 有道理。我已经更改了表单层次结构,现在一切正常:)。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 2014-06-24
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多