È necessario aggiungere codice per impostare la proprietà DBPROP_IRowsetLocate , come illustrato di seguito. Questa proprietà indica il provider che il consumatore vuole che una colonna di segnalibro. In questo codice, il ciclo mentre contiene una chiamata al IRowsetLocate::Compare. Questa chiamata dovrebbe riuscire sempre, dal momento che confronta un segnalibro a se stesso. La chiamata memorizza bookmark in una variabile temporanea, cosicché il valore sarà disponibile in seguito per chiamare MoveToBookmark.
//////////////////////////////////////////////////////////////////////
/ / Applicazione TestProv Consumer in TestProvDlg.cpp
public static void CTestProvDlg::OnRun() {
CCommandlt;CAccessor <CProvider> > tabella;
CDataSource fonte;
CSession sessione;
Se (fonte.Open("MyProvider.MyProvider.1", null, null, null, null)! = S_OK)
ritorno;
Se (sessione.Open(source)! = S_OK)
ritorno;
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_IRowsetLocate, true);
Se (table.Open(Session, _T("c:\\public\\testprf2\\foo.txt"), &propset)! = S_OK)
ritorno;
CBookmark <4> tempBookmark;
ULONG ulCount = 0;
mentre (table.MoveNext () = = S_OK)
{
Confronta DBCOMPARE;
Se (ulCount = = 2)
tempBookmark = table.bookmark;
HR = table.Compare (table.bookmark, table.bookmark,
& confrontare);
Se (FAILED(hr))
ATLTRACE ( t ("Compare non riuscita: 0x%X\n"), hr);
altro
ATLASSERT (confrontare = = DBCOMPARE_EQ);
m_ctlString1.AddString(table.szCommand);
m_ctlString2.AddString(table.szText);
ulCount + +;
}
tabella.MoveToBookmark(tempBookmark);
m_ctlString1.AddString(table.szCommand);
m_ctlString2.AddString(table.szText);
}
Torna alla modifica del consumatore per l'utilizzo con il Provider avanzato