SQLSetScrollOptions, mappage
Lorsqu’une application appelle SQLSetScrollOptions via un pilote ODBC 3.x et que le pilote ne prend pas en charge SQLSetScrollOptions, l’appel à
SQLSetScrollOptions(StatementHandle, Concurrency, KeysetSize, RowsetSize)
se traduit comme suit :
Un appel à
SQLGetInfo(ConnectionHandle, InfoType, InfoValuePtr, BufferLength, StringLengthPtr)
avec l’argument InfoType défini sur l’une des valeurs du tableau suivant, en fonction de la valeur de l’argument KeysetSize dans SQLSetScrollOptions.
KeysetSize, argument Argument 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 Valeur supérieure à l’argument RowsetSize SQL_KEYSET_CURSOR_ATTRIBUTES2 Si la valeur de l’argument KeysetSize n’est pas répertoriée dans le tableau précédent, l’appel à SQLSetScrollOptions retourne SQLSTATE S1107 (Valeur de ligne hors plage) et aucune des étapes suivantes n’est effectuée.
Le Gestionnaire de pilotes vérifie ensuite si le bit approprié est défini dans la valeur *InfoValuePtr retournée par l’appel à SQLGetInfo, en fonction de la valeur de l’argument Concurrency dans SQLSetScrollOptions.
Argument d’accès concurrentiel Paramètre 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 l’argument Concurrency ne fait pas partie des valeurs de la table précédente, l’appel à SQLSetScrollOptions retourne SQLSTATE S1108 (option d’accès concurrentiel hors plage) et aucune des étapes suivantes n’est effectuée. Si le bit approprié (comme indiqué dans le tableau précédent) n’est pas défini dans *InfoValuePtr sur l’une des valeurs correspondant à l’argument Concurrency , l’appel à SQLSetScrollOptions retourne SQLSTATE S1C00 (Pilote non compatible) et aucune des étapes suivantes n’est effectuée.
Un appel à
SQLSetStmtAttr(StatementHandle, SQL_ATTR_CURSOR_TYPE, ValuePtr, 0)
avec *ValuePtr défini sur l’une des valeurs du tableau suivant, en fonction de la valeur de l’argument KeysetSize dans SQLSetScrollOptions.
KeysetSize , argument *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 Valeur supérieure à l’argument RowsetSize SQL_CURSOR_KEYSET_DRIVEN Un appel à
SQLSetStmtAttr(StatementHandle, SQL_ATTR_CONCURRENCY, ValuePtr, 0)
avec *ValuePtr défini sur l’argument Concurrency dans SQLSetScrollOptions.
Si l’argument KeysetSize dans l’appel à SQLSetScrollOptions est positif, un appel à
SQLSetStmtAttr(StatementHandle, SQL_ATTR_KEYSET_SIZE, ValuePtr, 0)
avec *ValuePtr défini sur l’argument KeysetSize dans SQLSetScrollOptions.
Un appel à
SQLSetStmtAttr(StatementHandle, SQL_ROWSET_SIZE, ValuePtr, 0)
avec *ValuePtr défini sur l’argument RowsetSize dans SQLSetScrollOptions.
Notes
Lorsque le Gestionnaire de pilotes mappe SQLSetScrollOptions pour une application qui fonctionne avec un pilote ODBC 3.x qui ne prend pas en charge SQLSetScrollOptions, le Gestionnaire de pilotes définit l’option d’instruction SQL_ROWSET_SIZE, et non l’attribut d’instruction SQL_ATTR_ROW_ARRAY_SIZE, sur l’argument RowsetSize dans SQLSetScrollOption. Par conséquent, SQLSetScrollOptions ne peut pas être utilisé par une application lors de l’extraction de plusieurs lignes par un appel à SQLFetch ou SQLFetchScroll. Il peut être utilisé uniquement lors de l’extraction de plusieurs lignes par un appel à SQLExtendedFetch.