Ms access 在函数中使用记录集会导致主子代码中出现错误3420
我有一个函数,每当用户更改记录时,它都会将条目写入表中。但是,在函数运行后,每当我尝试在代码的任何部分引用Ms access 在函数中使用记录集会导致主子代码中出现错误3420,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我有一个函数,每当用户更改记录时,它都会将条目写入表中。但是,在函数运行后,每当我尝试在代码的任何部分引用Me.Recordset对象或方法时,就会出现错误3420“对象无效或不再”。如果重新启动Access,问题将重置,直到该函数再次运行。我能做些什么来防止这种情况发生?代码如下: Function fAddAuditRecord(lngSysID As Long, intChangeType As Byte, Optional strComments As String, Optio
Me.Recordset
对象或方法时,就会出现错误3420“对象无效或不再”
。如果重新启动Access,问题将重置,直到该函数再次运行。我能做些什么来防止这种情况发生?代码如下:
Function fAddAuditRecord(lngSysID As Long, intChangeType As Byte, Optional strComments As String, Optional intAttach As Integer, _
Optional intNewStatus As Integer)
Dim blnInTrans As Boolean
On Error GoTo Err_handle
Select Case intChangeType 'Select comments based on type of change
Case 1
strComments = "Record Added"
Case 2
strComments = "Record Edited" & strComments
Case 3
strComments = "Attachment " & intAttach & " Created"
Case 4
strComments = "Status Changed to " & intNewStatus
End Select
Dim WS As DAO.Workspace, sqlNewStep As String, dbNewStep As DAO.Database, intNewStep As Byte
intNewStep = DCount("[StepNumber]", "tblAuditTrack", "[SystemIDCode] = " & lngSysID) + 1
Set dbNewStep = CurrentDb
Set WS = DBEngine.Workspaces(0)
sqlNewStep = "INSERT INTO tblAuditTrack (SystemIDCode, StepNumber, InputUser, DateCreated, Comments, " _
& "ChangeType) VALUES (" & lngSysID & ", " & intNewStep & ", '" & strUserName & "', Date(), '" _
& strComments & "', " & intChangeType & ");"
WS.BeginTrans
blnInTrans = True
dbNewStep.Execute sqlNewStep
WS.CommitTrans
blnInTrans = False
dbNewStep.Close
WS.Close
如果您在
Me.Recordset
中遇到问题,那么查看其他代码可能会有所帮助。但首先看看这些变化是否改善了情况
WS.CommitTrans
blnInTrans=False
'dbNewStep.Close
“WS.Close
您是否在代码中设置了记录集?因为此代码关闭了数据库和工作区,所以在运行此代码后没有打开的记录集。我在主窗体上使用了Me.Recordcount
和Me.CurrentRecord
来显示“x/y记录”。我还有其他几个地方使用RS.Close
或WS.Close
(在命令按钮后面,其他表单)。在这些潜艇内只做一个Set RS=Nothing
而不做RS.Close
安全吗?还是我要冒记录集冲突的风险?在我仔细查看之后,我在Allen Browne的一篇文章中找到了一个关于关闭工作区(0)
的脚注,谢谢你的帮助