OpenRecordsetメソッドについて

解決


アジャジャ  2003-10-31 01:51:29  No: 109605

OpenRecordsetメソッドの第二引数にタイプを指定すると思うのですが、dbOpenDynasetとdbOpenSnapshotの違いがよくわかりません。
いろいろ調べたのですがよく理解できません。

どの局面でどのタイプを指定したらよいか分かりません。
この局面ではdbOpenSnapshotを絶対に使ってはだめという切り分けはあるのでしょうか?

どなたか詳しい人がいましたら、ご教授願います。

開発環境:VB5、DAO350


魔界の仮面弁士  2003-10-31 04:56:34  No: 109606

> 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への再問合せが多く発生します。


アジャジャ  2003-10-31 22:09:25  No: 109607

おりがとうございました。

以後の開発に役立てます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加