Asignación de SQLSetScrollOptions
Cuando una aplicación llama a SQLSetScrollOptions a través de un controlador ODBC 3.x y el controlador no admite SQLSetScrollOptions, la llamada a
SQLSetScrollOptions(StatementHandle, Concurrency, KeysetSize, RowsetSize)
dará como resultado lo siguiente:
Una llamada a
SQLGetInfo(ConnectionHandle, InfoType, InfoValuePtr, BufferLength, StringLengthPtr)
con el argumento InfoType establecido en uno de los valores de la tabla siguiente, según el valor del argumento KeysetSize en 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 Valor mayor que el argumento RowsetSize SQL_KEYSET_CURSOR_ATTRIBUTES2 Si el valor del argumento KeysetSize no aparece en la tabla anterior, la llamada a SQLSetScrollOptions devuelve SQLSTATE S1107 (valor de fila fuera del intervalo) y no se realiza ninguno de los pasos siguientes.
A continuación, el Administrador de controladores comprueba si el bit adecuado se establece en el valor *InfoValuePtr devuelto por la llamada a SQLGetInfo, según el valor del argumento Concurrency en SQLSetScrollOptions.
Argumento de simultaneidad Configuración 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 Si el argumento Concurrency no es uno de los valores de la tabla anterior, la llamada a SQLSetScrollOptions devuelve SQLSTATE S1108 (opción de simultaneidad fuera del intervalo) y ninguno de los pasos siguientes se realiza. Si el bit adecuado (como se indica en la tabla anterior) no se establece en *InfoValuePtr en uno de los valores correspondientes al argumento Concurrency , la llamada a SQLSetScrollOptions devuelve SQLSTATE S1C00 (controlador no compatible) y ninguno de los pasos siguientes se realiza.
Una llamada a
SQLSetStmtAttr(StatementHandle, SQL_ATTR_CURSOR_TYPE, ValuePtr, 0)
con *ValuePtr establecido en uno de los valores de la tabla siguiente, según el valor del argumento KeysetSize en 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 Valor mayor que el argumento RowsetSize SQL_CURSOR_KEYSET_DRIVEN Una llamada a
SQLSetStmtAttr(StatementHandle, SQL_ATTR_CONCURRENCY, ValuePtr, 0)
con *ValuePtr establecido en el argumento Concurrency en SQLSetScrollOptions.
Si el argumento KeysetSize de la llamada a SQLSetScrollOptions es positivo, una llamada a
SQLSetStmtAttr(StatementHandle, SQL_ATTR_KEYSET_SIZE, ValuePtr, 0)
con *ValuePtr establecido en el argumento KeysetSize en SQLSetScrollOptions.
Una llamada a
SQLSetStmtAttr(StatementHandle, SQL_ROWSET_SIZE, ValuePtr, 0)
con *ValuePtr establecido en el argumento RowsetSize en SQLSetScrollOptions.
Nota
Cuando el Administrador de controladores asigna SQLSetScrollOptions para una aplicación que trabaja con un controlador ODBC 3.x que no admite SQLSetScrollOptions, el Administrador de controladores establece la opción de instrucción SQL_ROWSET_SIZE, no el atributo de instrucción SQL_ATTR_ROW_ARRAY_SIZE, en el argumento RowsetSize de SQLSetScrollOption. Como resultado, una aplicación no puede usar SQLSetScrollOptions al capturar varias filas mediante una llamada a SQLFetch o SQLFetchScroll. Solo se puede usar al capturar varias filas mediante una llamada a SQLExtendedFetch.