レコードセット: ブックマークと絶対位置 (ODBC)
このトピックの内容は、MFC ODBC クラスに該当します。
レコードセット内を移動していると、しばしば特定のレコードに戻る必要が生じます。 特定のレコードに戻るには、レコードのブックマークと絶対位置という 2 つの手段があります。
このトピックでは、次の内容について説明します。
ブックマークの使い方
絶対位置を使って現在のレコードを設定する方法
MFC ODBC のブックマーク
ブックマークは、レコードを一意に識別します。 レコードセット内を移動する場合、レコードセットからレコードが削除されることがあるため、必ずしもレコードの絶対位置に頼ることはできません。 レコードの位置を確実に決定できるようにするには、ブックマークを使用します。 CRecordset クラスには、以下のようなメンバー関数が用意されています。
現在のレコードのブックマークを取得し、それを変数内に保存するための GetBookmark 関数
変数内に保存されたブックマークを指定し、特定のレコードにすばやく移動するための SetBookmark 関数
次の例は、この 2 つのメンバー関数を使用して、現在のレコードをマークし、そのレコードに後で戻るための方法を示しています。
// rs is a CRecordset or
// CRecordset-derived object
CDBVariant varRecordToReturnTo;
rs.GetBookmark( varRecordToReturnTo );
// More code in which you
// move to other records
rs.SetBookmark( varRecordToReturnTo );
CDBVariant クラス オブジェクトから、基になるデータ型を取り出す必要はありません。 GetBookmark でブックマークの値を指定し、そのブックマークに SetBookmark で戻ります。
注意
ODBC ドライバーとレコードセットの種類によっては、ブックマークがサポートされない場合があります。ブックマークがサポートされているかどうかは、CRecordset::CanBookmark を呼び出して簡単に確認できます。ブックマークがサポートされている場合でも、CRecordset::Open メンバー関数の CRecordset::useBookmarks オプションを指定して、ブックマークを明示的に実装する必要があります。また、レコードセットに対する操作の種類によっては、操作を実行した後に、ブックマークが無効になっていないかどうかを確認する必要があります。たとえば、Requery でレコードセットのクエリを再実行すると、ブックマークが有効ではなくなる場合があります。SetBookmark を安全に呼び出すことができるかどうかをチェックするには、CDatabase::GetBookmarkPersistence を呼び出します。
MFC ODBC の絶対位置
CRecordset では、ブックマークのほかに、位置を使って現在のレコードを設定することもできます。 この方法は、絶対ポジショニングと呼ばれます。
注意
絶対ポジショニングは、前方スクロール専用レコードセットには使用できません。前方スクロール専用レコードセットの詳細については、「レコードセット (ODBC)」を参照してください。
絶対位置を使用して現在のレコードを移動するには、CRecordset::SetAbsolutePosition を呼び出します。 SetAbsolutePosition に値を渡すと、その位置に対応するレコードが現在のレコードになります。
注意
レコードの絶対位置は、信頼できない場合があります。レコードセットからレコードが削除されると、それ以降のレコードの位置が変更されるためです。現在のレコードを移動するには、ブックマークを使用することをお勧めします。詳細については、「MFC での MAPI サポート」を参照してください。
レコードセットの移動の詳細については、「<レコードセット: スクロール (ODBC)」を参照してください。