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.