Condividi tramite


Mapping di SQLSetScrollOptions

Quando un'applicazione chiama SQLSetScrollOptions tramite un driver ODBC 3.x e il driver non supporta SQLSetScrollOptions, la chiamata a

SQLSetScrollOptions(StatementHandle, Concurrency, KeysetSize, RowsetSize)  

il risultato sarà il seguente:

  • Una chiamata a

    SQLGetInfo(ConnectionHandle, InfoType, InfoValuePtr, BufferLength, StringLengthPtr)  
    

    con l'argomento InfoType impostato su uno dei valori della tabella seguente, a seconda del valore dell'argomento KeysetSize in SQLSetScrollOptions.

    Argomento KeysetSize Argomento 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
    Valore maggiore dell'argomento RowsetSize SQL_KEYSET_CURSOR_ATTRIBUTES2

    Se il valore dell'argomento KeysetSize non è elencato nella tabella precedente, la chiamata a SQLSetScrollOptions restituisce SQLSTATE S1107 (valore di riga non compreso nell'intervallo) e non vengono eseguiti i passaggi seguenti.

    Gestione driver verifica quindi se il bit appropriato è impostato nel valore *InfoValuePtr restituito dalla chiamata a SQLGetInfo, in base al valore dell'argomento Concurrency in SQLSetScrollOptions.

    Argomento di concorrenza Impostazione 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 l'argomento Concurrency non è uno dei valori della tabella precedente, la chiamata a SQLSetScrollOptions restituisce SQLSTATE S1108 (opzione di concorrenza non compreso nell'intervallo) e non vengono eseguiti i passaggi seguenti. Se il bit appropriato (come indicato nella tabella precedente) non è impostato in *InfoValuePtr su uno dei valori corrispondenti all'argomento Concorrenza , la chiamata a SQLSetScrollOptions restituisce SQLSTATE S1C00 (driver non in grado di eseguire) e non vengono eseguiti i passaggi seguenti.

  • Una chiamata a

    SQLSetStmtAttr(StatementHandle, SQL_ATTR_CURSOR_TYPE, ValuePtr, 0)  
    

    con *ValuePtr impostato su uno dei valori nella tabella seguente, in base al valore dell'argomento KeysetSize in SQLSetScrollOptions.

    Argomento 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
    Valore maggiore dell'argomento RowsetSize SQL_CURSOR_KEYSET_DRIVEN
  • Una chiamata a

    SQLSetStmtAttr(StatementHandle, SQL_ATTR_CONCURRENCY, ValuePtr, 0)  
    

    con *ValuePtr impostato sull'argomento Concurrency in SQLSetScrollOptions.

  • Se l'argomento KeysetSize nella chiamata a SQLSetScrollOptions è positivo, una chiamata a

    SQLSetStmtAttr(StatementHandle, SQL_ATTR_KEYSET_SIZE, ValuePtr, 0)  
    

    con *ValuePtr impostato sull'argomento KeysetSize in SQLSetScrollOptions.

  • Una chiamata a

    SQLSetStmtAttr(StatementHandle, SQL_ROWSET_SIZE, ValuePtr, 0)  
    

    con *ValuePtr impostato sull'argomento RowsetSize in SQLSetScrollOptions.

    Nota

    Quando Gestione driver esegue il mapping di SQLSetScrollOptions per un'applicazione che utilizza un driver ODBC 3.x che non supporta SQLSetScrollOptions, Gestione driver imposta l'opzione di istruzione SQL_ROWSET_SIZE, non l'attributo di istruzione SQL_ATTR_ROW_ARRAY_SIZE, sull'argomento RowsetSize in SQLSetScrollOption. Di conseguenza, SQLSetScrollOptions non può essere usato da un'applicazione durante il recupero di più righe da una chiamata a SQLFetch o SQLFetchScroll. Può essere usato solo quando si recuperano più righe da una chiamata a SQLExtendedFetch.