レコードセット: ブックマークと絶対位置 (ODBC)

このトピックの内容は、MFC ODBC クラスに該当します。

レコードセット内を移動する際には、多くの場合、特定のレコードに戻る手段が必要になります。 レコードのブックマークと絶対位置は、そのための 2 つの方法を提供します。

このトピックでは、次の内容について説明します。

MFC ODBC でのブックマーク

ブックマークは、レコードを一意に識別します。 レコードセット内を移動する際、レコードの絶対位置を必ずしも使用できるとはかぎりません。レコードセットからレコードが削除される場合があるからです。 レコードの位置を追跡するための信頼できる方法は、ブックマークを使用することです。 クラス CRecordset は、次のためのメンバー関数を提供します。

  • 現在のレコードのブックマークを取得して、それを変数 (GetBookmark) に保存できるようにする。

  • ブックマーク (以前に変数 (SetBookmark) に保存したもの) を指定することにより、特定のレコードにすばやく移動する。

次の例は、これらのメンバー関数を使用して現在のレコードをマークし、後でそれに戻る方法を示したものです。

// 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 を使用してそのブックマークに戻ります。

Note

ODBC ドライバーとレコードセットの種類によっては、ブックマークがサポートされていない場合もあります。 ブックマークがサポートされているかどうかは、CRecordset::CanBookmark を呼び出すことで簡単に確認できます。 さらに、ブックマークがサポートされている場合は、CRecordset::Open メンバー関数で CRecordset::useBookmarks オプションを指定することにより、ブックマークを実装することを明示的に選択する必要があります。 また、特定のレコードセット操作の後にブックマークが維持されているかどうかも確認する必要もあります。 たとえば、レコードセットに対して Requery を実行した場合には、ブックマークが無効になっている可能性があります。 SetBookmark を安全に呼び出せるかどうかを確認するには、CDatabase::GetBookmarkPersistence を呼び出します。

MFC ODBC での絶対位置

ブックマークに加えて、クラス CRecordset では、序数位置を指定することによって現在のレコードを設定することができます。 これは絶対配置と呼ばれます。

Note

順方向専用のレコードセットでは、絶対配置は使用できません。 順方向専用のレコードセットについて詳しくは、「レコードセット (ODBC)」をご覧ください。

絶対位置を使用して現在のレコード ポインターを移動するには、CRecordset::SetAbsolutePosition を呼び出します。 SetAbsolutePosition に値を渡すと、その序数位置に対応するレコードが現在のレコードになります。

Note

レコードの絶対位置は信頼できない可能性があります。 ユーザーがレコードセットからレコードを削除した場合、後続のレコードの順序が変更されます。 現在のレコードを移動するための推奨の方法は、ブックマークです。 詳しくは、「MFC ODBC でのブックマーク」をご覧ください。

レコードセットの移動について詳しくは、「レコードセット: スクロール (ODBC)」をご覧ください。

関連項目

レコードセット (ODBC)