Posted by lawrhino - 2007.06.09,Sat
VBAから数万件のレコードがあるテーブルに
1件ずつアクセスして順番に更新処理をしていると
9500件あたりで
「ファイルの共有ロック数が上限を超えています」
というエラーが出る。
回避方法を調べてみると
MicroSoftのページに
レジストリのMaxLocksPerFileの値を
大きくしてやることで対応可能とあった。
レジストリいじれって・・・
環境移動もできないし、レコード件数決めうちかよ。
というわけで却下。
しかたなく分割処理を行う事にした。
5000件毎にコネクション閉じて、開きなおして
データ加工して更新して・・・
以下繰り返す。
制御用のクラスを作って、内部に総件数と
現在のカウンタを持たせる。
呼び出し側では1件読む毎にカウンタを進めながら、
処理対象レコードかどうかの判定を制御クラスに任せて、
処理対象なら処理を行う。
こんなときクロージャが使えたら
もっとスッキリとしたコードが書けるのにな。
もっとスマートな方法はないもんだろうか。
1件ずつアクセスして順番に更新処理をしていると
9500件あたりで
「ファイルの共有ロック数が上限を超えています」
というエラーが出る。
回避方法を調べてみると
MicroSoftのページに
レジストリのMaxLocksPerFileの値を
大きくしてやることで対応可能とあった。
レジストリいじれって・・・
環境移動もできないし、レコード件数決めうちかよ。
というわけで却下。
しかたなく分割処理を行う事にした。
5000件毎にコネクション閉じて、開きなおして
データ加工して更新して・・・
以下繰り返す。
制御用のクラスを作って、内部に総件数と
現在のカウンタを持たせる。
呼び出し側では1件読む毎にカウンタを進めながら、
処理対象レコードかどうかの判定を制御クラスに任せて、
処理対象なら処理を行う。
こんなときクロージャが使えたら
もっとスッキリとしたコードが書けるのにな。
もっとスマートな方法はないもんだろうか。
PR
Comments
Post a Comment
カレンダー
プロフィール
HN:
lawrhino
性別:
非公開
最新記事
忍者アド
最新TB
アクセス解析
Template by mavericyard*
Powered by "Samurai Factory"
Powered by "Samurai Factory"