弹出窗体,创建将1:1链接到主窗体的记录

问题描述 投票:1回答:2

我有一个弹出窗体,使用MS Access数据库中主窗体上的按钮打开。弹出窗体创建一个新记录(在单独的表中),需要链接到主窗体中的当前记录。如何正确设置?

两种形式(frmMain,frmWB)基于2个单独的表(tblMain和tblWB)。记录具有1:1关系(每个主记录只能有一个WB1记录)。

主窗体(frmMain)有主键[ID]

来自(frmWB)的弹出窗口具有主键[WBID](自动编号)和[MainID](数字)。

数据录入人员将首先输入主要信息(这是避免孤儿所必需的),然后单击保存主记录的按钮并打开弹出窗口以添加详细信息。完成后,他们点击关闭按钮,保存弹出记录,关闭弹出窗口,然后返回主窗体(后面保持打开状态)。导航已在弹出窗口中禁用,并设置为循环当前记录。

我尝试使用两个表的主要ID进行链接,但在弹出窗口中添加新记录时似乎无法可靠地链接正确的ID号。我尝试使用子表单,但是如果在子表单中输入数据时意外命中主表单上的导航或“新记录”按钮会产生问题 - 这会在tblWB中创建具有错误ID号的记录。

forms ms-access access-vba
2个回答
0
投票

如果frmWB打开模态,以便在弹出窗口打开时无法更改frmMain的当前记录,那么你将在frmWB的BeforeInsert事件过程中有这个:

Private Sub Form_BeforeInsert(Cancel As Integer)
    Me!MainID = Forms!frmMain!ID
End Sub

这会自动将tblMain ID分配给新创建的tblWB记录。

MainID应该是frmWB上的一个不可见的文本框,绑定到表字段MainID。调试时可以使其可见,但应该锁定。

如果frmWB不是模态的,我会使用OpenArgs将ID从frmMain传递给frmWB。然后在Form_BeforeInsert而不是Forms!frmMain!ID中使用它


-1
投票

与Andre的评论相反,通常的方法是在两个表之间创建关系,强制引用完整性并使用级联更新。

虽然this article特定于Office 2003,但对于所有版本的Access,概念都是相同的。如果执行此操作,弹出窗口将自动创建链接到主窗体记录的新记录。

© www.soinside.com 2019 - 2024. All rights reserved.