AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?
Thema durchsuchen
Ansicht
Themen-Optionen

DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?

Ein Thema von RSE · begonnen am 11. Jul 2012 · letzter Beitrag vom 13. Jul 2012
Antwort Antwort
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#1

AW: DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?

  Alt 11. Jul 2012, 22:08
TSQLConnection hat eine Eigenschaft MultipleTransactionsSupported, die stark darauf schließen lässt, dass man mit mehreren Transaktionen gleichzeitig arbeiten kann.
Vermutlich nur wenn sie den Wert True hat.
Logisch. Hat sie bei meiner Verbindung zu Firebird. Ich meinte dbExpress kann grundsätzlich damit umgehen.

TSQLConnection.BeginTransaction arbeitet mit einem TDBXTransaction Objekt, und jede Transaktion hat eine eigene Instanz, damit können im Prinzip gleichzeitige Transaktionen auf der gleichen Connection ausgeführt werden.
Soweit war mir das klar. Wie ich das TDBXTransaction-Objekt mit einer Transaktion zu benutzen habe, ist mir auch klar. Was mir nicht klar ist: Wie kann ich eine Operation einer Transaktion zuordnen? Bei anderen Komponenten muss man bei den DataSets die Transaktion angeben, damit gehören dann die mit dem DataSet ausgeführten Operationen zu der zugeordneten Transaktion. dbExpress hat aber keine solche Eigenschaft in den DataSets.

Verschachtelte Transaktionen können verwendet werden, wenn SupportsNestedTransactions true ist. Wenn ein Unterformular eine weitere Transaktion startet während die Mainform bereits eine begonnen hat, ist wahrscheinlich Support für verschachtelte Transaktionen notwendig.
Um verschachtelte Transaktionen geht es mir hier nicht. Ich redete von zwei gleichberechtigten nichtmodalen Fenstern, die nebeneinander offen sein können und deren Transaktionen unabhängig voneinander sind. Genau dazu schweigt die Hilfe leider.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.599 Beiträge
 
Delphi 12 Athens
 
#2

AW: DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?

  Alt 12. Jul 2012, 00:22
Ich redete von zwei gleichberechtigten nichtmodalen Fenstern, die nebeneinander offen sein können und deren Transaktionen unabhängig voneinander sind.
TSQLConnection.BeginTransaction liefert dir eine TDBXTransaction zurück, die du beim zugehörigen CommitFreeAndNil bzw. RollBackFreeAndNil wieder übergeben musst.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#3

AW: DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?

  Alt 12. Jul 2012, 09:29
Ich redete von zwei gleichberechtigten nichtmodalen Fenstern, die nebeneinander offen sein können und deren Transaktionen unabhängig voneinander sind.
TSQLConnection.BeginTransaction liefert dir eine TDBXTransaction zurück, die du beim zugehörigen CommitFreeAndNil bzw. RollBackFreeAndNil wieder übergeben musst.
So weit, so klar, nur bei folgendem Quelltext (untested) ist die Zuordnung Transaktion - Operation in meinen Augen nicht möglich.
Delphi-Quellcode:
TA1 := Conn.BeginTransaction;
TA2 := Conn.BeginTransaction;
DataSet1.Open; // TA1
u := DataSet1.FieldByName('USER_ID').AsInteger; // TA1
DataSet1.Close; // TA1
DataSet2.Open; // TA2
DataSet1.FieldByName('USER_ID').AsInteger := u; // TA2
DataSet2.Post; // TA2
DataSet2.Close; // TA2
Conn.RollbackFreeAndNil(TA1);
Conn.CommitFreeAndNil(TA2);
Bitte keine neue Diskussion über den Sinn dieser Operation und die Aufteilung in 2 Transaktionen, es ist lediglich ein Beispiel zur Veranschaulichung. Ich wollte mir keine 2 Seiten Code ausdenken, um einen tatsächlichen (undurchsichtigen) Fall zu konstruieren.

Wie ist es bei obigem Quelltext möglich, die Operationen den Transaktionen zuzuordnen?
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.599 Beiträge
 
Delphi 12 Athens
 
#4

AW: DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?

  Alt 12. Jul 2012, 10:17
Wie ist es bei obigem Quelltext möglich, die Operationen den Transaktionen zuzuordnen?
Ich vermute, das ist (noch) nicht vollständig implementiert. Die Hilfe sagt dazu

Zitat:
Bei der Arbeit mit mehreren Transaktionen können Sie die Transaktion, zu der eine Datenmenge gehört, dadurch angeben, dass Sie der Eigenschaft TransactionLevel den beim Aufruf dieser Methode verwendeten Transaktionsbezeichner zuweisen.
Dummerweise gibt es dieses Property aber in XE2 gar nicht mehr! Einen adäquaten Ersatz konnte ich zumindest auch nicht finden. Ich sehe hier im Moment also keine Möglichkeit, überlappende Transaktionen zu verwenden, sondern lediglich ineinander verschachtelte.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#5

AW: DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?

  Alt 12. Jul 2012, 10:37
Das hatte ich auch gefunden, gehört zu einem als deprecated gekennzeichneten Verfahren der Transaktionssteuerung mit StartTransaction.

Edit: Wie verschachtelte Transaktionen zugeordnet werden, ist auch nicht explizit in der Hilfe gesagt. Man kann nur vermuten, dass jede Operation immer der zuletzt gestarteten und noch nicht beendeten Transaktion zugeordnet wird. Oder zählt der Zeitpunkt des Öffnens des DataSets??? Hier ist dringender Dokumentationsbedarf und offenbar auch Nachbesserungsbedarf seitens Embarcadero vorhanden.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."

Geändert von RSE (12. Jul 2012 um 10:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.599 Beiträge
 
Delphi 12 Athens
 
#6

AW: DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?

  Alt 12. Jul 2012, 10:58
Das hatte ich auch gefunden, gehört zu einem als deprecated gekennzeichneten Verfahren der Transaktionssteuerung mit StartTransaction.
Deprecated ist hier irreführend - wird nicht verwendet entspricht eher der Realität.

Edit: Wie verschachtelte Transaktionen zugeordnet werden, ist auch nicht explizit in der Hilfe gesagt. Man kann nur vermuten, dass jede Operation immer der zuletzt gestarteten und noch nicht beendeten Transaktion zugeordnet wird. Oder zählt der Zeitpunkt des Öffnens des DataSets???
Bei überlappenden Transaktionen wird standardmäßig die erste Transaktion deaktiviert, sobald die zweite Transaktion gestartet wird, obwohl Sie das Festschreiben oder Rückgängigmachen der ersten Transaktion auf später verschieben können.

Ich interpretiere das so, daß nach einem zweiten BeginTransaction diese neue Transaktion für alle Operationen bis zum zugehörigen Commit oder Rollback bzw. einem nochmaligen BeginTransaction verwendet wird. Man kann aber das Commit oder Rollback für die alte Transaktion wohl auch irgendwann machen. Das eigentliche Handling der Transaktionen geschieht sowieso im verwendeten Treiber und ist stark von der darunterliegenden Datenbank abhängig.

Hier ist dringender Dokumentationsbedarf und offenbar auch Nachbesserungsbedarf seitens Embarcadero vorhanden.
Das sehe ich auch so!
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#7

AW: DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?

  Alt 13. Jul 2012, 16:22
Ich halte somit als Antwort fest: Embarcadero hat das nicht in letzter Konsequenz umgesetzt bzw. nicht dokumentiert.

Damit sehe ich die Frage als beantwortet an.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  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 07:48 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 by Thomas Breitkreuz