Using the Oracle Provider with the OLE DB Cursor Service

The OLE DB Provider for Oracle does not natively implement fetching backwards, scrolling backwards, or the IRowsetChange, IRowsetFind, IRowsetLocate, or IRowsetScroll interfaces. Properties that support scrollability and updatability, such as DBPROP_CANFETCHBACKWARDS, DBPROP_CANSCROLLBACKWARDS, DBPROP_IRowsetScroll, DBPROP_IRowsetChange, and DBPROP_UPDATABILITY, are by default VARIANT_FALSE. Therefore, applications that require scrollable and updatable rowsets must use the Client Cursor Engine service to construct one.

Support for these properties and interfaces is provided through the invocation of the Cursor Engine by the OLE DB Service Components. If Service Components have been disabled for some reason (through a registry entry under the Provider's CLSID or by setting the OLE DB Services initialization property, DBPROP_INIT_OLEDBSERVICES, prior to connection), these properties will not be available.

When using ADO, you will get the Client Cursor Engine service only if you specify adUseClient when opening the recordset.

The Client Cursor Engine service provides a snapshot cursor, fully materialized, for your application. However, unless specifically requested that the cursor engine should use asynchronous fetches, it will wait until it completes its fetches before returning control to your application. In the case of a large rowset, this could be expensive. For background population, set DBPROP_ROWSET_ASYNCH to DBPROPVAL_ASYNCH_BACKGROUNDPOPULATION.

The size of the cursor can be controlled by setting DBPROP_MAX_ROWS. However, this limits the entire rowset to that number of rows, not the rows currently fetched.