FS社のAccessアプリケーションを自宅で動かしていた時、
- 多数のトランザクション処理中にエラー メッセージ "ファイルの共有ロック数が制限を超えています" が表示される
- レジストリーの MaxLocksPerFile を見たら 9500 になっていた。
- ファイルの共有ロック数が制限を超えています エラー
- 『よく、何万件もあるレコードを持つテーブルを一つのクエリで更新しようとしたり、リンクしたエクセルシート(行にして何万もあるようなもの)をアクセスで処理しようとすると、共有ロック数超過のエラーが出ます。
ただ、よく勘違いされるのは、「エラー=悪いことであり、エラーを直せば、必ず動く」というように考えている人が多いということです。よく出るエラーは「文法エラー」や「処理エラー」ですが、これはプログラム内での作成者の記述や設定がおかしい場合が多く、それを直すことで正常に動作するようになります。』と厳しい指摘があった。
- 『よく、何万件もあるレコードを持つテーブルを一つのクエリで更新しようとしたり、リンクしたエクセルシート(行にして何万もあるようなもの)をアクセスで処理しようとすると、共有ロック数超過のエラーが出ます。
- [Access] ファイルの共有ロック数の制限を越えています。
- j繰り返しを9500(行数のことではなくメモリ量)を越えないところで分割実行する。kdo〜loop内に、begintran〜commitranをいれる(トランザクションを管理するため、do〜loopの外にいれて、このえらーが起きるのはよくあること。1件1件commitをきちんといれると、なぜか上手くいく。どこまで処理できるはわからないけど。)
自分のブログ もヒットした。「月次処理」(生産が終わったファイルを累積に移す処理)を行なっていれば、この問題は出ないと思うのだが...