Сопоставление SQLSetScrollOptions
Когда приложение вызывает SQLSetScrollOptions через драйвер ODBC 3.x и драйвер не поддерживает SQLSetScrollOptions, вызов вызывается
SQLSetScrollOptions(StatementHandle, Concurrency, KeysetSize, RowsetSize)
Результат будет следующим образом:
Вызов
SQLGetInfo(ConnectionHandle, InfoType, InfoValuePtr, BufferLength, StringLengthPtr)
Аргумент InfoType имеет одно из значений в следующей таблице в зависимости от значения аргумента KeysetSize в SQLSetScrollOptions.
Аргумент KeysetSize Аргумент InfoType SQL_SCROLL_FORWARD_ONLY SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 SQL_SCROLL_STATIC SQL_STATIC_CURSOR_ATTRIBUTES2 SQL_SCROLL_KEYSET_DRIVEN SQL_KEYSET_CURSOR_ATTRIBUTES2 SQL_SCROLL_DYNAMIC SQL_DYNAMIC_CURSOR_ATTRIBUTES2 Значение больше аргумента RowsetSize SQL_KEYSET_CURSOR_ATTRIBUTES2 Если значение аргумента KeysetSize не указано в предыдущей таблице, вызов SQLSetScrollOptions возвращает SQLSTATE S1107 (значение строки вне диапазона), и ни один из следующих шагов не выполняется.
Затем диспетчер драйверов проверяет, задан ли соответствующий бит в значении *InfoValuePtr , возвращаемом вызовом SQLGetInfo, в соответствии со значением аргумента параллелизма в SQLSetScrollOptions.
Аргумент параллелизма Параметр InfoType SQL_CONCUR_READ_ONLY SQL_CA2_READ_ONLY_CONCURRENCY SQL_CONCUR_LOCK SQL_CA2_LOCK_CONCURRENCY SQL_CONCUR_ROWVER SQL_CA2_ROWVER_CONCURRENCY SQL_CONCUR_VALUES SQL_CA2_VALUES_CONCURRENCY Если аргумент параллелизма не является одним из значений в предыдущей таблице, вызов SQLSetScrollOptions возвращает SQLSTATE S1108 (параметр параллелизма вне диапазона) и ни один из следующих шагов не выполняется. Если соответствующий бит (как указано в предыдущей таблице) не задан в *InfoValuePtr в качестве одного из значений, соответствующих аргументу параллелизма , вызов SQLSetScrollOptions возвращает SQLSTATE S1C00 (драйвер не способен) и ни один из следующих шагов не выполняется.
Вызов
SQLSetStmtAttr(StatementHandle, SQL_ATTR_CURSOR_TYPE, ValuePtr, 0)
значение *ValuePtr имеет одно из значений в следующей таблице в соответствии со значением аргумента KeysetSize в SQLSetScrollOptions.
Аргумент KeysetSize *ValuePtr SQL_SCROLL_FORWARD_ONLY SQL_CURSOR_FORWARD_ONLY SQL_SCROLL_STATIC SQL_CURSOR_STATIC SQL_SCROLL_KEYSET_DRIVEN SQL_CURSOR_KEYSET_DRIVEN SQL_SCROLL_DYNAMIC SQL_CURSOR_DYNAMIC Значение больше аргумента RowsetSize SQL_CURSOR_KEYSET_DRIVEN Вызов
SQLSetStmtAttr(StatementHandle, SQL_ATTR_CONCURRENCY, ValuePtr, 0)
значение *ValuePtr имеет аргумент параллелизма в SQLSetScrollOptions.
Если аргумент KeysetSize в вызове SQLSetScrollOptions положительный, вызов
SQLSetStmtAttr(StatementHandle, SQL_ATTR_KEYSET_SIZE, ValuePtr, 0)
значение *ValuePtr имеет аргумент KeysetSize в SQLSetScrollOptions.
Вызов
SQLSetStmtAttr(StatementHandle, SQL_ROWSET_SIZE, ValuePtr, 0)
значение *ValuePtr имеет аргумент RowsetSize в SQLSetScrollOptions.
Заметка
Если диспетчер драйверов сопоставляет SQLSetScrollOptions для приложения, работающего с драйвером ODBC 3.x , который не поддерживает SQLSetScrollOptions, диспетчер драйверов задает параметр инструкции SQL_ROWSET_SIZE, а не атрибут инструкции SQL_ATTR_ROW_ARRAY_SIZE, аргумент RowsetSize в SQLSetScrollOption. В результате SQLSetScrollOptions нельзя использовать приложением при получении нескольких строк вызовом SQLFetch или SQLFetchScroll. Его можно использовать только при получении нескольких строк вызовом SQLExtendedFetch.