0

ユーザーが 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
4

0 に答える 0