会社員プログラマー「Kaia May」のコードの備忘録サイトです〜!

Access VBAで「ファイルの共有ロック数が制限を超えています(Error 3052)レジストリエントリMaxLockPerFileの値を増やして下さい。」のエラーが出た時

  • 2022年8月10日
  • 2022年8月10日
  • Access VBA
  • 1749View

テーブルへの書き込み処理中でトランザクションカウンターが規定値の9500を超えた場合に出るエラーみたいです。

ロックしているレコードが多すぎるのが原因なので、書き込み処理を済ませてしまえば良いとのこと。

「Do Until ~  Loop」の途中で書き込み処理を一旦完了させることでエラーを回避できました。

以下はDAOでの記述です。

 

まず、処理件数を格納するcnt変数を定義

 

Dim cnt as long

 

「Do Until ~ Loop」処理の前で、

 

cnt = 0
DBEngine.BeginTrans

 

を書いておき、

「Do Until ~ Loop」処理の.MoveNextの次に、

'トランザクションコミット処理
cnt = cnt + 1
If cnt = 5000 Then
DBEngine.CommitTrans
DBEngine.BeginTrans
cnt = 0
End If

 

をいれてトランザクション処理が5000に達するごとにコミット(書き込み処理を完了)させる。

最後にレコードセットを.Closeする前に、

 

DBEngine.CommitTrans

 

を書いて完了。

 

 

 

>bokucode

bokucode

遅ればせながらプログラミングを始めた静岡在住の30代の会社員プログラマー「Kaia May」です!
いろんな言語のコードに挑戦していきたいと思っていて、その中でメモしておきたいコードや今後も使えるコードやその説明などを記録していきます。
他にも参考になったおすすめサイトや書籍なども紹介していきます。

CTR IMG