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