Você deve adicionar código para definir a propriedade DBPROP_IRowsetLocate , como mostrado abaixo. Essa propriedade informa o provedor que o consumidor quer uma coluna de indicador. Nesse código, o loop while contém uma chamada para IRowsetLocate:: Compare. Este chamar deve sempre êxito, uma vez que ele compara um indicador para si. A chamada armazena o indicador em uma variável temporária, para que o valor estará disponível mais tarde a chamar MoveToBookmark.
//////////////////////////////////////////////////////////////////////
/ / TestProv consumidor aplicativo em TestProvDlg.cpp
void CTestProvDlg::OnRun() {
CCommandlt;CAccessor <CProvider> > da tabela;
CDataSource fonte;
CSession sessão;
se (origem.Open("MyProvider.MyProvider.1", NULL, NULL, NULL, NULL)! = S_OK)
retornar;
se (sessão.Open(Source)! = S_OK)
retornar;
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_IRowsetLocate, true);
se (tabela.Open(Session, _T("c:\\public\\testprf2\\foo.txt"), &propset)! = S_OK)
retornar;
CBookmark <4> tempBookmark;
ULONG ulCount = 0;
ao mesmo tempo (tabela.MoveNext() = = S_OK)
{
Comparação de DBCOMPARE;
se (ulCount = = 2)
tempBookmark = table.bookmark;
hr = tabela.Compare (table.bookmark, table.bookmark,
& comparar);
se (FAILED(hr))
ATLTRACE ( t ("comparação falhada: 0x%X\n"), RH);
outra pessoa
ATLASSERT (compare = = 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);
}
Voltar para modificação de consumidor para utilização com o provedor avançado