MS Access错误3211删除临时表时

时间:2016-03-08 16:01:38

标签: ms-access access-vba

我有一个正在创建临时表(使用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

非常感谢任何帮助!

1 个答案:

答案 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

再次感谢您的帮助!