我正在编辑表单上的记录。然后,我想对表单底层的整个记录集执行记录集操作。记录集操作然后运行错误“错误 - 无法更新;当前由此计算机上的另一个会话锁定”...显然是因为正在编辑记录。
无论这是否是好的做法,我如何使用vba让应用程序取消,忽略或完成表单编辑操作,以便记录集操作可以继续......或者它是不可能的,因为GUI无法从VBA中“释放”(类似于编辑Excel单元格时)?
答案 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