CdbRecordset::GetRowsEx Method

The GetRowsEx method retrieves multiple rows and allows you to specify the data types of the fields stored in your application variables.

The GetRowsEx method is a performance improvement by dbDAO and MFC DAO to avoid the necessity to retrieve all data as variants and then convert to native types.

Syntax

LONGGetRowsEx(LPVOID pvBuffer,

LONG cbRow,

LPDAORSETBINDING prb,

LONG cBinding,

LPVOID pvVarBuffer = NULL,

LONG cbVarBuffer = 0,

LONG lRows = -1);

Parameters

Type Example Description
LPVOID pvBuffer Pointer to buffer in which to store returned rows.
LONG cbRow Length of row in bytes.
LPDAORSETBINDING prb Pointer to binding structure.
LONG cBinding Number of bindings.
LPVOID pvVarBuffer = NULL Optional. Pointer to buffer in which to store variable-length data.
LONG cbVarBuffer = 0 Optional. Length in bytes of pvVarBuffer.
LONG lRows Optional. Number of rows requested.

GetRowsEx returns a Long which indicates the number of records actually retrieved.

Remarks

GetRowsEx is only available in dbDAO.

The DAORSETBINDING structure specifies how data is to be copied from the rows to the memory buffer. A separate binding structure must be filled in for each field retrieved.

Note Each time GetRowsEx retrieves a set of records, it retrieves  the last record of the previous set again. For example, if you retrieve five records at a time, GetRowsEx will first retrieve records 1 through 5. The next time it will retrieve records 5 through 10. The time after that, records 10 through 15, and so on. Notice that records 5 and 10 are retrieved twice.

Usage

#include <afxole.h>
#include <dbdao.h>

CdbRecordset      rst;
COleVariant      vRows;
int               n;
LONG            lIndex[2];
HRESULT         hr;
DAORSETBINDING   dsbind;
TCHAR            Buffer[512], VarBuffer[256];
...                        // Open a recordset, fill in binding                            // structure, etc.
vRows = GetRowsEx(&Buffer, cbRow, &dsbind, cBinding, 
                  &VarBuffer, sizeof(VarBuffer), 10);
lIndex[0] = 0;            // Index of the 1st field.
lIndex[1] = 1;            // Index of the 2nd row.
                        // Get the field (assume an integer).
hr = SafeArrayGetElement(vRows.parray, &lIndex, &n);