Sie müssen Code zum Festlegen der Eigenschaft DBPROP_IRowsetLocate hinzufügen, wie unten gezeigt. Diese Eigenschaft weist dem Anbieter, dass der Verbraucher eine Lesezeichenspalte will. In diesem Code der while -Schleife enthält einen Aufruf an IRowsetLocate::Compare. Dieser Aufruf sollte immer erfolgreich, da es ein Lesezeichen für selbst vergleicht. Der Aufruf speichert das Lesezeichen in einer temporären Variablen, so dass der Wert später zum Aufrufen von MoveToBookmark zur Verfügung stehen.
//////////////////////////////////////////////////////////////////////
/ / TestProv als Consumeranwendung in TestProvDlg.cpp
void CTestProvDlg::OnRun() {}
CCommandlt;CAccessor <CProvider> > Tabellen;
CDataSource Quelle;
CSession Sitzung;
Wenn (Quelle.Open("MyProvider.MyProvider.1", NULL, NULL, NULL, null)! = S_OK)
Rückkehr;
Wenn (Sitzung.Open(Source)! = S_OK)
Rückkehr;
CDBPropSet propset(DBPROPSET_ROWSET);
Propset.AddProperty(DBPROP_IRowsetLocate, true);
Wenn (Tabelle.Open(Session, _T("c:\\public\\testprf2\\foo.txt"), &propset)! = S_OK)
Rückkehr;
CBookmark <4> TempBookmark;
ULONG UlCount = 0;
während (Tabelle.MoveNext() == S_OK)
{
DBCOMPARE vergleichen;
Wenn (UlCount == 2)
TempBookmark = table.bookmark;
HR = Table.Compare (table.bookmark, table.bookmark,
& vergleichen);
Wenn (FAILED(hr))
ATLTRACE (_T ("Fehler beim Vergleichen: 0x%X\n"), hr);
anderes
ATLASSERT (vergleichen == DBCOMPARE_EQ);
m_ctlString1.AddString(Table.szCommand);
m_ctlString2.AddString(Table.szText);
UlCount ++;
}
Tabelle.MoveToBookmark(tempBookmark);
m_ctlString1.AddString(Table.szCommand);
m_ctlString2.AddString(Table.szText);
}
Zurück zu den Verbraucher für die Verwendung mit der Enhanced Provider ändern