Aktualisieren von Daten mit SQLSetPos

Anwendungen können jede Zeile im Rowset mit SQLSetPos aktualisieren oder löschen. Das Aufrufen von SQLSetPos ist eine bequeme Alternative zum Erstellen und Ausführen einer SQL-Anweisung. Sie ermöglicht es einem ODBC-Treiber, positionierte Updates zu unterstützen, auch wenn die Datenquelle keine positionierten SQL-Anweisungen unterstützt. Sie ist Teil des Paradigmas, den vollständigen Datenbankzugriff über Funktionsaufrufe zu erreichen.

SQLSetPos wird auf dem aktuellen Rowset ausgeführt und kann nur nach einem Aufruf von SQLFetchScroll verwendet werden. Die Anwendung gibt die Nummer der Zeile an, die aktualisiert, gelöscht oder eingefügt werden soll, und der Treiber ruft die neuen Daten für diese Zeile aus den Rowsetpuffern ab. SQLSetPos kann auch verwendet werden, um eine angegebene Zeile als aktuelle Zeile festzulegen oder eine bestimmte Zeile im Rowset aus der Datenquelle zu aktualisieren.

Die Rowset-Größe wird durch einen Aufruf von SQLSetStmtAttr mit einem Attributargument von SQL_ATTR_ROW_ARRAY_SIZE festgelegt. SQLSetPos verwendet jedoch erst nach einem Aufruf von SQLFetch oder SQLFetchScroll eine neue Rowsetgröße. Wenn beispielsweise die Rowsetgröße geändert wird, wird SQLSetPos aufgerufen und dann SQLFetch oder SQLFetchScroll aufgerufen, und der Aufruf von SQLSetPos verwendet die alte Rowset-Größe, während SQLFetch oder SQLFetchScroll die neue Rowsetgröße verwendet.

Die erste Zeile im Rowset ist die Zeile 1. Das Argument RowNumber in SQLSetPos muss eine Zeile im Rowset identifizieren. Das heißt, der Wert muss sich im Bereich zwischen 1 und der Anzahl der Zeilen befinden, die zuletzt abgerufen wurden (was möglicherweise kleiner als die Rowsetgröße ist). Wenn RowNumber 0 ist, gilt der Vorgang für jede Zeile im Rowset.

Da die meisten Interaktionen mit relationalen Datenbanken über SQL durchgeführt werden, wird SQLSetPos nicht weit verbreitet. Ein Treiber kann ihn jedoch problemlos emulieren, indem eine UPDATE- oder DELETE-Anweisung erstellt und ausgeführt wird.

Um zu bestimmen, welche Vorgänge SQLSetPos unterstützt, ruft eine Anwendung SQLGetInfo mit dem SQL_DYNAMIC_CURSOR_ATTRIBUTES1, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1, SQL_KEYSET_CURSOR_ATTRIBUTES1 oder SQL_STATIC_CURSOR_ATTRIBUTES1 Informationsoption auf (abhängig vom Cursortyp).

In diesem Abschnitt werden die folgenden Themen behandelt: