Access短的保存数据的VBA代码及与标准保存代码的区别

2022-04-06 00:00:00 代码 记录 属性 更改 保存

一、在Access中,我们通知会使用这句代码保存记录:

DoCmd.RunCommand acCmdSaveRecord

来保存当前窗体(绑定数据表)的当前记录,这个代码是很效的。SaveRecord操作相当于使用操作栏中的Save按钮来保存当前记录。

二、更短的保存记录的VBA代码

那还有一种更巧妙的保存当前记录的代码,可能很多人并不知道。那就是设置 Me.Dirty属性

您可以使用Dirty属性来确定当前记录自上次保存后是否已被修改。读/写布尔值

所以你可以使用 Me.Dirty =False 这句更短的代码 来快速保存当前窗体记录

如果你再改进一下:

If Me.Dirty Then

Me.Dirty = False

End If

1) 如果您使用 DoCmd.RunCommand acCmdSaveRecord 它总是会尝试保存(不管数据是否有改变过)
2) 如果您使用 If Me.Dirty Then Me.Dirty = False 那么它只会在有数据有修改需要保存时才会去尝试保存。这个更好

三、再改进的代码

当然你希望你保存你需要保存的内容后,还希望再继续触发 BeforeUpdate AfterUpdate事件,可以这样再改进一下

Me.Dirty = False

Me.Dirty = True

当然,反过来也是另一种用法
Me.Dirty = True
Me.Dirty = False

四、其它更多的用法

例如,您可能想询问用户是否打算对记录进行更改,如果不是,则允许用户移动到下一条记录而不保存更改。

保存记录时,Microsoft Access 将Dirty属性设置为False。当用户对记录进行更改时,该属性设置为True

以下示例在数据更改时启用btnUndo按钮。UndoEdits ( )子例程从文本框控件的AfterUpdate事件中调用。选择启用的btnUndo按钮可使用OldValue属性恢复控件的原始值。

Sub UndoEdits() 
 If Me.Dirty Then 
 Me!btnUndo.Enabled = True ' Enable button. 
 Else 
 Me!btnUndo.Enabled = False ' Disable button. 
 End If 
End Sub 
 
Sub btnUndo_Click() 
 Dim ctlC As Control 
 ' For each control. 
 For Each ctlC in Me.Controls 
 If ctlC.ControlType = acTextBox Then 
 ' Restore Old Value. 
 ctlC.Value = ctlC.OldValue 
 End If 
 Next ctlC 
End Sub

相关文章