重复呼叫后,vba功能失灵

时间:2014-08-28 12:02:26

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

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

tbl_errors中添加错误后,他们会继续解决问题。一旦他们解决了错误irl,就可以“解决”数据库中的错误,以便跟踪时间等。

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

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

重要说明:

  • 当我开始快速点击我的求解按钮时,就会发生这种情况,从而在彼此之后快速调用这些功能。

  • 它只会冻结特定错误。 (可以是多个)所有其他错误可以照常解决,表明代码仍在运行。

  • 我已完成整个代码,同时检查所有键和变量,每个变量都是正确的。

  • 即使我的代码通过记录集,它也不会更新任何内容?

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

enter image description here

调用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的参数),但我认为它们不会添加一些有用的信息,因为它们只是返回正确的值。 (他们是对的!!)

1 个答案:

答案 0 :(得分:0)

好吧,好像我已经找到了答案。由于我可能在前一个完成之前调用了一个新的迭代,它只是停止工作。最后在我的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