Mapeamento SQLSetScrollOptions
Quando um aplicativo chama SQLSetScrollOptions por meio de um driver ODBC 3.x e o driver não dá suporte a SQLSetScrollOptions, a chamada para
SQLSetScrollOptions(StatementHandle, Concurrency, KeysetSize, RowsetSize)
resultará da seguinte maneira:
Uma chamada para
SQLGetInfo(ConnectionHandle, InfoType, InfoValuePtr, BufferLength, StringLengthPtr)
com o argumento InfoType definido como um dos valores na tabela a seguir, dependendo do valor do argumento KeysetSize em SQLSetScrollOptions.
Argumento KeysetSize Argumento 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 Um valor maior que o argumento RowsetSize SQL_KEYSET_CURSOR_ATTRIBUTES2 Se o valor do argumento KeysetSize não estiver listado na tabela anterior, a chamada para SQLSetScrollOptions retornará SQLSTATE S1107 (valor de linha fora do intervalo) e nenhuma das etapas a seguir será executada.
Em seguida, o Gerenciador de Driver verifica se o bit apropriado está definido no valor *InfoValuePtr retornado pela chamada para SQLGetInfo, de acordo com o valor do argumento Concurrency em SQLSetScrollOptions.
Argumento de simultaneidade Configuração de 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 Se o argumento Concurrency não for um dos valores na tabela anterior, a chamada para SQLSetScrollOptions retornará SQLSTATE S1108 (opção de simultaneidade fora do intervalo) e nenhuma das etapas a seguir será executada. Se o bit apropriado (conforme indicado na tabela anterior) não estiver definido em *InfoValuePtr como um dos valores correspondentes ao argumento Concurrency , a chamada para SQLSetScrollOptions retornará SQLSTATE S1C00 (Driver não compatível) e nenhuma das etapas a seguir será executada.
Uma chamada para
SQLSetStmtAttr(StatementHandle, SQL_ATTR_CURSOR_TYPE, ValuePtr, 0)
com *ValuePtr definido como um dos valores na tabela a seguir, de acordo com o valor do argumento KeysetSize em SQLSetScrollOptions.
Argumento 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 Um valor maior que o argumento RowsetSize SQL_CURSOR_KEYSET_DRIVEN Uma chamada para
SQLSetStmtAttr(StatementHandle, SQL_ATTR_CONCURRENCY, ValuePtr, 0)
com *ValuePtr definido como o argumento Concurrency em SQLSetScrollOptions.
Se o argumento KeysetSize na chamada para SQLSetScrollOptions for positivo, uma chamada para
SQLSetStmtAttr(StatementHandle, SQL_ATTR_KEYSET_SIZE, ValuePtr, 0)
com *ValuePtr definido como o argumento KeysetSize em SQLSetScrollOptions.
Uma chamada para
SQLSetStmtAttr(StatementHandle, SQL_ROWSET_SIZE, ValuePtr, 0)
com *ValuePtr definido como o argumento RowsetSize em SQLSetScrollOptions.
Observação
Quando o Gerenciador de Driver mapeia SQLSetScrollOptions para um aplicativo que trabalha com um driver ODBC 3.x que não dá suporte a SQLSetScrollOptions, o Gerenciador de Driver define a opção de instrução SQL_ROWSET_SIZE, não o atributo de instrução SQL_ATTR_ROW_ARRAY_SIZE, para o argumento RowsetSize em SQLSetScrollOption. Como resultado, SQLSetScrollOptions não pode ser usado por um aplicativo ao buscar várias linhas por uma chamada para SQLFetch ou SQLFetchScroll. Ele só pode ser usado ao buscar várias linhas por uma chamada para SQLExtendedFetch.