Należy dodać kod, aby ustawić właściwość DBPROP_IRowsetLocate , jak pokazano poniżej. Ta właściwość informuje dostawcę, że konsument chce kolumnę zakładki. W tym kodzie pętli natomiast zawiera wywołanie IRowsetLocate::Compare. To wywołanie powinna zawsze poprawne, ponieważ porównuje zakładki do siebie. Wywołanie zapisuje zakładki w zmiennej tymczasowej, tak, że wartość będzie dostępny później do wywołania MoveToBookmark.
//////////////////////////////////////////////////////////////////////
/ / Application TestProv konsumentów w TestProvDlg.cpp
void CTestProvDlg::OnRun() {}
CCommandlt;CAccessor <CProvider> > tabeli;
CDataSource źródła;
CSession sesji;
Jeżeli (źródła.Open("MyProvider.MyProvider.1", null, null, null, null)! = wartość S_OK)
powrotu;
Jeżeli (sesji.Open(source)! = wartość S_OK)
powrotu;
CDBPropSet propset(DBPROPSET_ROWSET);
zestaw właściwości.AddProperty(DBPROP_IRowsetLocate, true);
Jeżeli (tabela.Open(Session, _T("c:\\public\\testprf2\\foo.txt"), &propset)! = wartość S_OK)
powrotu;
CBookmark <4> tempBookmark;
ULONG ulCount = 0;
podczas (tabela.MoveNext() == wartość S_OK)
{
Porównaj DBCOMPARE;
Jeżeli (ulCount == 2)
tempBookmark = table.bookmark;
hr = tabeli.Porównaj (table.bookmark, table.bookmark,
& porównać);
Jeżeli (FAILED(hr))
ATLTRACE (_T ("porównania nie powiodła się: 0x%X\n"), hr);
Else
ATLASSERT (porównaj == DBCOMPARE_EQ);
m_ctlString1.AddString(Table.szCommand);
m_ctlString2.AddString(Table.szText);
ulCount ++;
}
Tabela.MoveToBookmark(tempBookmark);
m_ctlString1.AddString(Table.szCommand);
m_ctlString2.AddString(Table.szText);
}
Wróć do modyfikowania konsumentów do użytku z rozszerzonego dostawcy