スナップショット
スナップショットは、スナップショットの作成時に存在していたデータの静的ビューを反映するレコード セットです。 スナップショットを開き、すべてのレコードに移動すると、Requery
を呼び出してスナップショットを再構築するまで、そのスナップショットに含まれるレコードのセットとその値は変更されません。
Note
このトピックの内容は、MFC ODBC クラスに該当します。 MFC ODBC クラスの代わりに MFC DAO クラスを使用している場合は、スナップショット型のレコードセットの説明については、「CDaoRecordset::Open」を参照してください。
データベース クラスを使用して、更新可能なスナップショットまたは読み取り専用スナップショットを作成できます。 ダイナセットとは異なり、更新可能なスナップショットには、他のユーザーによって行われたレコード値に対する変更は反映されませんが、プログラムによって行われた更新と削除が反映されます。 スナップショットに追加されたレコードは、Requery
を呼び出すまでスナップショットに表示されません。
ヒント
スナップショットは ODBC 静的カーソルです。 静的カーソルは、そのレコードまでスクロールするまで、実際にはデータ行を取得しません。 すべてのレコードがすぐに取得されるのを確認するには、レコードセットの末尾までスクロールし、表示する最初のレコードまでスクロールします。 ただし、末尾までスクロールすると余分なオーバーヘッドが発生し、パフォーマンスが低下する可能性があります。
スナップショットは、レポートを生成する場合や計算を実行する場合と同様に、操作中にデータを固定する必要がある場合に最も重要です。 それでも、データ ソースはスナップショットから大幅に分岐する可能性があります。そのため、データ ソースを再構築する必要がある場合があります。
スナップショットのサポートは ODBC カーソル ライブラリに基づいており、任意のレベル 1 ドライバーに静的カーソルと位置付けされた更新 (更新性のために必要) を提供します。 このサポートのために、カーソル ライブラリ DLL をメモリに読み込む必要があります。 CDatabase
オブジェクトを構築し、その OpenEx
メンバー関数を呼び出す場合は、dwOptions パラメーターの CDatabase::useCursorLib
オプションを指定する必要があります。 Open
メンバー関数を呼び出した場合、カーソル ライブラリは既定で読み込まれます。 スナップショットの代わりにダイナセットを使用している場合は、カーソル ライブラリを読み込む必要はありません。
スナップショットは、CDatabase
オブジェクトの構築時に ODBC カーソル ライブラリが読み込まれた場合、または使用している ODBC ドライバーが静的カーソルをサポートしている場合にのみ使用できます。
Note
一部の ODBC ドライバーでは、スナップショット (静的カーソル) を更新できない場合があります。 サポートされているカーソルの種類と、サポートされているコンカレンシーの種類については、ドライバーのドキュメントを確認してください。 更新可能なスナップショットを保証するには、CDatabase
オブジェクトの作成時にカーソル ライブラリをメモリに読み込む必要があります。 詳細については、「ODBC: ODBC カーソル ライブラリ」を参照してください。
Note
スナップショットとダイナセットの両方を使用する必要がある場合は、2 つの異なる CDatabase
オブジェクト (2 つの異なる接続) をベースとする必要があります。
スナップショットがすべてのレコードセットと共有するプロパティの詳細については、「レコードセット (ODBC)」を参照してください。 ODBC カーソル ライブラリなど、ODBC とスナップショットの詳細については、「ODBC」を参照してください。