【问题标题】:MS Access VBA - take form record out of edit mode to allow recordset operationsMS Access VBA - 使表单记录脱离编辑模式以允许记录集操作
【发布时间】:2018-05-25 00:14:33
【问题描述】:

我正在编辑表单上的记录。然后我想对表单下的整个记录​​集进行记录集操作。记录集操作然后遇到错误“错误 - 无法更新;当前被这台机器上的另一个会话锁定”...显然是因为正在编辑记录。

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

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    这可能经常发生。简单的技巧是确保当前表单记录不“脏”或不等待更新。

    这样你就可以走了:

    if me.dirty = True then me.Dirty = False
    
    ' now call your update routines etc.
    

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

    以上将强制记录写入。事实上,如果我在一个表单中,并计划说为用户启动一些弹出表单,或者在下一个“步骤”中启动一个表单,我也倾向于强制写出当前表单 - 它不仅更安全,而且避免常见的“此记录已被另一个用户更改”。在大多数情况下,其他用户实际上就是您的代码。

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

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-28
        • 2016-09-04
        • 1970-01-01
        • 2011-01-06
        • 1970-01-01
        • 2015-03-09
        相关资源
        最近更新 更多