Mise à jour de données avec SQLSetPos

Les applications peuvent mettre à jour ou supprimer n’importe quelle ligne de l’ensemble de lignes avec SQLSetPos. L’appel de SQLSetPos est une alternative pratique à la construction et à l’exécution d’une instruction SQL. Il permet à un pilote ODBC de prendre en charge les mises à jour positionnées même si la source de données ne prend pas en charge les instructions SQL positionnées. Il fait partie du paradigme de l’obtention d’un accès complet à la base de données par le biais d’appels de fonction.

SQLSetPos fonctionne sur l’ensemble de lignes actuel et ne peut être utilisé qu’après un appel à SQLFetchScroll. L’application spécifie le nombre de lignes à mettre à jour, supprimer ou insérer, et le pilote récupère les nouvelles données de cette ligne à partir des mémoires tampons d’ensemble de lignes. SQLSetPos peut également être utilisé pour désigner une ligne spécifiée comme ligne active ou pour actualiser une ligne particulière dans l’ensemble de lignes à partir de la source de données.

La taille de l’ensemble de lignes est définie par un appel à SQLSetStmtAttr avec un argument Attribute de SQL_ATTR_ROW_ARRAY_SIZE. SQLSetPos utilise une nouvelle taille d’ensemble de lignes, toutefois, uniquement après un appel à SQLFetch ou SQLFetchScroll. Par exemple, si la taille de l’ensemble de lignes est modifiée, SQLSetPos est appelée, puis SQLFetchScroll ou SQLFetchScroll est appelée, et l’appel à SQLSetPos utilise l’ancienne taille de l’ensemble de lignes alors que SQLFetch ou SQLFetchScroll utilise la nouvelle taille d’ensemble de lignes.

La première ligne de l'ensemble de lignes porte le numéro 1. L’argument RowNumber dans SQLSetPos doit identifier une ligne dans l’ensemble de lignes ; autrement dit, sa valeur doit se trouver dans la plage comprise entre 1 et le nombre de lignes qui ont été extraites récemment (qui peuvent être inférieures à la taille de l’ensemble de lignes). Si RowNumber est 0, l’opération s’applique à chaque ligne de l’ensemble de lignes.

Étant donné que la plupart des interactions avec les bases de données relationnelles sont effectuées via SQL, SQLSetPos n’est pas largement pris en charge. Toutefois, un pilote peut facilement l’émuler en construisant et en exécutant une instruction UPDATE ou DELETE .

Pour déterminer quelles opérations SQLSetPos prend en charge, une application appelle SQLGetInfo avec l’option SQL_DYNAMIC_CURSOR_ATTRIBUTES1, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1, SQL_KEYSET_CURSOR_ATTRIBUTES1 ou SQL_STATIC_CURSOR_ATTRIBUTES1 d’informations (selon le type du curseur).

Cette section contient les rubriques suivantes :