Курсоры

Для использования курсоров Firebird ODBC драйвера следует указывать команды:

    // 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, что значительно ускоряет работу, так как не выполняются медленные операторы SQLPutData/SQLGetData, однако это требует наличия выделенной памяти под эти объекты, что не всегда возможно.

Использование ODBC Библиотеки Курсора

Эта тема хорошо изложена в MSDN. Однако нужно подчеркнуть, что ключевым моментом, является использование утверждения перед соединением:

    // 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 );

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