ユーザーが Access テーブルを効果的に TRUNCATE できる機能があります。
これはかなり基本的な機能です。すべての行を削除し、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