Необходимо добавить код для задания свойства DBPROP_IRowsetLocate , как показано ниже. Это свойство указывает поставщику, что потребитель хочет столбца закладки. В этом коде цикл while содержит вызов IRowsetLocate::Compare. Этот призыв должен всегда выполняются успешно, так как он сравнивает закладки на самого себя. Вызов сохраняет закладки во временной переменной, чтобы значение будет доступна позже для вызова функции MoveToBookmark.
//////////////////////////////////////////////////////////////////////
/ / Приложение потребителя TestProv в TestProvDlg.cpp
void CTestProvDlg::OnRun() {}
CCommandlt;CAccessor <CProvider> > Таблица;
CDataSource источник;
CSession сессии;
Если (источник.Open("MyProvider.MyProvider.1", NULL, NULL, NULL, NULL)! = S_OK)
возвращение;
Если (сессия.Open(Source)! = S_OK)
возвращение;
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_IRowsetLocate, true);
Если (таблица.Open(Session, _T("c:\\public\\testprf2\\foo.txt"), &propset)! = S_OK)
возвращение;
CBookmark <4> tempBookmark;
ULONG ulCount = 0;
во время (таблица.MoveNext() == S_OK)
{
DBCOMPARE сравнения;
Если (ulCount == 2)
tempBookmark = table.bookmark;
HR = таблица.Сравните (table.bookmark, table.bookmark,
& сравнение);
Если (FAILED(hr))
ATLTRACE (_T ("не удалось сравнить: 0x%X\n"), hr);
остальное
ATLASSERT (сравнения == DBCOMPARE_EQ);
m_ctlString1.AddString(Table.szCommand);
m_ctlString2.AddString(Table.szText);
ulCount ++;
}
Таблица.MoveToBookmark(tempBookmark);
m_ctlString1.AddString(Table.szCommand);
m_ctlString2.AddString(Table.szText);
}
Назад к модификации потребителя для использования с расширенной провайдера