Курсоры

Для використання курсорів Firebird ODBC драйвера потрібно вказувати через SQLSetConnectAttr атрибут SQL_ATTR_ODBC_CURSORS:

    // Specify that the Firebird ODBC Cursor is always used, then connect.
    SQLSetConnectAttr( hdbc, SQL_ATTR_ODBC_CURSORS, (SQLPOINTER)SQL_CUR_USE_DRIVER, 0 );
    SQLConnect( hdbc, (UCHAR*)connectString, SQL_NTS, NULL, 0, NULL, 0 );
   На цей час Firebird ODBC драйвера, курсори Динамічний(Dynamic) і Клавіатурний(Keyset) будуть виконуватися в режимі Статичний(Static) курсор. Також не можливо модифікувати курсори. Для отримання найбільшої швидкості виконання використовуйте тип курсора вперед направлений(ForwardOnly).
Оператори читання: (SQLFetch, SQLExtendedFetch, SQLScrollFetch) використовують SQL_ROWSET_SIZE і SQL_ATTR_ROW_ARRAY_SIZE, що дозволяє використовувати пакетне читання. дозволяється використовувати оператор SQLBindParameter, для звязування полів типа Blob чи Array, що значно прискорює роботу, тому що в цьому випадку операція виконується одним оператором(SQLFetch, SQLExtendedFetch, SQLScrollFetch) і не виконуються повільні оператори SQLPutData/SQLGetData, але це потребує наявності оперативної памяті під ці об'єкти, що не завжди можливо.

Використання ODBC Бібліотеки Курсора

Ця тема добре висвітлена в MSDN. Але потрібно підкреслити, що ключовим моментом, виявляється використання SQLSetConnectAttr, де атрибут SQL_ATTR_ODBC_CURSORS має значення SQL_CUR_USE_ODBC:

    // Specify that the ODBC Cursor Library is always used, then connect.
    SQLSetConnectAttr( hdbc, SQL_ATTR_ODBC_CURSORS, (SQLPOINTER)SQL_CUR_USE_ODBC, 0 );
    SQLConnect( hdbc, (UCHAR*)connectString, SQL_NTS, NULL, 0, NULL, 0 );
Також слід відмітити, що результуючі набори даних заповнюють кеш в rowset буферах, тому для поновлення слід визивати:
    SQLFetchScroll( hstmtSel, SQL_FETCH_RELATIVE, 0 );

Для більш детального знайомства з цими і іншими можливостями будьласка, розгляньте приклади.