Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MS SQL Server: Transaktionen rückgängich machen??? (https://www.delphipraxis.net/146509-ms-sql-server-transaktionen-rueckgaengich-machen.html)

romber 21. Jan 2010 12:40

Datenbank: MS SQL Server • Version: 2008 • Zugriff über: ADO

MS SQL Server: Transaktionen rückgängich machen???
 
Hallo!

Ich habe einen Dienst erstellt, der mit TADOQuery auf eine Tabelle in MS SQL Server zugreift und die Daten ändert. Jede Änderung wird in einer anderen Tabelle protokolliert. Nun möchte ich auch eine Möglichkeit haben, jede Transaktion, die mein Dienst ausgeführt hat, auch rückgängig zu machen.
Wie mache ich das am besten?

Ich habe gehört, MS SQL Server vergibt jeder Transaktion eine Nummer. Mit dieser Nummer sollte zumindest jede ausgeführte Transaktion rückgängig gemacht werden. Kann ich vielleicht die Transaktionsnummer vom jeden Änderungsvorgang irgendwie herausbekommen? Dann kann ich diese Nummer im Protokoll speichern und den geänderten Datensatz jederzeit wiederherstellen, wenn das nötig ist.

Bernhard Geyer 21. Jan 2010 12:46

Re: MS SQL Server: Transaktionen rückgängich machen???
 
Zitat:

Zitat von romber
Ich habe einen Dienst erstellt, der mit TADOQuery auf eine Tabelle in MS SQL Server zugreift und die Daten ändert. Jede Änderung wird in einer anderen Tabelle protokolliert. Nun möchte ich auch eine Möglichkeit haben, jede Transaktion, die mein Dienst ausgeführt hat, auch rückgängig zu machen.

Und wie willst du sicher sein das nicht spätere Transaktionen auf diese Transaktion basiert haben?

Wenn du Daten änderst, wieso ist es denn nötig diese Änderung nach Abschluss der Transaktion wieder zurück zu ändern?

romber 21. Jan 2010 13:07

Re: MS SQL Server: Transaktionen rückgängich machen???
 
Vielen Dank für die schnelle Reaktion!

Zitat:

Zitat von Bernhard Geyer
Und wie willst du sicher sein das nicht spätere Transaktionen auf diese Transaktion basiert haben?

Der Dienst führt die Änderungen in zwei Schritten durch. Im ersten Schritt wird der bestehende Vertrag in der Tabelle "VERTRAEGE" verlängert. Im zweiten Schritt werden neue Raten für den gerade verlängerten Vertrag generiert und in die Tabelle "RATEN" hinzufügt. Beide Schritte werden protokolliert. Ich prüfe zuerst, ob Schritt #1 erfolgreich ausgeführt wurde und führe dann den Schritt #2 durch. Wenn der Schritt #2 fehlschlägt, muss ich den Schritt #1 auch rückgängig machen.
Von diesen zwei Tabellen sind sonnst keine andere Tabellen abhängig.

Zitat:

Zitat von Bernhard Geyer
Wenn du Daten änderst, wieso ist es denn nötig diese Änderung nach Abschluss der Transaktion wieder zurück zu ändern?

Der Dienst analysiert die dynamisch erstellte Informationen und ändert die Daten völlig selbsständig. Solange ich nicht 100%-ig sicher bin, dass ich alles glatt läuft, will ich eine Mögichkeit haben, die Änderungen auch zurück zu spielen.

WoGe 21. Jan 2010 14:21

Re: MS SQL Server: Transaktionen rückgängich machen???
 
Zitat:

Zitat von romber
Der Dienst führt die Änderungen in zwei Schritten durch. Im ersten Schritt wird der bestehende Vertrag in der Tabelle "VERTRAEGE" verlängert. Im zweiten Schritt werden neue Raten für den gerade verlängerten Vertrag generiert und in die Tabelle "RATEN" hinzufügt.

Dein Weg scheint ja gangbar zu sein, aber mir wäre die Historie des Vertrages auch wichtig. Deswegen würde ich die bestehenden Daten garnicht ändern, sondern einen Neuen hinzufügen. Der repräsentiert dann den Aktuellen Vertragszustand. - und - eine Rücknahme der Änderung wäre sehr einfach zu realisieren.

Gruss wo

Bernhard Geyer 21. Jan 2010 14:24

Re: MS SQL Server: Transaktionen rückgängich machen???
 
Zitat:

Zitat von romber
Beide Schritte werden protokolliert. Ich prüfe zuerst, ob Schritt #1 erfolgreich ausgeführt wurde und führe dann den Schritt #2 durch. Wenn der Schritt #2 fehlschlägt, muss ich den Schritt #1 auch rückgängig machen.

Und was spricht dagegen beide Aktionen in einer Transaktion ablaufen zu lassen? Das Logging lässt du über eine 2te DB-Connection laufen so das hier die lange Transaktion nicht wirkt.

hoika 22. Jan 2010 06:23

Re: MS SQL Server: Transaktionen rückgängich machen???
 
Hallo,

und im neuen Vertrag einfach eine Referenz auf den alten setzen.

Zu den Transaktionen ist ja in #5 alles gesagt.


Heiko

mkinzler 22. Jan 2010 06:54

Re: MS SQL Server: Transaktionen rückgängich machen???
 
Du kannst zudem nach dem 1. Teil einen SavePoint erstellen und so die Gesamttransaktion aufteilen

romber 22. Jan 2010 11:56

Re: MS SQL Server: Transaktionen rückgängich machen???
 
Ich habe so viele klevere Vorschläge hier gelesen, versuche meine Code entsprechend zu überbearbeiten und melde mich wieder.

Vielen Dank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz