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