AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenmodul alle Queries in einem schliessen
Thema durchsuchen
Ansicht
Themen-Optionen

Datenmodul alle Queries in einem schliessen

Ein Thema von josef-b · begonnen am 27. Nov 2022 · letzter Beitrag vom 29. Nov 2022
Antwort Antwort
Seite 1 von 2  1 2      
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#1

Datenmodul alle Queries in einem schliessen

  Alt 27. Nov 2022, 18:37
Datenbank: Firebird • Version: 3.0 • Zugriff über: IBExpress
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:
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;
es wird fehlerfrei compiliert, aber gleich in der ersten Zeile mit dem ComponentCount bekomme ich
eine AV Zugriffsverletzung.

Funktioniert das evtl gar nicht im Datamodul?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Datenmodul alle Queries in einem schliessen

  Alt 27. Nov 2022, 19:02
Ja,
im OnCreate macht das keinen Sinn.
Die Transaktionen wurden doch noch gar nicht erzeugt,
weil es das DataModul noch gar nicht gibt ...
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#3

AW: Datenmodul alle Queries in einem schliessen

  Alt 27. Nov 2022, 19:58
Beim OnCreate des DatenModuls ist die Variable DatenModul vermutlich noch nicht zugewiesen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Datenmodul alle Queries in einem schliessen

  Alt 28. Nov 2022, 11:38
Ich benutze dafür lieber AfterConstruction:

Delphi-Quellcode:
type
  TDMDeinDatenModul= class(TDataModule)
  ...
  public
    procedure AfterConstruction; override;
  ...
implementation
  ...
procedure TDMDeinDatenModul.AfterConstruction;
begin
  inherited;
  // hier deinen Code
end;
Frank
Frank Reim
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#5

AW: Datenmodul alle Queries in einem schliessen

  Alt 28. Nov 2022, 11:44
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;
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Datenmodul alle Queries in einem schliessen

  Alt 28. Nov 2022, 11:50
Ich frag mich nur, welchen Grund es geben kann, beim Create Transactions zu commiten. Hätte ich eher im BeforDestruction vermutet...
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#7

AW: Datenmodul alle Queries in einem schliessen

  Alt 28. Nov 2022, 12:30
Es würde ja schon reichen, Datenmodul wegzulassen. Self ist ja das Datenmodul, welches der Variable Datenmodul nach dem Create zugewiesen wird.
Das gilt aber nur, wenn der Eventhandler auch in dem Datenmodul liegt. Er kann aber auch in jeder anderen Objektinstanz verdrahtet sein. Dann wäre Sender die bessere Alternative, wenn auch mit einem Cast.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Datenmodul alle Queries in einem schliessen

  Alt 28. Nov 2022, 16:05
Ich frag mich nur, welchen Grund es geben kann, beim Create Transactions zu commiten. Hätte ich eher im BeforDestruction vermutet...
Das möchte ich machen, weil man manchmal in der Entwicklungs-Zeit die Transaktionen offen hat, obwohl die Query geschlossen ist.

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.
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Datenmodul alle Queries in einem schliessen

  Alt 28. Nov 2022, 16:19
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
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#10

AW: Datenmodul alle Queries in einem schliessen

  Alt 28. Nov 2022, 17:27
Zitat:
weil man manchmal in der Entwicklungs-Zeit die Transaktionen offen hat
...Sorry, in der Entwicklung (OI) Connection.Active = True , ist aber imho ein NoGo.

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.

Geändert von haentschman (28. Nov 2022 um 17:29 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz