【问题标题】:vba functions malfunction after repetitive calling重复调用后vba函数出现故障
【发布时间】:2014-08-28 12:02:25
【问题描述】:

我有一个数据库,其中数据经过多个步骤,用户可以报告和“解决”数据库中的这些错误。

一旦在我的tbl_errors 中添加错误,他们就会继续解决它。一旦他们解决了错误 irl,也将“解决”数据库中的错误,以跟踪时间等。

这一切都像一个魅力,在添加错误时我从未遇到任何问题。乍一看,“解决”问题也完美无缺。然而问题是,一旦我开始连续“解决”很多错误,我的代码就会突然停止工作。

它不会冻结或返回任何错误,当我使用断点和 f8 单步执行代码时,所有变量似乎也是正确的。一切都照常进行,只是它不再做任何事情。这仅适用于该特定错误。当我添加新错误并尝试“解决”它们时。它像往常一样工作。

重要提示:

  • 仅当我开始快速单击求解按钮时才会发生这种情况,从而真正快速地调用函数。

  • 仅针对特定错误冻结。 (可以是多个)所有其他错误都可以正常解决,说明代码还在运行。

  • 我已经单步执行了整个代码,同时检查了所有的键和变量,并且每个变量都是正确的。

  • 即使我的代码通过了记录集,它也没有更新任何东西?

下面是我的关系屏幕的一部分,以便更好地理解表结构以及代码的特定部分。

在 OnClick 事件中调用代码:

Private Sub solve_Click()
    SolveError getorderid(gvStepDelivery), get_errorID(gvCategory, get_stepsID(gvStepNr))
    Me.qry_errors_subform.Requery
    Me.Refresh
End Sub

自写函数SolveError:

Public Function SolveError(Current_order_ID As Long, Category_ID As Long)
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("tbl_errors", dbOpenDynaset)
With rs
    .FindFirst "[Error_ID] = " & DLookup("Error_ID", "tbl_errors", "[Current_orders_ID] = " & Current_order_ID & " AND [Category_ID] = " & Category_ID)
    .Edit
        ![Solved_By] = get_user
        ![Solved_Date] = Date
        ![Solved_Time] = Time
    .update
End With
rs.Close
Set rs = Nothing
End Function

还涉及其他代码部分(请参阅 SolveError 的参数),但我认为它们不会添加一些有用的信息,因为它们只是返回正确的值。 (他们是正确的!)

【问题讨论】:

    标签: sql vba ms-access ms-access-2007


    【解决方案1】:

    好的,看来我已经找到答案了。因为我可能在前一个完全完成之前调用了一个新的迭代,所以它只是停止了工作。最后添加DoEvents 函数我的SolveErrors 函数解决了它。我还没有再次遇到这个问题。

    Public Function SolveError(Current_order_ID As Long, Category_ID As Long)
    Dim rs As Recordset
    Set rs = CurrentDb.OpenRecordset("tbl_errors", dbOpenDynaset)
    With rs
        .FindFirst "[Error_ID] = " & DLookup("Error_ID", "tbl_errors", "[Current_orders_ID] = " & Current_order_ID & " AND [Category_ID] = " & Category_ID)
        .Edit
            ![Solved_By] = get_user
            ![Solved_Date] = Date
            ![Solved_Time] = Time
        .update
    End With
    rs.Close
    Set rs = Nothing
        DoEvents   'This one did the trick!!
    End Function
    

    有关 DoEvents 方法的信息可以在这里找到:http://msdn.microsoft.com/en-us/library/system.windows.forms.application.doevents(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

    这里:http://office.microsoft.com/en-001/access-help/doevents-function-HA001228827.aspx

    【讨论】:

      猜你喜欢
      • 2013-04-15
      • 1970-01-01
      • 2022-01-17
      • 2019-04-10
      • 2018-11-12
      • 2015-05-24
      • 2010-10-23
      • 2010-12-06
      • 1970-01-01
      相关资源
      最近更新 更多