我有一个弹出窗体,使用MS Access数据库中主窗体上的按钮打开。弹出窗体创建一个新记录(在单独的表中),需要链接到主窗体中的当前记录。如何正确设置?
这两种形式(frmMain,frmWB)基于2个独立的表(tblMain和tblWB)。记录具有1:1的关系(每个主记录只能有一个WB1记录)。
主窗体(frmMain)具有主键[ID]
来自(frmWB)的弹出窗口具有主键[WBID](自动编号)和[MainID](数字)。
数据录入人员将首先输入主要信息(这是避免孤儿所必需的),然后单击保存主记录的按钮并打开弹出窗体以添加详细信息。完成后,他们点击关闭按钮,保存弹出记录,关闭弹出窗口,然后返回主窗体(后面保持打开状态)。导航已在弹出窗口中禁用,并设置为循环当前记录。
我尝试使用两个表的主要ID进行链接,但在弹出窗口中添加新记录时似乎无法可靠地链接正确的ID号。我尝试使用子表单,但是如果在子表单中输入数据时意外命中主表单上的导航或“新记录”按钮会产生问题 - 这会在tblWB中创建具有错误ID号的记录。
答案 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的概念都相同。如果这样做,弹出窗口将自动创建一个链接到主表单记录的新记录。