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 2 von 2     12   
josef-b

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

AW: Datenmodul alle Queries in einem schliessen

  Alt 28. Nov 2022, 19:18
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.
Wenn du aber z.B. mit Devexpress Komponenten arbeitetest, wie das TcxGrid musst du ja mal z.B. die Felder/Spalten auslesen aus der DB, wenn Du nicht alles im Code eingeben willst....Und dann vergisst man auch mal ab und zu die Datenmenge zu schliessen...vor dem compilieren..

zur Not gehts eben mit Copy and Paste..aber ich wollte es etwas eleganter machen...

Delphi-Quellcode:
with IBQuery1 do
  begin
  if transaction.InTransaction then transaction.Commit;
  end;

with IBquery2 do
  begin
  if transaction.InTransaction then transaction.Commit;
  end;
.........
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#12

AW: Datenmodul alle Queries in einem schliessen

  Alt 28. Nov 2022, 19:25
Connection.Active nutzen wir im Designer auch öfters, z.B. um Grids einrichten zu können.

Aber wir haben solche Properties wenigstens auf stored False gesetzt und Dergleichen, damit es nicht ins kompilierte Programm durchrauscht.



Wir haben nahrzu alle Kompnenten abgeleitet, für eigene Erweiterungen, solche Anpassungen und zentrale Bugfixes.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (28. Nov 2022 um 19:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

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

AW: Datenmodul alle Queries in einem schliessen

  Alt 28. Nov 2022, 20:11
Nur ein Lösungsansatz:

Das Datenmodul
Delphi-Quellcode:
unit DM_Datenmodul;

interface

uses
  System.SysUtils, System.Classes, Dm.Helper{helper - CommitAllTransactions};

type
  TDatenModul = class(TDataModule)
  public
    procedure AfterConstruction; override;
  end;

var
  Datenmodul: TDatenModul;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

{Hier sind alle Objekte erzeugt}
procedure TDatenModul.AfterConstruction;
begin
  inherited;
  CommitAllTransactions;
end;

end.

Eigene unit für die helper class
Delphi-Quellcode:
unit Dm.Helper;

interface

uses
  System.Classes, IBX.KeineAhnung;

type
  TDataModuleHelper = class helper for TDataModule
  public
    procedure CommitAllTransactions;
  end;

implementation

procedure TDataModuleHelper.CommitAllTransactions;
Var
  I: Integer;
  AQuery: TIBQuery;
begin
  for I := 0 to ComponentCount - 1 do
  begin
    if (Components[i] is TIBQuery) then
    begin
      AQuery := (Components[i] as TIBQuery);
      if AQuery.Transaction.InTransaction then
        AQuery.Transaction.Commit;
    end;
  end;
end;

end.
Damit kannst du das in allen Datenmodulen verwenden...
Frank Reim
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.889 Beiträge
 
Delphi 12 Athens
 
#14

AW: Datenmodul alle Queries in einem schliessen

  Alt 29. Nov 2022, 07:13
Ich mache sowas im Loaded der Connection. Abfragen, ob cssdesigning im Componentstate, wenn nicht, dann das Connected auf False.

Sollte sich auch im Loaded des Datamodule machen lassen.
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
675 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Datenmodul alle Queries in einem schliessen

  Alt 29. Nov 2022, 10:37
Ich denke, die IBConnection hat eine Property.. sowas wie DesignTimeConnected oder so, da ging es wohl darum, dass man zur Designzeit die connection und die Transaktionen offen haben kann, aber in Runtime wird sie nicht geöffnet. Zumindest UniConnection hat sowas wohl...

EDIT: Sehe gerade, dass IBQuery ja nicht zu IBDAC gehört, die heissen TIBCQuery... von daher geht das dann wohl eher nicht...

Geändert von MyRealName (29. Nov 2022 um 11:51 Uhr)
  Mit Zitat antworten Zitat
josef-b

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

AW: Datenmodul alle Queries in einem schliessen

  Alt 29. Nov 2022, 11:04
Nur ein Lösungsansatz:

Das Datenmodul
Delphi-Quellcode:
unit DM_Datenmodul;

interface

uses
  System.SysUtils, System.Classes, Dm.Helper{helper - CommitAllTransactions};

type
  TDatenModul = class(TDataModule)
  public
    procedure AfterConstruction; override;
  end;

var
  Datenmodul: TDatenModul;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

{Hier sind alle Objekte erzeugt}
procedure TDatenModul.AfterConstruction;
begin
  inherited;
  CommitAllTransactions;
end;

end.

Eigene unit für die helper class
Delphi-Quellcode:
unit Dm.Helper;

interface

uses
  System.Classes, IBX.KeineAhnung;

type
  TDataModuleHelper = class helper for TDataModule
  public
    procedure CommitAllTransactions;
  end;

implementation

procedure TDataModuleHelper.CommitAllTransactions;
Var
  I: Integer;
  AQuery: TIBQuery;
begin
  for I := 0 to ComponentCount - 1 do
  begin
    if (Components[i] is TIBQuery) then
    begin
      AQuery := (Components[i] as TIBQuery);
      if AQuery.Transaction.InTransaction then
        AQuery.Transaction.Commit;
    end;
  end;
end;

end.
Damit kannst du das in allen Datenmodulen verwenden...
Ich habe das jetzt genauso gemacht. Läuft prima. Vielen Dank dafür..
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 18:27 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