【ACCESS】ADOレコードセット 「CursorType」と「LockType」は結局どれを選べばいいの?

ACCESS

ACCESSでADOのレコードセットを使いたいけど、引数って何を設定すればいいの?という方に参考にしていただければと思います。

「CursorType」の種類

CursorTypeには以下の種類があります。

これにより、Recordsetのデータのスクロール方法や変更の反映方法などが決まります

定数名説明
adOpenForwardOnly0前方スクロール専用のカーソル。最も高速でリソースをあまり消費しない。読み取り専用。
adOpenKeyset1他ユーザーの更新・削除が反映される。新規追加は見えない。ランダムアクセス可能。
adOpenDynamic2他ユーザーの更新、追加、削除などがリアルタイムで反映される。
adOpenStatic3静的なスナップショット。他ユーザーの変更は一切反映されない。データの操作はできる。

どのサイトもこの説明ばかりでいまいちピント来ないので、少しでもわかりやすくしてみました。

定数名要約
adOpenForwardOnly読み取り専用で高速処理したい!
adOpenKeyset他の人が更新した情報をある程度反映したいが、新規追加は無視してOK!
adOpenDynamic他の人の更新情報を反映し、完全に動的なデータを扱いたい!(頻繁な変更に対応したい)
adOpenStatic他の人の影響を受けずに処理したい!(固定のデータスナップショット)

少しわかりやすくなりましたか?

「LockType」の種類

LockTypeには以下の種類があります。

これにより、データの同時編集の可否や、変更の反映方法を制御できます。特にマルチユーザー環境では、ロックの種類によってパフォーマンスや整合性に影響が出るため、非常に重要な設定です。

定数名概要特徴
adLockReadOnly1読み取り専用ロックデータの更新不可。最も高速・安全。
adLockPessimistic2悲観的ロックレコード取得時に即ロック。他ユーザーは更新できなくなる。競合回避に最適。
adLockOptimistic3楽観的ロック更新時にロック。編集中はロックされないが、保存時に衝突の可能性あり。
adLockBatchOptimistic4バッチ更新ロック複数レコードを一括更新。クライアント側で編集して、あとで一括更新。

まぁまぁわかりやすいですが、メリットデメリットも考えてみましょう。

定数名用途利点欠点
adLockReadOnlyレポート表示や参照だけの場合に最適高速・安全・リソース消費が少ない
adLockPessimistic他のユーザーの同時編集が絶対に許されないデータデータ整合性が高いパフォーマンス低下やロック競合の可能性あり
adLockOptimisticユーザーが編集してから「保存」するまでの間、他のユーザーとバッティングしてもよいようなケース高速で競合が少なければ効果的同時編集で保存時に失敗する可能性がある
adLockBatchOptimisticデータを一括で編集し、あとでまとめて保存するケースネットワーク通信量の削減、まとめてトランザクション処理が可能クライアントカーソルを使う必要がある

これである程度、使い方が見えてきましたね。

まとめ

「CursorType」と「LockType」の組み合わせは様々ですが、小規模のシステムを作成する場合は以下の組み合わせが多くなりそうですね。

・データの表示のみしたい場合     … adOpenForwardOnly + adLockReadOnly

・データを読込、追加・編集したい場合 … adOpenKeyset + adLockOptimistic

システムの運用環境などによっては、それぞれの設定が非常に重要となってきますので、運用を想定した上で開発を進めていくのがよいですね。

タイトルとURLをコピーしました