Debe agregar código para establecer la propiedad DBPROP_IRowsetLocate , como se muestra a continuación. Esta propiedad indica al proveedor que el consumidor desea una columna de marcador. En este código, el bucle while contiene una llamada a IRowsetLocate::Compare. Esta llamada debe siempre correctamente, ya que compara un marcador a sí mismo. La llamada almacena el marcador en una variable temporal, por lo que el valor estará disponible más tarde para llamar a MoveToBookmark.
//////////////////////////////////////////////////////////////////////
/ / Aplicación de consumidor de TestProv en TestProvDlg.cpp
void CTestProvDlg::OnRun() {}
CCommandlt;CAccessor <CProvider> > tabla;
Fuente de CDataSource;
CSession período de sesiones;
Si (fuente.Open("MyProvider.MyProvider.1", NULL, NULL, NULL, NULL)! = S_OK)
retorno;
Si (período de sesiones.Open(Source)! = S_OK)
retorno;
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_IRowsetLocate, true);
Si (tabla.Open(Session, _T("c:\\public\\testprf2\\foo.txt"), &propset)! = S_OK)
retorno;
CBookmark <4> tempBookmark;
ULONG ulCount = 0;
mientras (tabla.MoveNext() == S_OK)
{
Comparar DBCOMPARE;
Si (ulCount == 2)
tempBookmark = table.bookmark;
HR = tabla.Comparar (table.bookmark, table.bookmark,
& comparar);
Si (FAILED(hr))
ATLTRACE (_T ("Comparar error: 0x%X\n"), hr);
otra cosa
ATLASSERT (Comparar == DBCOMPARE_EQ);
m_ctlString1.addString(Table.szCommand);
m_ctlString2.addString(Table.szText);
ulCount ++;
}
tabla.MoveToBookmark(tempBookmark);
m_ctlString1.addString(Table.szCommand);
m_ctlString2.addString(Table.szText);
}
Volver a modificar el consumidor para su uso con el mayor proveedor