Поделиться через


Сопоставление 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.