我有一个允许用户有效地截断访问表的功能。
这是一个相当基本的功能;它删除所有行,然后通过将 ID 列的数据类型更改为 来重置自动增量索引,然后再更改INT
回AUTOINCREMENT
。
但是,我遇到了一个问题;有时,当用户按下调用该函数的按钮时,我会因错误而停止 -
数据库引擎无法锁定表“Active Directory”,因为它已被其他人或进程使用。
这个错误不是每次都会出现,但是一旦出现,我必须关闭Access才能让它消失。
错误发生在这一行 -
DB.Execute "ALTER TABLE [" & tableName & "] ALTER COLUMN [ID] INT"
有问题的表绝对不能用 Access 打开,甚至在调用此函数之前关闭表也不起作用 -
DoCmd.Close acTable, tableName, acSaveYes
我能做些什么来避免这个错误并让我的代码按我的要求工作吗?
Function Truncate(ByVal tableName As String, Optional ByVal resetIndex As Boolean = True) As Boolean
On Error GoTo checkResult ' Set up error handling
Call Functions.setWarnings(False) ' Disable warnings
Dim DB As DAO.Database
Set DB = CurrentDb ' Set the DB object to use
'**
' Clear the table contents
'*
DB.Execute "DELETE * FROM [" & tableName & "]"
'**
' Change the data type of the ID field to INT
'*
DB.Execute "ALTER TABLE [" & tableName & "] ALTER COLUMN [ID] INT"
'**
' Change the data type of the ID field back to AUTOINCREMENT
DB.Execute "ALTER TABLE [" & tableName & "] ALTER COLUMN [ID] AUTOINCREMENT"
'**
' Check the result of the TRUNCATE operation
'*
checkResult:
Call Functions.setWarnings(True) ' Enable warnings
Truncate = IIf(Err.Number = 0, True, False) ' Set the result
End Function