ROLLBACK-Befehl

Macht alle Änderungen, die während der aktuellen Transaktion vorgenommen wurden, rückgängig.

ROLLBACK

Hinweise

ROLLBACK stellt den ursprünglichen Zustand der Tabellen, Tabellenmemodateien und Indexdateien vor Beginn der Transaktion wieder her.

Wenn Sie Datensätze in einer Datenbank ändern, die Bestandteil einer Transaktion ist, haben andere Benutzer im Netzwerk weder Schreib- noch Lesezugriff auf die Datensätze, bis Sie die Transaktion beenden.

Wenn andere Benutzer im Netzwerk versuchen, auf die Datensätze zuzugreifen, die Sie geändert haben, müssen diese warten, bis Sie Ihre Transaktion beendet haben. Bis die Datensätze wieder verfügbar sind, erhalten sie die Meldung "Datensatz nicht verfügbar … Bitte warten". Aus diesem Grund müssen Transaktionen so kurz wie möglich gehalten werden oder zu Zeiten geringer Datenbanknutzung ausgeführt werden.

ROLLBACK macht alle Änderungen rückgängig, die während der aktuellen Transaktion vorgenommen wurden. Wenn die Transaktion verschachtelt ist, werden nur die seit der letzten Eingabe von BEGIN TRANSACTION durchgeführten Änderungen rückgängig gemacht. Die Programmausführung wird mit der nächsten Anweisung fortgesetzt.

Wenn Datensatz- oder Dateisperren eingerichtet wurden, werden diese freigegeben.

Beispiel

Im folgenden Beispiel wird die Tabelle customer in der Datenbank testdata geöffnet. Für die Tabelle customer wird eine optimistische Tabellenpufferung gesetzt. Die Inhalte der Felder cust_id und company werden angezeigt. Anschließend wird der Inhalt des Feldes company durch die gepufferten Daten ersetzt.

Durch Aufruf von BEGIN TRANSACTION wird eine Transaktion gestartet. Mit Hilfe von TABLEUPDATE werden die Änderungen in die Tabelle geschrieben. Die neuen Inhalte werden angezeigt und durch den Aufruf von ROLLBACK werden die ursprünglichen Inhalte des company-Feldes wiederhergestellt. Die Felder cust_id und company werden erneut angezeigt, wobei das Feld company wieder seine ursprünglichen Werte enthält.

CLOSE DATABASES
CLEAR

* Transactions are only supported within a DBC
OPEN DATABASE (HOME(2) + 'Data\testdata')

SET MULTILOCKS ON      && Required for buffering

USE customer
=CURSORSETPROP("Buffering",5)
? 'The original company field'
LIST FIELDS cust_id, company NEXT 5
REPLACE ALL company WITH "***" && Change field contents

BEGIN TRANSACTION
   =TABLEUPDATE(.T.)
   GO TOP
   ? 'The modified company field'
   LIST FIELDS cust_id, company NEXT 5
ROLLBACK           && Restore original field contents

=TABLEREVERT(.T.)
GO TOP
? 'The restored company field'
LIST FIELDS cust_id, company NEXT 5

Siehe auch

BEGIN TRANSACTION | END TRANSACTION | TXNLEVEL( )