![]() |
Datenbank: Firebird • Version: 3.0 • Zugriff über: IBExpress
Datenmodul alle Queries in einem schliessen
Ich habe ein Datamodul mit vielen TIBQuery.
Nun möchte ich beim oncreate des Datamoduls alle Transactionen schliessen. Dazu habe mir folgenden Code vorgestellt ;-)
Delphi-Quellcode:
es wird fehlerfrei compiliert, aber gleich in der ersten Zeile mit dem ComponentCount bekomme ich
for i := 0 to Datenmodul.ComponentCount - 1 do
begin if Datenmodul.Components[i] is TIBQuery then begin AQuery := Datenmodul.Components[i] as TIBQuery; if Aquery.Transaction.InTransaction then AQuery.Transaction.Commit; end; end; end; eine AV Zugriffsverletzung. Funktioniert das evtl gar nicht im Datamodul? |
AW: Datenmodul alle Queries in einem schliessen
Ja,
im OnCreate macht das keinen Sinn. Die Transaktionen wurden doch noch gar nicht erzeugt, weil es das DataModul noch gar nicht gibt ... |
AW: Datenmodul alle Queries in einem schliessen
Beim OnCreate des DatenModuls ist die Variable DatenModul vermutlich noch nicht zugewiesen.
|
AW: Datenmodul alle Queries in einem schliessen
Ich benutze dafür lieber AfterConstruction:
Delphi-Quellcode:
Frank
type
TDMDeinDatenModul= class(TDataModule) ... public procedure AfterConstruction; override; ... implementation ... procedure TDMDeinDatenModul.AfterConstruction; begin inherited; // hier deinen Code end; |
AW: Datenmodul alle Queries in einem schliessen
Es würde ja schon reichen, Datenmodul wegzulassen. Self ist ja das Datenmodul, welches der Variable Datenmodul nach dem Create zugewiesen wird.
Delphi-Quellcode:
for i := 0 to ComponentCount - 1 do
begin if Components[i] is TIBQuery then begin AQuery := TIBQuery(Components[i]); if Aquery.Transaction.InTransaction then AQuery.Transaction.Commit; end; end; |
AW: Datenmodul alle Queries in einem schliessen
Ich frag mich nur, welchen Grund es geben kann, beim Create Transactions zu commiten. Hätte ich eher im BeforDestruction vermutet...
|
AW: Datenmodul alle Queries in einem schliessen
Zitat:
|
AW: Datenmodul alle Queries in einem schliessen
Zitat:
Wenn du dann Compilierst sind die immer noch offen. Und wenn du dann die Query schliesst und bei mir ist im AfterClose der Query das Commit oder CommitRetaining beim TIBDataset, dann kommt eben am Anfang das Commit nicht... Und dann arbeitest du teilweise mit nicht aktuellen Daten... Deshalb möchte ich sicher sein, dass erstmal alle Transaktionen inaktiv sind. |
AW: Datenmodul alle Queries in einem schliessen
Also, wenn in der Zeile "for i := 0 to Datenmodul.ComponentCount - 1" eine AV kommt, würde ich zuerst im Debugger Datamodul anzeigen lassen.
Das ist dann wahrscheinlich nil. Frank |
AW: Datenmodul alle Queries in einem schliessen
Zitat:
PS: Ich arbeite auch mit Transaktionen. Wenn mein Programm "abschmiert" wegen Blödsinn im Quelltext, sollten damit auch die Connections geschlossen sein. Und damit sollten die Transaktionen, die zu den Connections, gehörten auch weg sein...Das regelt die Datenbank selbst. :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:54 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-2025 by Thomas Breitkreuz