大家好,谢谢您的支持!
对于我当前正在设计的一个小型数据库项目,我典型地设置了一张供员工使用的表,以及一个用于容纳这些人所接受的培训的一对多表。
为了进行编辑,我已经建立了一个带有员工数据的父窗体,并在一个连续的子窗体中(链接到父窗体),该子窗体显示了相应的培训。
现在我想拥有一个保存过程,该过程仅在按下父表单上的按钮时发生。对于可管理的“父级”数据。但是我也想在此过程中包含子表单(关系)数据。
这可能吗?
我正在尝试通过VBA手动设置记录集来填充子表单,基本上使用内存作为缓冲区,但是由于它们始终保持与底层表的链接,因此只要更改了字段,数据就会立即保存。
然后,一旦用户“保存”,我试图将数据缓冲在一个单独的表中,并在原始源上转发。但是,我的数据库分为前端文件和远程后端文件,我不知道如何在本地而不是在BE上设置缓冲区(我认为这要慢得多)。
那么有人对如何做到这一点或对以前的尝试有所改进有想法吗?
答案 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)
绑定表格通常会立即保存更改。如果您想防止立即更改,可以:
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
上,从主培训表中删除所显示员工的所有记录,并从临时表中复制记录。
关闭表单后,擦拭临时表。
或者,如果您的培训表已使用主键正确设置,并且您不想一直删除和重新插入记录,请设置临时表,以使主键不会自动递增。这样一来,您就可以更新记录,而不必删除和重新插入记录,而以手动管理临时表中的主键为代价。
如果您的前端是共享的,而不是每个用户都有自己的副本,则事情变得更加棘手,因此您应该避免这种情况。如果多个用户试图编辑相同的员工培训记录,您仍然会遇到潜在的问题,但是在正常情况下可能不会发生。