ACCESSでADOのレコードセットを使いたいけど、引数って何を設定すればいいの?という方に参考にしていただければと思います。
「CursorType」の種類
CursorTypeには以下の種類があります。
これにより、Recordsetのデータのスクロール方法や変更の反映方法などが決まります
定数名 | 値 | 説明 |
---|---|---|
adOpenForwardOnly | 0 | 前方スクロール専用のカーソル。最も高速でリソースをあまり消費しない。読み取り専用。 |
adOpenKeyset | 1 | 他ユーザーの更新・削除が反映される。新規追加は見えない。ランダムアクセス可能。 |
adOpenDynamic | 2 | 他ユーザーの更新、追加、削除などがリアルタイムで反映される。 |
adOpenStatic | 3 | 静的なスナップショット。他ユーザーの変更は一切反映されない。データの操作はできる。 |
どのサイトもこの説明ばかりでいまいちピント来ないので、少しでもわかりやすくしてみました。
定数名 | 要約 |
---|---|
adOpenForwardOnly | 読み取り専用で高速処理したい! |
adOpenKeyset | 他の人が更新した情報をある程度反映したいが、新規追加は無視してOK! |
adOpenDynamic | 他の人の更新情報を反映し、完全に動的なデータを扱いたい!(頻繁な変更に対応したい) |
adOpenStatic | 他の人の影響を受けずに処理したい!(固定のデータスナップショット) |
少しわかりやすくなりましたか?
「LockType」の種類
LockTypeには以下の種類があります。
これにより、データの同時編集の可否や、変更の反映方法を制御できます。特にマルチユーザー環境では、ロックの種類によってパフォーマンスや整合性に影響が出るため、非常に重要な設定です。
定数名 | 値 | 概要 | 特徴 |
---|---|---|---|
adLockReadOnly | 1 | 読み取り専用ロック | データの更新不可。最も高速・安全。 |
adLockPessimistic | 2 | 悲観的ロック | レコード取得時に即ロック。他ユーザーは更新できなくなる。競合回避に最適。 |
adLockOptimistic | 3 | 楽観的ロック | 更新時にロック。編集中はロックされないが、保存時に衝突の可能性あり。 |
adLockBatchOptimistic | 4 | バッチ更新ロック | 複数レコードを一括更新。クライアント側で編集して、あとで一括更新。 |
まぁまぁわかりやすいですが、メリットデメリットも考えてみましょう。
定数名 | 用途 | 利点 | 欠点 |
---|---|---|---|
adLockReadOnly | レポート表示や参照だけの場合に最適 | 高速・安全・リソース消費が少ない | |
adLockPessimistic | 他のユーザーの同時編集が絶対に許されないデータ | データ整合性が高い | パフォーマンス低下やロック競合の可能性あり |
adLockOptimistic | ユーザーが編集してから「保存」するまでの間、他のユーザーとバッティングしてもよいようなケース | 高速で競合が少なければ効果的 | 同時編集で保存時に失敗する可能性がある |
adLockBatchOptimistic | データを一括で編集し、あとでまとめて保存するケース | ネットワーク通信量の削減、まとめてトランザクション処理が可能 | クライアントカーソルを使う必要がある |
これである程度、使い方が見えてきましたね。
まとめ
「CursorType」と「LockType」の組み合わせは様々ですが、小規模のシステムを作成する場合は以下の組み合わせが多くなりそうですね。
・データの表示のみしたい場合 … adOpenForwardOnly + adLockReadOnly
・データを読込、追加・編集したい場合 … adOpenKeyset + adLockOptimistic
システムの運用環境などによっては、それぞれの設定が非常に重要となってきますので、運用を想定した上で開発を進めていくのがよいですね。