我有一个正在创建临时表(使用SELECT INTO
)来缓存某些计算的函数。根据我发现的信息,我首先检查临时表是否存在,如果是,则删除它,然后生成临时表。
这个过程似乎工作正常,但现在我遇到了一个问题,即检查表并删除它的代码是3211错误 - "数据库引擎无法锁定表。 .."当表已经存在时。
我不确定它是否是我在创建临时表时所做的事情,或者稍后会导致它被锁定而无法删除。临时表用于填充报告。
这是抛出错误的函数:
Sub CacheRewardsReportData(ReviewYearID As Integer)
On Error GoTo Err_Proc
Dim strSQL As String
If TableExists(strTable) Then
DoCmd.DeleteObject acTable, strTable
End If
strSQL = "SELECT * INTO [tblTempRewardsReport] FROM [qryReportRewards_Cache] WHERE [ReviewYearID] = " & ReviewYearID & ";"
CurrentDb.Execute strSQL, dbFailOnError
Err_Exit:
Exit Sub
Err_Proc:
Misc.LogError Err.Number, Err.Description, "CacheRewardsReportData"
Resume Err_Exit
End Sub
非常感谢任何帮助!
答案 0 :(得分:1)
Access不允许我删除表本身,但允许我从表中删除所有行,然后用新数据加载它。
所以我将功能更改为以下内容,从而纠正了问题。
Sub CacheRewardsReportData(ReviewYearID as Integer)
On Error GoTo Err_Proc
Dim strSQL As String
strSQL = "DELETE * FROM tblTempRewardsReport;"
CurrentDb.Execute strSQL, dbFailOnError
strSQL = "INSERT INTO tblTempRewardsReport SELECT * FROM [qryReportRewards_Cache] WHERE [ReviewYearID] = " & ReviewYearID & ";"
CurrentDb.Execute strSQL, dbFailOnError
Err_Exit:
Exit Sub
Err_Proc:
Misc.LogError Err.Number, Err.Description, "CacheRewardsReportData"
Resume Err_Exit
End Sub
再次感谢您的帮助!