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