次の方法で共有


レコードセット: ブックマークと絶対位置 (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)」を参照してください。

参照

概念

レコードセット (ODBC)