Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Woher kommt globale Variable für Datenmodule (https://www.delphipraxis.net/172481-woher-kommt-globale-variable-fuer-datenmodule.html)

dataspider 6. Jan 2013 15:14

Woher kommt globale Variable für Datenmodule
 
Hallo,

ich bräuchte etwas Aufklärung.
Ich mach gerade ein umfangreiches Refactoring einen Fremdprojektes.
Hier sind zur Entwurfszeit z.B. Grids mit DataSource aus einem DataModule verbunden.

Was ich nich ganz begreife :oops: ist:

Wenn ich ein DataModule habe: TDMKunde und die globale Variable DMKunde: TDMKunde in der Unit des DM lösche,
woher nimmt der Designer das DMKunde?

In der dfm stehft immer noch z.B. DataSource = DMKunde.qryKunde, und im Designer kann ich es noch genauso auswählen...
Es funktioniert auch, aber DMKunde gibt es doch eigentlich nicht.

Der einzige Hinweis ist in der DPR, aber in den geschweiften Klammern.

Kann mir das jemand erklären?

Frank

mkinzler 6. Jan 2013 15:20

AW: Woher kommt globale Variable für Datenmodule
 
Funktioniert es auch im kompiliertem Programm?

dataspider 6. Jan 2013 15:23

AW: Woher kommt globale Variable für Datenmodule
 
Zitat:

Zitat von mkinzler (Beitrag 1197981)
Funktioniert es auch im kompiliertem Programm?

Ja, das ist ja das Witzige.

mkinzler 6. Jan 2013 15:30

AW: Woher kommt globale Variable für Datenmodule
 
Auch beim kompletten Rebuild?

dataspider 6. Jan 2013 15:34

AW: Woher kommt globale Variable für Datenmodule
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von mkinzler (Beitrag 1197985)
Auch beim kompletten Rebuild?

Natürlich...

Frank

Hab mal ein Beispiel angehangen...

[EDIT]
Hab grad gesehen, in der DFM steht:
object DBAdresse: TDBAdresse

Jetzt weiss ich trotzdem noch nicht, wie er das richtige DataModule findet.
[/EDIT]

stahli 6. Jan 2013 15:49

AW: Woher kommt globale Variable für Datenmodule
 
Das Thema hatten wir schon mal (finde es aber nicht so schnell).

Ungefähr so müsste es passen:
Die IDE kennt die Formulare und die DataModules und versucht, die Verknüpfungen nach dem Laden über FindComponent aufzulösen.
Dazu ist eine Variablendeklaration in der Unit nicht notwendig.

dataspider 6. Jan 2013 16:01

AW: Woher kommt globale Variable für Datenmodule
 
Hi, Danke schon mal.

Bis jetzt ist es kein Problem, da Formular und dazugehöriges DataModule im Programm nur 1 Mal erzeugt werden können.

Das wollte ich nun ändern. Und ich möchte nur sichergehen, das die Zuweisungen aus der DFM immer das DataModule verwenden, welches ich in der Formular - Unit erzeugt habe.

Ich erzeuge das so:

Basis - Klasse:
Delphi-Quellcode:
class function TfrmAppBase.DataModuleClass: TDMBaseClass;
begin
  Result := Nil;
end;
...
procedure TfrmAppBase.AfterConstruction;
begin
  inherited;
  FGridStorage := nil;
  AppNotifier.AddListener(Self, [aeNewRecordInserted]);
  if (DataModuleClass <> nil) and AutoCreateDataModule then
    CreateDataModule;
end;
...
procedure TfrmAppBase.CreateDataModule;
begin
  assert(DataModuleClass <> nil, 'DataModulclass ist NIL');
  FDM := DataModuleClass.GetInstance(Self);
  AfterDataModuleCreated;
  UpdateRights;
  CheckDBControlsDataSource;
  FDM.Init;
end;
In jedem Formular verweist das Propertie DM auf das DataModule.

Wenn nun in der Grid für DataSource DMKunde.dsKunde steht, kann ich dann davon ausgehen, dass er mein im Form erzeugtes DM referenziert?

Frank

Uwe Raabe 6. Jan 2013 21:04

AW: Woher kommt globale Variable für Datenmodule
 
Die globale Variable wird nur benötigt, wenn sie irgendwo im Quelltext angesprochen wird (z.B. in der dpr). Beim Laden der Forms und Datenmodule wird ein anderer Mechanismus verwendet, um die Referenzen auf die Instanzen zu finden. Wichtig ist nur, daß zumindest eine Instanz des Datenmoduls erzeugt wird.

Man beachte, daß das Datenmodul ja auch einen Namen hat, der dem der globalen Variablen entspricht.

Furtbichler 7. Jan 2013 06:10

AW: Woher kommt globale Variable für Datenmodule
 
Ja, aber wenn doch keine Instanz erzeugt wird?
Denn selbst die globale 'DMKunde' wird ja im Hauptprogramm per 'Applicatiom.CreateForm' erzeugt... und wenn die Deklaration entfernt wird (ich würde sie ja nur aus der autom. Erzeugung rausnehmen), dann sollte das doch nicht gehen.

Bei mir jedenfalls klappt das nicht,

Zitat:

Zitat von Uwe Raabe (Beitrag 1198038)
Man beachte, daß das Datenmodul ja auch einen Namen hat, der dem der globalen Variablen entspricht.

Wie soll das funktionieren, wenn die Deklaration entfernt wurde?

Oder geht es nur um den Designer?

dataspider 7. Jan 2013 06:24

AW: Woher kommt globale Variable für Datenmodule
 
Hallo,

ich habe den von Stahli erwähnter Thread hier gefunden.

Also wenn ich das richtig verstanden habe, könnte ich doch Probleme bekommen.
Nämlich dann, wenn ich das Modul Kunde 2 mal erzeuge.
Dann bin ich mir nicht sicher, dass das 2. Kundenmodul sich nicht die erste erzeugte Instanz des Datenmodules greift.
Ich werde das einfach mal ausprobieren.

Vielen Dank an alle...

Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:49 Uhr.
Seite 1 von 2  1 2      

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