Freigeben über


Ausführen einer positionierten Aktualisierung und von DELETE-Anweisungen

Wichtig

Dieses Feature wird in einer zukünftigen Version von Windows entfernt. Vermeiden Sie die Verwendung dieses Features in neuer Entwicklungsarbeit, und planen Sie, Anwendungen zu ändern, die dieses Feature derzeit verwenden. Microsoft empfiehlt die Verwendung der Cursorfunktion des Treibers.

Nachdem eine Anwendung einen Datenblock mit SQLFetchScroll abgerufen hat, kann sie die Daten im Block aktualisieren oder löschen. Um eine positionierte Aktualisierung oder Löschung auszuführen, führen Sie die Anwendung aus:

  1. Ruft SQLSetPos auf, um den Cursor in der Zeile zu positionieren, die aktualisiert oder gelöscht werden soll.

  2. Erstellt eine positionierte Aktualisierungs- oder Lösch-Anweisung mit der folgenden Syntax:

    UPDATE table-name

    SET column-identifier = {expression | NULL}

    [, Spaltenbezeichner = {Ausdruck | NULL}]

    WHERE CURRENT OF cursor-name

    DELETE FROM table-name WHERE CURRENT OF cursor-name

    Die einfachste Möglichkeit zum Erstellen der SET-Klausel in einer positionierten Update-Anweisung besteht darin, Parametermarkierungen für jede Spalte zu verwenden, um aktualisiert zu werden, und sqlBindParameter zu verwenden, um diese an die Rowsetpuffer für die zu aktualisierende Zeile zu binden. In diesem Fall entspricht der C-Datentyp des Parameters dem Datentyp C des Rowsetpuffers.

  3. Aktualisiert die Rowsetpuffer für die aktuelle Zeile, wenn eine positionierte Aktualisierungsanweisung ausgeführt wird. Nach dem erfolgreichen Ausführen einer positionierten Aktualisierungsanweisung kopiert die Cursorbibliothek die Werte aus jeder Spalte in der aktuellen Zeile in den Cache.

    Achtung

    Wenn die Anwendung die Rowsetpuffer vor dem Ausführen einer positionierten Aktualisierungsanweisung nicht ordnungsgemäß aktualisiert, sind die Daten im Cache nach der Ausführung der Anweisung falsch.

  4. Führt die positionierte Aktualisierungs- oder Lösch-Anweisung mithilfe einer anderen Anweisung als die dem Cursor zugeordnete Anweisung aus.

    Achtung

    Die where-Klausel , die von der Cursorbibliothek erstellt wurde, um die aktuelle Zeile zu identifizieren, kann keine Zeilen identifizieren, eine andere Zeile identifizieren oder mehrere Zeilen identifizieren. Weitere Informationen finden Sie unter Erstellen von durchsuchten Anweisungen.

Für alle positionierten Aktualisierungs- und Löschanweisungen ist ein Cursorname erforderlich. Um den Cursornamen anzugeben, ruft eine Anwendung SQLSetCursorName auf, bevor der Cursor geöffnet wird. Um den vom Treiber generierten Cursornamen zu verwenden, ruft eine Anwendung SQLGetCursorName auf, nachdem der Cursor geöffnet wurde.

Nachdem die Cursorbibliothek eine positionierte Aktualisierungs- oder Löschausweisung ausgeführt hat, enthalten das Statusarray, die Rowsetpuffer und der cache, die von der Cursorbibliothek verwaltet werden, die in der folgenden Tabelle gezeigten Werte.

Verwendete Anweisung Wert im Zeilenstatusarray Werte in

Rowsetpuffer
Werte in

Cachepuffer
Positioniertes Update SQL_ROW_UPDATED Neue Werte[1] Neue Werte[1]
Positionierter Löschvorgang SQL_ROW_DELETED Alte Werte Alte Werte

[1] Die Anwendung muss die Werte in den Rowsetpuffern aktualisieren, bevor die positionierte Aktualisierungsanweisung ausgeführt wird; Nach dem Ausführen der positionierten Update-Anweisung kopiert die Cursorbibliothek die Werte in den Rowsetpuffern in den Cache.