我在MS Access 2010中有一个表单,其中包含两个子表单。我已经与表格背后的表格定义了一对一的关系。两个子表单都应该用于在相应的表中创建记录,然后更新父表单中的外键。但是当我首先填充子表单时,会在相应的表中创建一个条目,但外键不会更新。这不应该自动发生吗?或者我应该添加更新父表单字段的代码吗?
当我开始首先填充主表单然后跳转到任何子表单时,我收到以下错误消息:
“你必须在'Activations.dbBoxID'字段中输入一个值”(激活是这里的主要形式,dbBoxID是外键字段。)
另一个问题是我不希望子表单更新相应的表,直到主表中的条目也被创建(即主表单中的所有必填字段也被填充)。
我是MS Access新手。任何帮助都会非常感激!
答案 0 :(得分:2)
您在这里缺少的概念,以及未向您解释的内容是,当您在访问中构建主对子关系时,您可以使用表单和子表单建模这些关系,但是您可以将表单基于实际表而不是将这些表连接在一起的查询。
换句话说,您的主表单应该基于主表或父表。不要加入儿童桌。我将再次重申这一点:不要加入儿童桌。
因此,您可以将主表单或主表单作为查询的基础,但是在执行此操作时,请不要在该查询中加入子表。事实上,在大多数情况下,无论如何在查询中使用和基础表单确实没有优势。只需创建表单,并将其基于表格。
相同的建议适用于儿童表格。您将子表单基于子表。您不要使用带连接的查询。
您收到错误消息的原因是您查询了基于两个表的主窗体。使用强制关系,当您的焦点从主窗体切换到子窗体时,会发生主窗体的记录保存,因此您将收到错误消息。
因此,您的错误和问题是由于您将表单基于一个查询,该查询是两个表的连接,在这种情况下不需要。
答案 1 :(得分:0)
如果首先输入父表单中的数据,则具有子表单的表单会更好。然后子表单可以在parent_key上连接到每个表中的foreign_key,而不需要任何代码。
如果您想让用户首先在子表单中输入记录,在父表单完成/保存之前不要更新它们,您将需要进行一些编码。不确定为什么你需要/想要这样做?
包含账单和付款子表单的客户表单,例如,您可以输入足够的客户数据来创建记录。然后可以输入账单和/或付款。