MS Access VBA - 将表单记录从编辑模式中取出以允许记录集操作

时间:2018-05-25 00:14:33

标签: vba ms-access

我正在编辑表单上的记录。然后,我想对表单底层的整个记录​​集执行记录集操作。记录集操作然后运行错误“错误 - 无法更新;当前由此计算机上的另一个会话锁定”...显然是因为正在编辑记录。

无论这是否是好的做法,我如何使用vba让应用程序取消,忽略或完成表单编辑操作,以便记录集操作可以继续......或者它是不可能的,因为GUI无法从VBA中“释放”(类似于编辑Excel单元格时)?

2 个答案:

答案 0 :(得分:2)

这种情况经常发生。简单的诀窍是确保当前的表格记录不是“肮脏的”#34;或者没有等待更新。

因此你可以去:

if me.dirty = True then me.Dirty = False

' now call your update routines etc.

因为那些其他例程可能会更新您正在查看的屏幕/记录,所以您可以执行me.Refresh以确保显示任何更改。

以上将强制记录写入。事实上,如果我是一个表格,并且计划说要在下一个"步骤"中启动一些弹出表格或表格。对于用户来说,我也倾向于强制写出当前的表格 - 它不仅更安全,而且避免了常见的"这条记录被其他用户改变了#34;。在大多数情况下,其他用户实际上就是您的代码。

所以只需用上面一行代码保存记录 - 这通常可以消除这个问题。请记住,您可以设置一个表单来锁定整个表格中的数据"表单属性表的选项卡,但这不太可能是您的问题。

答案 1 :(得分:0)

表格是数据绑定的吗?听起来不像。

Me!SomeField = ...
DoCmd.RunCommand acCmdSaveRecord

如果您的表单具有绑定到“ SomeField”的控件,则该表单将自动更新。

1)使用SQL代码更新记录。例如,您具有应该在表单数据集中更新的记录ID,因此您可以编写以下内容:

Call CurrentDB.Execute( _
"UPDATE SomeTable SET SomeField = SomeValue WHERE SomeTableID = " & Me!SomeTableID, dbSeeChanges)

2)您可以查看Bookmark属性-Recordset和Form都具有此属性,它描述了记录位置。因此,您可以编写这样的内容(不是最好的示例,但可以帮助您获得想法):

Dim Rs as Recordset
Set Rs = Me.RecordsetClone 'make a reference copy of the form recordset
Rs.Bookmark = Me.Bookmark 'locate this recordset to the form current record