OpenRecordsetメソッドの第二引数にタイプを指定すると思うのですが、dbOpenDynasetとdbOpenSnapshotの違いがよくわかりません。
いろいろ調べたのですがよく理解できません。
どの局面でどのタイプを指定したらよいか分かりません。
この局面ではdbOpenSnapshotを絶対に使ってはだめという切り分けはあるのでしょうか?
どなたか詳しい人がいましたら、ご教授願います。
開発環境:VB5、DAO350
> dbOpenDynasetとdbOpenSnapshotの違いがよくわかりません。
他のRecordsetの違いに付いても、あわせて記載しておきます。(私自身への備忘録もかねて…)
≪dbOpenDynaset:ダイナセットタイプ≫
1つ以上のテーブルに対するレコードへの参照を保持します。キーセットカーソルと呼ばれる事もあります。
最初にブックマーク情報のみが取得され、編集や表示が必要になった時点で、レコード全体が取得されます。
<利点>
・ローカルテーブルとリンクテーブルをJOINするなどの「異種結合」が可能です。
・リモートデータに対して、更新可能なデータを取得したい場合などに適したタイプです。
<欠点>
・柔軟性が高いタイプですが、反面、クエリの実行とデータ操作に要する時間も長くなります。
≪dbOpenSnapshot:スナップショットタイプ≫
1つ以上のテーブルに対する、作成時点のデータのコピーを保持します。
静的カーソルと呼ばれる事もあります。
<利点>
・最初に全レコードのコピーを取得するため、レコード移動時のオーバーヘッドが軽減されます。
・レコード移動時のデータの再取得が不要なため、ODBCの場合、クエリを実行してデータを返すまでの時間が短縮されます。
<欠点>
・結果セット内に多数のレコードが格納される場合には、処理性能が低下します。
・Jetワークスペース内では更新できません。ODBCDirectの場合は、ODBCドライバによって更新できるものとできない物があります。
≪dbOpenTable:テーブルタイプ≫
単一のテーブルへの参照を示します。現レコードのデータのみを保持します。
<利点>
・インデックスが使用可能であり、検索時には、Findより高速なSeekメソッドを使うことができます。
・取得後に、Sortプロパティを使って並び替えを行う事ができます。
・ローカルテーブルに対する編集(AddNewなど)を行う場合には、このタイプが最速です。
<欠点>
・Jetワークスペース専用です。ODBCDirectでは使用できません。
・JOIN操作されたSELECTクエリやユニオンクエリに対しては使用できません。
≪dbOpenForwardOnly:前方スクロールタイプ≫
現レコードのデータのみを保持します。前方方向への移動(MoveNext/MoveLast)のみが可能です。
<利点>
・データをEOFまで単純にMoveNextして表示させるような場面で、最大のパフォーマンスを発揮します。
<欠点>
・更新できません。
≪dbOpenDynamic:動的タイプ≫
1つ以上のテーブルに対するレコードへの参照を保持します。ダイナセットタイプとほぼ同様です。
(ODBCドライバによっては、動的カーソルがサポートされていない事があります)
<利点>
・レコードの削除や追加などの変更が、基テーブルに即座に反映されます。
・基になっているテーブルを他のユーザが修正するたびに動的に更新できます。
<欠点>
・ODBCDirect専用です。Jetワークスペースでは利用できません。
・変更をすぐに反映させるため、(内部的な)DBへの再問合せが多く発生します。
おりがとうございました。
以後の開発に役立てます。
ツイート | ![]() |