Registriert seit: 18. Nov 2003
Ort: Uetersen
271 Beiträge
Delphi 2005 Architect
|
Re: TIBTransaction.Commit schließt Datenverbindung?
17. Apr 2005, 08:16
Du solltest Dir das Konzept von Transaktionen verinnerlichen. Die IBX Komponenten stellen Dir immer Live Daten zur Verfügung.
Wenn Du Deine Änderungen nun mit Commit bestätigst werden diese in die Datenbank geschrieben. Danach sind Deine (sichtbaren) Daten nicht mehr gültig.
Durch das Setzen von Active := True in Deinen DataSet machst Du nichts anderes als eine neue Transaktion zu starten.
CommitRetaining ist eine Möglichkeit, wenn auch nicht die sauberste. Hintergrund: Es wird ebenfalls eine neue Transaktion gestartet, allerdings mit der gleichen internen ID wie die Original-Transaktion. Solange Du diese nicht mit einem richtigen Commit bestätigst ist diese auf dem Server noch offen. Der Aufräumdienst (Garbage Collector) von Interbase/Firebird wird diese Transaktion daher nicht entfernen. Wenn dies nun viele Anwendungen machen wird Dein Server irgendwann in die Knie gehen. Ein Rollback macht übrigens nur die Änderungen bis zum vorherigen CommitRetaining rückgängig. Daher scheint mir ein sinnvoller Einsatz nur für Interbase/Firebird Installationen sinnvoll die noch keine Savepoints unterstützen.
Besser sind Komponenten die im Unidirektionalen Modus arbeiten. Zuerst die Daten per SELECT lesen und lokal speichern, statt die Transaktion offen zu halten. Änderungen werden dann per UPDATE oder INSERT in einer neuen Transaktion gespeichert. Schau Dir doch mal die dbExpress Komponenten und das ClientDataSet an, die arbeiten mit unidirektionalen Verbindungen.
Gruß,
Marcel
Marcel Gascoyne Der Fehler sitzt immer vor der Tastatur
|