![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: dbExpress
DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?
Hallo,
ich versuche mich gerade in die dbExpress-Komponenten unter Delphi XE Enterprise einzulesen. TSQLConnection hat eine Eigenschaft MultipleTransactionsSupported, die stark darauf schließen lässt, dass man mit mehreren Transaktionen gleichzeitig arbeiten kann. Mit TSQLConnection.StartTransaction und TCustomSQLDataSet.TransactionLevel könnte ich mir ungefähr vorstellen, wie das funktionieren könnte, aber TSQLConnection.StartTransaction ist deprecated. Der Ersatz ist TSQLConnection.BeginTransaction. Dafür ist es mir allerdings seit Stunden nicht gelungen herauszubekommen, wie mehrere Transaktionen gehandelt werden. Beispielfall: Ich habe 2 Fenster, die gleichzeitig offen sein können, in jedem soll eine eigene Transaktion durchgeführt werden (die offen bleibt, während der User Daten eingibt - bad practice, aber anschaulich) und diese Transaktionen sollen über die gleiche Verbindung laufen. Wie ist das zu bewerkstelligen? |
AW: DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?
Zitat:
Führe die Transaktion mit allen Daten durch wenn das Formular geschlossen bzw. "Applied" wird. Dann brauchst du auch nur eine gleichzeitige Transaktion. |
AW: DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?
Mir ist bekannt, dass das ein schlechtes Beispiel ist, aber es ist anschaulich. Ich möchte einfach wissen, wie man eine zweite unabhängige Transaktion über die gleiche Connection mit dbExpress handelt. Stelle dir vor, die zwei Formulare laufen in unterschiedlichen Threads und beide werden gleichzeitig bestätigt (wieder schlechtes Beispiel, bestimmt braucht jeder Thread seine eigene Connection) oder irgendwas anderes, bei dem man nicht sicher sein kann, dass nicht schon eine andere Transaktion gerade am Laufen ist. Ich möchte nicht jedesnal prüfen, ob vielleicht schon was läuft und dann überlegen wie ich diesen seltenen Fall abfangen kann... Auch während der Transaktion können Windows Messages verarbeitet werden, die u.U. eine weitere Transaktion triggern und dann will ich es nicht extra abfangen müssen.
|
AW: DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?
Zitat:
TSQLConnection.BeginTransaction arbeitet mit einem ![]() 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. |
AW: DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?
Zitat:
Zitat:
Zitat:
|
AW: DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?
Zitat:
|
AW: DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?
Zitat:
Delphi-Quellcode:
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.
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); Wie ist es bei obigem Quelltext möglich, die Operationen den Transaktionen zuzuordnen? |
AW: DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?
Zitat:
Zitat:
|
AW: DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?
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. |
AW: DBExpress: Wie mehrere Transaktionen gleichzeitig handeln?
Zitat:
Zitat:
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. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:36 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