AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Transaktion nicht komplett zurückfahren
Thema durchsuchen
Ansicht
Themen-Optionen

Transaktion nicht komplett zurückfahren

Ein Thema von Hansa · begonnen am 27. Feb 2006 · letzter Beitrag vom 2. Mär 2006
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

Transaktion nicht komplett zurückfahren

  Alt 27. Feb 2006, 20:53
Datenbank: FB 1.5 • Zugriff über: FIBplus
Hi,

wie der Titel schon sagt : ich will eine Transaktion bis zu einem gewisssen Punkt (bzw. gesteuert auf diverse) zurückfahren. Der User kann an bestimmten Punkten etwas ändern, ohne komplett alles wegwerfen zu müssen. Wie weit er jetzt zurückgeht, das ist mir egal. 8) Je weiter zurück um so mehr Arbeit für den. Das geht ja auch mit FB 1.5. Ich müßte ja so was ähnliches wie nummerierte Breakpoints setzen und die Transaktion dann eben nur bis zur entsprechenden Stelle zurückfahren. Aber wie realisiere ich das mit Delphi programmgesteuert ? Geht das überhaupt ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Transaktion nicht komplett zurückfahren

  Alt 28. Feb 2006, 08:53
hi hansa,

ich bin zwar kein experte auf dem gebiet, aber mal so als gedanke: du könntest vielleicht deine transaktion verschachteln.
also innerhalb deiner transaktion werden bestimme statements wieder zu einer transaktion zusammengefasst und wenn was schiefgeht, könntest du an der stelle reagieren (zB mit einem commit der eltern-transaktion).

aeno
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Transaktion nicht komplett zurückfahren

  Alt 28. Feb 2006, 08:59
Ich glaube das war nicht Hansa's Problem, da FB seit 1,5 ja SQL-99 Savepoints kann ( also ein Zerlegung einer Transaktion in mehrere "Teil"-Transaktionen, die für sich comitted bzw. rollback'ed weden können).
Er interssiert sich eher, wie er das Ganze, bicht nur in SPs nutzen kann, sondern das von Delphi aus steuern kann.
Markus Kinzler
  Mit Zitat antworten Zitat
Frank Borland

Registriert seit: 12. Feb 2006
Ort: Hamburg
55 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: Transaktion nicht komplett zurückfahren

  Alt 28. Feb 2006, 10:37
die zu verwendenden Komponenten (z.B ibobjects) müssen die entsprechenden Funktionen der Firebird- API benutzen. Suche mal bei FIBplus nach CommitRetaining, RollbackRetaining und Konsorten.

Gruß


Malte
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: Transaktion nicht komplett zurückfahren

  Alt 28. Feb 2006, 12:42
Irgendwie wird das auch ohne diese Savepoints gehen, aber nicht so schön und einfach. Beispiel : Für eine Rechnung gebe ich viele Artikel ein. Gleichzeitig sollen Rückgaben gutgeschrieben werden. Bei den Rückgaben verhaue ich mich total (z.B. völlig falsche Rückgabe eingegeben, wegen verwechseltem Kunden) 8) Nun will ich alles rückgängig machen. Die Lieferung allerdings nicht !

Das Bsp. ist fiktiv und in der Realität noch verschachtelter. Mein Gedanke ist nun der : am Anfang direkt Transaction starten. An dem Punkt, an dem die Eingabe der Rückgaben erfolgt setze ich einen Savepoint. Und in dem konstruierten Fall wäre ich mit einem Rollback zurück bis zum Savepoint fein raus und bräuchte lediglich die Rückgabe neu einzugeben. Und der Witz an der Geschichte wäre ja, daß ich die Transaktionen 1:1 im Programm abbilden könnte. Für die Rückgaben bräuchte man nur ein eigenes Form und im FormShow wird der Savepoint gesetzt. Der Transaktions-Stand der DB würde dann überhaupt nicht mehr interessieren ! Im Source wäre alles klar zu erkennen. Wenn das so genial gehen sollte, dann mache ich das auch so.

Habe gedacht, jemand würde so was schon in der Praxis einsetzen. Ja, muß mir tatsächlich mal das Rollback genauer ansehen. Hätte ich das in FB zu integrieren, ich würde dem Rollback einen Parameter für Savepoint mitgeben. Mal suchen.

Edit : Tja, manchmal geht es schneller und zweitens, als man denkt. Die haben neue Prozeduren gemacht. Ähnlich wie ich geahnt habe :

RollbackToSavePoint (SavePointName) und
SetSavePoint (SavePointName)

Schwieriges / neues Thema und trotzdem schnell gelöst. *freu*
Gruß
Hansa
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: Transaktion nicht komplett zurückfahren

  Alt 2. Mär 2006, 12:10
Moin,

das ganze geht wie gewünscht. An geeigneter Stelle setzt man mit SetSavePoint (NAME); einen Savepoint. Genau bis zu dieser Stelle wird bei Bedarf alles mit RollBackToSavePoint (NAME); rückgängig gemacht. Für NAME natürlich keinen FB Identifier verwenden ! Von da an gehts dann wieder weiter und kann committed oder mit Rollback auch vollständig zurückgenommen werden. Der Rest steht in der Firebird Referenz. Geht man z.B. nicht auf den letzten Savepoint zurück, sondern auf den vorletzten, so ist auch der Letzte weg !

Allerdings ist das nun erstmalig ein konkreter Fall, daß IB <> FB und IBX <> ??? Denn Interbase unterstützt das alles erst ab 7.1 und in IBX ist auch nichts davon zu sehen (vielleicht gibts ein Update). Mit reinem Delphi 7 ist das so wohl nicht möglich. Oder es heißt ganz anders. In IBTransaction ist jedenfalls nichts zu finden.
Gruß
Hansa
  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 20:00 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