Vous devez ajouter le code pour définir la propriété DBPROP_IRowsetLocate , comme illustré ci-dessous. Cette propriété indique le fournisseur que le consommateur veut une colonne signet. Dans ce code, la boucle tandis que contient un appel à IRowsetLocate::Compare. Cet appel devrait toujours réussir, puisqu'il compare un signet à lui-même. L'appel stocke le signet dans une variable temporaire, afin que la valeur sera disponible plus tard pour appeler MoveToBookmark.
//////////////////////////////////////////////////////////////////////
/ / TestProv consommateur demande au TestProvDlg.cpp
VOID CTestProvDlg::OnRun() {
CCommandlt ;CAccessor <CProvider> > Tableau ;
CDataSource source ;
CSession session ;
Si (source.Open("MyProvider.MyProvider.1", NULL, NULL, NULL, NULL)! = S_OK)
retour ;
Si (session.Open(source)! = S_OK)
retour ;
CDBPropSet propset(DBPROPSET_ROWSET) ;
propset.AddProperty(DBPROP_IRowsetLocate, true) ;
Si (voir le tableau.Open(session, _T("c:\\public\\testprf2\\foo.txt"), &propset)! = S_OK)
retour ;
CBookmark <4> tempBookmark ;
ULONG ulCount = 0 ;
alors que (voir le tableau.MoveNext() == S_OK)
{
Comparer DBCOMPARE ;
Si (ulCount == 2)
tempBookmark = table.bookmark ;
HR = table.Comparer (table.bookmark, table.bookmark,
& comparer) ;
Si (FAILED(hr))
ATLTRACE (_T ("comparer a échoué : 0x%X\n"), des ressources humaines) ;
autre
ATLASSERT (comparer == DBCOMPARE_EQ) ;
m_ctlString1.AddString(table.szCommand) ;
m_ctlString2.AddString(table.szText) ;
ulCount ++ ;
}
tableau.MoveToBookmark(tempBookmark) ;
m_ctlString1.AddString(table.szCommand) ;
m_ctlString2.AddString(table.szText) ;
}
Retour à la modification de la consommation pour une utilisation avec le fournisseur amélioré