[Access] ファイルの共有ロック数の制限を越えています。
accessでレコードセットのupdateを一期に大量におこなっていると、「ファイルの共有ロック数の制限を越えています。」のメッセージが。
例)これを2万行分くりかえす
set rst=new adodb.recordeset
with rst
.source="select * from talbe1"
.connection=・・・・・
・・・・・・
.open
Do until .eof
!fielda=!fieldb+3
.update
.move nxt
loop
「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4.0」のMaxLocksPerFileを既定値の9500からおおおきするらしい。*9500は行数のことではない。めもり量。
他の方法
1)繰り返しを9500(行数ではあい)を越えないところで分割実行する。
2)do〜loop内に、begintran〜commitranをいれる
(トランザクションを管理するため、do〜loopの外にいれて、このえらーが起きるのはよくあること。
1件1件commitをきちんといれると、なぜか上手くいく。どこまで処理できるはわからないけど。)
例)これを2万行分くりかえす
set rst=new adodb.recordesetwith rst
.source="select * from talbe1"
.connection=・・・・・
・・・・・・
.open
Do until .eof
!fielda=!fieldb+3
.update
.move nxt
loop
多分これのこと
多数のトランザクション処理中にエラー メッセージ "ファイルの共有ロック数が制限を超えています" が表示される
「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4.0」のMaxLocksPerFileを既定値の9500からおおおきするらしい。*9500は行数のことではない。めもり量。
他の方法
1)繰り返しを9500(行数ではあい)を越えないところで分割実行する。
2)do〜loop内に、begintran〜commitranをいれる
(トランザクションを管理するため、do〜loopの外にいれて、このえらーが起きるのはよくあること。
1件1件commitをきちんといれると、なぜか上手くいく。どこまで処理できるはわからないけど。)
トラックバック(0)
このブログ記事を参照しているブログ一覧: [Access] ファイルの共有ロック数の制限を越えています。
このブログ記事に対するトラックバックURL: http://www.re-labo.com/mt/mt-tb.cgi/86
コメントする