AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MS SQL Server: Transaktionen rückgängich machen???
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von romber · begonnen am 21. Jan 2010 · letzter Beitrag vom 22. Jan 2010
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#1

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

  Alt 21. Jan 2010, 12:40
Datenbank: MS SQL Server • Version: 2008 • Zugriff über: ADO
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 21. Jan 2010, 12:46
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?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#3

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

  Alt 21. Jan 2010, 13:07
Vielen Dank für die schnelle Reaktion!

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 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.
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#4

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

  Alt 21. Jan 2010, 14:21
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

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

  Alt 21. Jan 2010, 14:24
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#6

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

  Alt 22. Jan 2010, 06:23
Hallo,

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

Zu den Transaktionen ist ja in #5 alles gesagt.


Heiko
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 22. Jan 2010, 06:54
Du kannst zudem nach dem 1. Teil einen SavePoint erstellen und so die Gesamttransaktion aufteilen
Markus Kinzler
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#8

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

  Alt 22. Jan 2010, 11:56
Ich habe so viele klevere Vorschläge hier gelesen, versuche meine Code entsprechend zu überbearbeiten und melde mich wieder.

Vielen Dank!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz