Access 2007 表单错误:您尝试提交或回滚事务

Posted

技术标签:

【中文标题】Access 2007 表单错误:您尝试提交或回滚事务【英文标题】:Access 2007 Form Error: You tried to commit or Rollback a Transaction 【发布时间】:2018-02-27 14:11:34 【问题描述】:

我有一个非常令人沮丧的问题,我在任何地方都找不到解决方法或解决方案。不幸的是,它很难描述(为篇幅道歉),但这里是:

我有一个显示银行账户交易的连续表单(我们称之为“视图”表单)。这是一个相当简单的表单,只显示单个绑定表中的行。可以通过 dbl 删除事务。单击记录选择器。确认后,从表中删除记录,然后重新计算流动余额。它做了一些诡计多端的操作来尽可能地保持重新计算的效率,并且在 99% 的时间里它都能正常工作。可以通过从表单标题上的“添加”按钮调用的单独模式表单来添加新记录。保存记录后关闭“添加”表单。添加记录后,将重新查询视图表单并重新计算运行余额。这也很好用。

现在解决问题。

如果我添加一条记录,无论它出现在视图表单中的哪个位置(键入日期)并立即删除它,我都会收到如下表单错误(不是正常的可捕获运行时错误):

“您尝试提交或回滚事务而不首先开始事务。”

碰巧,我确实在余额重新计算例程中使用了一个事务(在所有其他情况下都可以正常工作):

            strSQL = "Select * from ACTransaction where ACT_BankAccountID = " & Me.ComboBankAccount & " order by ACT_TaxDate, ACT_ID;"
        Set rsTrans = CurrentDb.OpenRecordset(strSQL)
        wFindString = "ACT_TaxDate >= " & wUSFormatDate

        rsTrans.FindFirst wFindString
        wStartRecPosition = rsTrans.AbsolutePosition
        If wStartRecPosition > 0 Then
            rsTrans.MovePrevious
            wrunningbalance = rsTrans("ACT_TxtBalance")
        Else
            wrunningbalance = Me.TxtOpenBal
        End If
        If wStartRecPosition > 0 Then
            rsTrans.MoveNext
        End If

        On Error GoTo 0
        On Error GoTo DoRollback

        DBEngine(0).BeginTrans

        If Not (rsTrans.EOF And rsTrans.BOF) Then
            Do Until rsTrans.EOF = True

                wTrans = rsTrans("ACT_ID")

                wTxValue = rsTrans("ACT_ValTTC") * rsTrans("ACT_TxtTC_Sign")
                wrunningbalance = wrunningbalance + wTxValue

                rsTrans.Edit
                    rsTrans("ACT_TxtBalance") = wrunningbalance
                rsTrans.Update

            rsTrans.MoveNext
            Loop
        End If

        DBEngine(0).CommitTrans

        rsTrans.Close
        Set rsTrans = Nothing

现在,我的错误处理/回滚等问题似乎很明显,但没有触发错误。如果我完全删除事务处理,它仍然会失败并出现同样的错误。

我已经在我的代码中添加了调试以跟踪事件的进程,并且在到达余额重新计算代码之前就显示了错误消息。触发的最后一个事件是 before_DelConfirm(我有一个“DoCmd.SetWarnings False”)事件。出现上述错误后,它告诉我:

“您所做的更改无法保存” "保存操作可能由于其他用户临时锁定记录而失败"

如果我通过错误消息“Esc”,则处理继续进行到 after_delConfirm(我有一个“DoCmd.SetWarnings True”),然后进入余额重新计算过程,因此它可以正常工作。

鉴于除了错误之外它工作正常(尽管显然有问题)我什至尝试过:

Response = acDataErrContinue

进入我还调试了“DataErr”值的 Form_Error 事件:它在 3034 和 2111 之间无休止地交替。

这一定与记录缓冲和/或事务有关(我之前没有使用过访问事务),就好像我关闭视图表单并重新打开它然后我可以删除有问题的“新”事务而没有任何问题。我尝试在模式“添加”表单关闭后以及在 Form_Delete 中粘贴 doEvents,但这没有区别。

非常感谢各位聪明人提供的任何帮助;我完全糊涂了。

编辑:我尝试在 Commit 上添加“dbForceOSFlush”,但没有任何区别。

【问题讨论】:

【参考方案1】:

在浏览添加和视图表单中的每一行代码时发现它。正如预期的那样,这与余额重新计算例程中的交易无关。

在“视图”表单中,我有一个路由,通过一个简单的记录集书签操作将当前行位置移动到最后几行。当然,每当我编写“set rs = currentdb.openrecordset(..)”代码时,我都会立即编写“rs.close”和“set rs = nothing”代码。在这种情况下,无论出于何种原因,我都没有这样做,所以有一个杂散的物体漂浮在令人困惑的东西周围。添加这两行代码就可以了。

感谢所有花时间为我研究这个问题的人。令人惊讶的是,经常沉睡在一个问题上以及一点最后的坚持会导致解决方案。

【讨论】:

以上是关于Access 2007 表单错误:您尝试提交或回滚事务的主要内容,如果未能解决你的问题,请参考以下文章

Access 2007 中未找到模块错误

oracle 提交事务后为啥不能撤销或回滚,不是有撤销段吗

RocketMQ源码分析之RocketMQ事务消息实现原下篇(事务提交或回滚)

Access 2007:意外错误 (40230)

切分大任务成多个子任务(事务),汇总后统一提交或回滚

mysql事务未commit