COMMIT;
COMMIT
Beendet die aktuelle Schreibtransaktion.
Hinweise
Als COMMIT bezeichnet man bei Datenbanken den erfolgreichen Abschluss einer Transaktion. Das Ergebnis der Verarbeitungsschritte wird, in der Regel durch die SQL-Funktion COMMIT, dauerhaft gespeichert. Im Gegensatz dazu werden alle Einzelschritte einer Transaktion bei einem Rollback zurückgesetzt und setzt das System in den Ausgangszustand zurück. Ein Rollback findet in Dynamics NAV statt, sobald ein Fehler während der Verarbeitung auftritt.
Ohne einen expliziten Aufruf der COMMIT-Funktion im C/AL Code, findet ein COMMIT erst statt, nachdem der gesamte Code durchlaufen wurde.
Ist die Durchführung mehrerer Transaktionen erforderlich, dann muss die COMMIT-Funktion verwendet werden um eine Transaktion zu beenden, bevor die nächste gestartet werden kann. Tritt ein Fehler während der zweiten Transaktion auf, dann findet lediglich für die zweite Transaktion ein Rollback statt. Alle Änderungen durch die erste Transaktion bleiben somit erhalten.
Um daher inkonsistenten Daten vorzubeugen, ist die bedachte Verwendung der COMMIT-Funktion von großer Bedeutung. Wird beispielsweise ein COMMIT zwischen der Löschung von Verkaufskopf und Verkaufszeilen verwendet und es tritt ein Fehler während der Löschung der Verkaufszeilen auf, bleiben Verkaufszeilen bestehen, obwohl der Verkaufskopf bereits gelöscht wurde.
Zusätzlich sorgt ein COMMIT mit dem Abschluss einer Transaktion auch dazu, dass alle Tabellensperrungen aufgehoben werden. Wird ein Datensatz neu angelegt oder modifiziert, gilt für diesen Datensatz eine Sperre. Wird diese Transaktion durch ein COMMIT abgeschlossen, so kann eine weitere Person diesen Datensatz wieder bearbeiten, auch wenn der Datensatz in einer zweiten Transaktion erneut bearbeitet werden soll. Wird der Datensatz in der zweiten Transaktion nicht erneut aus der Tabelle gelesen, erscheint eine entsprechende Fehlermeldung, dass ein anderer Anwender den Datensatz in der Zwischenzeit angepasst hat. Dies wird durch Beispiel 3 veranschaulicht.
Beispiel 1
Folgender Pseudo-Code veranschaulicht die praktische Anwendung.
BeginWriteTransactions (C/AL Statements) // Schreibtransaktion 1 COMMIT (C/AL Statements) // Schreibtransaktion 2 EndWriteTransactions
Zu Beginn wird automatisch eine Schreibtransaktion gestartet. Mit der COMMIT-Funktion beenden Sie die erste Schreibtransaktion und bereiten sich auf die zweite vor. Wenn der Code abgeschlossen ist, wird die zweite Schreibtransaktion automatisch beendet.
Beispiel 2
Zunächst wird eine neue Variable hinterlegt.
Name | Datentyp | Subtyp |
---|---|---|
Item | Record | Item |
Anschließend wird folgender C/AL-Code eingefügt.
WITH Item DO BEGIN INIT; Description := 'Vor dem Commit'; INSERT(TRUE); COMMIT; Description := 'Nach dem Commit'; MODIFY(TRUE); ERROR('Laufzeitfehler'); END;
Sobald der Code ausgeführt wird, erscheint das folgende Ergebnis.
Hieran ist zu erkennen, dass durch die Ausführung der COMMIT-Funktion das Einfügen des Artikels trotz anschließender Fehlermeldung erhalten bleibt. Alle Änderungen nach dem COMMIT wurden durch das Rollback zurückgesetzt.
Beispiel 3
Zunächst wird eine neue Variable hinterlegt.
Name | Datentyp | Subtyp |
---|---|---|
Item | Record | Item |
Anschließend wird folgender C/AL-Code eingefügt und ausgeführt:
WITH Item DO BEGIN INIT; "No." := '142142'; INSERT; Description := 'Test Neu'; MODIFY; COMMIT; IF NOT CONFIRM('Warten auf zweiten Benutzer') THEN EXIT; Description := 'Test unerreichbar'; MODIFY; END;
Anschließend wird folgender C/AL-Code in einer separaten Codeunit mit derselben Variable eingefügt und ausgeführt sobald „Warten auf zweiten Benutzer“ angezeigt wird.
WITH Item DO BEGIN GET('142142'); Description := 'Modifizierung durch zweiten Benutzer'; MODIFY; END;