ブックマークの使用
行セットを開く前に、ブックマークを使用することをプロバイダーに通知する必要があります。これを通知するには、プロパティ セットの DBPROP_BOOKMARKS プロパティを true に設定します。プロバイダーはブックマークを列 0 として取得するため、静的アクセサーを使用している場合は、BOOKMARK_ENTRY という特殊マクロと CBookmark クラスを使用する必要があります。CBookmark クラスはテンプレート クラスで、引数はブックマーク バッファーの長さ (バイト単位) です。ブックマークに必要なバッファーの長さは、プロバイダーによって異なります。次の例のように ODBC OLE DB プロバイダーを使用している場合、バッファーは 4 バイトにする必要があります。
class CProducts
{
public:
CBookmark<4> bookmark;
BEGIN_COLUMN_MAP(CProducts)
BOOKMARK_ENTRY(bookmark)
END_COLUMN_MAP()
};
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_BOOKMARKS, true);
CTable<CAccessor<CProducts> > product;
product.Open(session, "Products", &propset);
CDynamicAccessor を使用している場合、バッファーは実行時に動的に割り当てられます。この場合は、バッファーの長さを指定しない特別なバージョンの CBookmark を使用できます。次のコード例に示すように、GetBookmark 関数を使用して、現在のレコードからブックマークを取得します。
CTable<CDynamicAccessor> product;
CBookmark<> bookmark;
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_BOOKMARKS, true);
product.Open(session, "Products", &propset);
product.MoveNext();
product.GetBookmark(&bookmark);
プロバイダーでのブックマークのサポートについては、「プロバイダーのブックマーク サポート」を参照してください。