我有一个数据库,数据通过多个步骤,用户可以在数据库中报告和“解决”这些错误。
在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的参数),但我认为它们不会添加一些有用的信息,因为它们只是返回正确的值。 (他们是对的!!)
答案 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