BEGIN TRANSACTION-Befehl

Beginnt eine Transaktion. Transaktionen werden nur für Tabellen in Datenbanken unterstützt. Informationen zum Erstellen von Tabellen und Hinzufügen von Tabellen zu Datenbanken finden Sie unter CREATE DATABASE und ADD TABLE.

BEGIN TRANSACTION

Hinweise

Mit Hilfe von END TRANSACTION speichern Sie die vorgenommenen Änderungen und beenden die Transaktion. Scheitert die Transaktion (weil der Server oder der Arbeitsplatzcomputer abstürzt oder weil Sie Visual FoxPro beenden, ohne die Transaktion zu übergeben), oder rufen Sie ROLLBACK auf, werden die an der Transaktion beteiligten Dateien wieder in ihren früheren Zustand versetzt.

Transaktionen können bis zu fünf Ebenen tief geschachtelt werden. Wenn Sie versuchen, eine sechste Verschachtelungsebene zu verwenden, wird ein Fehler generiert.

Wenn Sie Datensätze in einer Tabelle ä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 diese die Meldung Datensatz nicht verfügbar … Bitte warten. Aus diesem Grund sollten Transaktionen so kurz wie möglich gehalten werden oder zu Zeiten geringer Datenbanknutzung ausgeführt werden.

Die folgenden Befehle und Funktion werden während Transaktionen nicht unterstützt:

Befehle und Funktionen  
ADD TABLE DELETE CONNECTION
APPEND PROCEDURES DELETE DATABASE
CLEAR ALL DELETE TRIGGER
CLOSE ALL1 DELETE VIEW
CLOSE DATABASES1 MODIFY CONNECTION
COPY INDEXES MODIFY DATABASE
COPY PROCEDURES MODIFY PROCEDURE
CREATE CONNECTION MODIFY VIEW
CREATE DATABASE REMOVE TABLE
CREATE TRIGGER RENAME TABLE
CREATE VIEW REQUERY( )
CREATE SQL VIEW  

1 Wird während einer aktiven Transaktion CLOSE ALL abgesetzt, werden alle Tabellen in allen offenen Datenbanken geschlossen. Die Datenbanken selbst bleiben jedoch geöffnet. Wird während einer aktiven Transaktion CLOSE DATABASES abgesetzt, werden alle Tabellen der aktuellen Datenbank geschlossen, die Datenbank bleibt jedoch geöffnet.

Für an einer Transaktion beteiligte Tabellen können die folgenden Befehle und Funktionen nicht verwendet werden:

Befehle und Funktionen  
ALTER TABLE MODIFY STRUCTURE
CREATE TABLE PACK
CURSORSETPROP( ) REINDEX
DELETE TAG TABLEREVERT( )
INDEX ZAP
INSERT  

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 mit den gepufferten Daten ersetzt.

Durch Aufrufen von BEGIN TRANSACTION wird eine Transaktion gestartet. Die TABLEUPDATE( )-Funktion wird verwendet, um die Veränderungen in der Tabelle zu speichern. 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.

CLEAR
CLOSE DATABASES

* 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

END TRANSACTION | ROLLBACK | TXNLEVEL( )-Funktion