如果我没看错,您是说您将主父表作为表单的主要部分,并且您希望在导航时子记录显示在子表单中。Access 默认以这种方式工作,您根本不必编写任何代码。
此外,如果您将子记录添加到子表单中,将为您正确设置外键值。再次不需要代码。
所以,建立一个基于主父表的标准表格。然后您可以基于子表构建一个连续表单并将其放入上述主表单中。
然后在设计模式下打开主窗体并设置子窗体属性表。在该属性表中,只需设置链接主字段和链接子字段。链接主将设置为主表单中的主键,链接子将设置=子表单中表中的外键字段。
一旦完成上述工作,那么整个事情应该可以在没有任何编码的情况下工作。
至于孩子添加错误信息:
假设您有一个主要的客户表单,那么用户在导航到新的客户记录之前无法添加订单。如果他们不导航到新客户记录,那么他们将在此主表单中编辑现有客户。因此,在所有情况下,将始终添加主要客户记录,然后才能输入客户订单。
我想用户可以导航到空白客户记录,然后将光标(焦点)跳转到订单所在的子表单并开始输入。即使在这种情况下,当焦点从主客户表单移动到订单子表单时,也会添加空白客户记录。(因此,当您使用经典主表单 + 子表单设置时,访问 UI 会处理父记录的添加)
因此,从用户界面的角度来看,如果没有现有的主要客户记录,用户实际上是不可能输入订单的。因此,您不会收到有关父客户记录不存在的错误消息。如果此人将订单表单作为非子表单打开,然后尝试添加新的订单记录,您只会收到这种错误。在这种情况下,您将收到一条错误消息。因此,我真的认为不需要捕获此错误消息。我不允许用户单独打开子表单。如果出于某种奇怪的原因,您确实允许将子表单与主表单分开打开,则使用allow additons = false 打开表单(再次防止需要错误消息)。
我想如果由于某些原因允许用户单独打开子表单或订单表单并且您没有关闭允许添加,那么他们将能够导航到新的空白记录,这意味着 FK客户记录设置不正确。如果此订单表格中有选择客户的规定,那么您当然可以在此订单表格的更新前事件中放入以下代码:
If isnull( foreign key field name goes here) = true then
Msgbox “ you must select a customer before you can enter an order”
Cancel = true
End if
再一次在某种意义上并没有真正捕捉到将要添加子记录而父记录不存在的错误消息。我们只是使用 UI 界面告诉用户执行一些操作,以防止该错误消息首先出现。