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

时间:2015-11-05 19:09:17

标签: forms ms-access access-vba

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

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

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

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

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

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

2 个答案:

答案 0 :(得分: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 :(得分:-1)

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

虽然this article特定于Office 2003,但所有版本的Access的概念都相同。如果这样做,弹出窗口将自动创建一个链接到主表单记录的新记录。