Einzelnen Beitrag anzeigen

alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#16

Re: [Firebild] Änderungen nach Insert gehen verloren

  Alt 4. Jul 2007, 14:00
Hi,

Eine Transaktion ist in erster Linie eine "Sicht" auf die Daten.
Ein Select-Statements ist genauso an eine Transaktion gebunden wie ein
Insert/Update/Delete.
Die Datenmenge eines Select-Statements ist damit nur solange existent wie die Transaktion besteht.
Habe ich innerhalb ein und der selben Transaktion eine offene Datenmenge in Form eines TIBDataSet/TIBTable und
setzte ein Insert/Update/Delete-Stetment ab, welches durch ein Commit bestätigt wird, so ist die Transaktion beendet.
Damit ist auch Datenmenge im TIBDataSet/TIBTable nicht mehr gültig und TIBDataSet/TIBTable werden geschlossen.
Das gilt für alle Komponenten.


Zitat von BlueStarHH:
OK, wenn das generell so ist, muss es doch auch eine einfache Möglichkeit geben, den Datensatz auszuwählen der vor einem Commit ausgewält war, wenn die Datenmenge wieder geöffnet wird.
Du mußt dir nur die ID des Satzes merken und nach dem erneuten Öffnen mit Locate zu diesem Satz gehen.
Für einen neuen Datensatz benötigts du die ID natürlich noch vor dem Insert.
Wie das geht, siehe hier, Punkt 3.


Zitat von nachti1505:
Zumindest auch bei der FIBPlus DataSet-Komponente von Devrace....
Transaction.Commit Schließt alle an der Transaktion hängenden DataSets....
Transaction.CommitRetaining Lässt die DataSets offen... ist aber imho kein gelungener Programmierstil
FIBPlus-DataSets verwenden für das Lesen und Schreiben zwei verschiedene Transaktionen.
Die Schreib-Transaktion ist nur für den Moment des Scheibens aktiv und wird sofort mit einem HardCommit bestätigt.
CommitRetaining wird NICHT verwendet.
Das DataSet ist weiter offen da es unter der Lese-Tranaktion läuft.


alex
Alexander
  Mit Zitat antworten Zitat