将子表单保存过程链接到父表单保存按钮

时间:2019-06-07 10:00:40

标签: ms-access

大家好,谢谢您的支持!

对于我当前正在设计的一个小型数据库项目,我典型地设置了一张供员工使用的表,以及一个用于容纳这些人所接受的培训的一对多表。

为了进行编辑,我已经建立了一个带有员工数据的父窗体,并在一个连续的子窗体中(链接到父窗体),该子窗体显示了相应的培训。

现在我想拥有一个保存过程,该过程仅在按下父表单上的按钮时发生。对于可管理的“父级”数据。但是我也想在此过程中包含子表单(关系)数据。

这可能吗?

我正在尝试通过VBA手动设置记录集来填充子表单,基本上使用内存作为缓冲区,但是由于它们始终保持与底层表的链接,因此只要更改了字段,数据就会立即保存。

然后,一旦用户“保存”,我试图将数据缓冲在一个单独的表中,并在原始源上转发。但是,我的数据库分为前端文件和远程后端文件,我不知道如何在本地而不是在BE上设置缓冲区(我认为这要慢得多)。

那么有人对如何做到这一点或对以前的尝试有所改进有想法吗?

3 个答案:

答案 0 :(得分:0)

要保存子窗体记录,请执行以下操作:

If Me!NameOfSubformControl.Form.Dirty = True Then
    Me!NameOfSubformControl.Form.Dirty = False
End If

要保存主表单记录,请执行以下操作:

If Me.Dirty = True Then
    Me.Dirty = False
End If

答案 1 :(得分:0)

绑定表格通常会立即保存更改。如果您想防止立即更改,可以:

  1. 将子表单设为不可编辑/锁定的表单:(完全禁止编辑)
  2. 拦截Form_BeforeUpdate(Cancel As Integer)事件,以确定是否允许保存。

有2种方法。这是一个伪/逻辑 在您的子表单的

Form_BeforeUpdate(Cancel As Integer)
    If (not savingAllowed) then
        Cancel = true ' Prevents save
        Me.Undo       ' Undos all changes
    End If
End Sub;

显然,您需要扩展此savingAllowed,以确定保存操作是否得到授权。

答案 2 :(得分:0)

要能够通过命令保存子表单数据,而不是在用户编辑后立即自动保存,您需要使用临时表(可能称为“缓冲区”)。该表可以很容易地本地化。某些细节可能会有所不同,具体取决于您的培训表的设置方式,但基本上会同时打开前端和后端,导航至后端的表,将培训表复制并粘贴到前端,并确保使用不同的名称和名称。仅复制结构,而不复制数据。

现在有了本地临时表,您应该设置以下内容: 在主窗体的“加载/当前”事件上,有选择地询问是否要保存现有数据,请擦除临时表并仅复制显示的员工从主表中复制所有条目。

Save上,从主培训表中删除所显示员工的所有记录,并从临时表中复制记录。

关闭表单后,擦拭临时表。

或者,如果您的培训表已使用主键正确设置,并且您不想一直删除和重新插入记录,请设置临时表,以使主键不会自动递增。这样一来,您就可以更新记录,而不必删除和重新插入记录,而以手动管理临时表中的主键为代价。

如果您的前端是共享的,而不是每个用户都有自己的副本,则事情变得更加棘手,因此您应该避免这种情况。如果多个用户试图编辑相同的员工培训记录,您仍然会遇到潜在的问题,但是在正常情况下可能不会发生。