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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了弹出窗体,创建将1:1链接到主窗体的记录相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

答案

如果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中使用它

另一答案

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

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

以上是关于弹出窗体,创建将1:1链接到主窗体的记录的主要内容,如果未能解决你的问题,请参考以下文章

将子窗体链接到主窗体上的组合框时出现问题

更新子窗体 Access 2010 时出错

c#如何实现关闭当前窗体并打开另一个已经创建的窗体。

未绑定主窗体上的列表框链接到绑定子窗体产生 3021(无当前记录)错误

C# Winform自定义控件加载到主窗体中之后,自定控件上面的空间 怎么和主窗体上其他控件交互?

C# Winform 登陆窗体跳转到主窗体,登陆窗体隐藏