AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Woher kommt globale Variable für Datenmodule

Ein Thema von dataspider · begonnen am 6. Jan 2013 · letzter Beitrag vom 7. Jan 2013
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von dataspider
dataspider

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

Woher kommt globale Variable für Datenmodule

  Alt 6. Jan 2013, 16:14
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 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
Frank Reim
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Woher kommt globale Variable für Datenmodule

  Alt 6. Jan 2013, 16:20
Funktioniert es auch im kompiliertem Programm?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

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

AW: Woher kommt globale Variable für Datenmodule

  Alt 6. Jan 2013, 16:23
Funktioniert es auch im kompiliertem Programm?
Ja, das ist ja das Witzige.
Frank Reim
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Woher kommt globale Variable für Datenmodule

  Alt 6. Jan 2013, 16:30
Auch beim kompletten Rebuild?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

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

AW: Woher kommt globale Variable für Datenmodule

  Alt 6. Jan 2013, 16:34
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]
Angehängte Dateien
Dateityp: zip sample.zip (3,5 KB, 2x aufgerufen)
Frank Reim

Geändert von dataspider ( 6. Jan 2013 um 16:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Woher kommt globale Variable für Datenmodule

  Alt 6. Jan 2013, 16:49
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

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

AW: Woher kommt globale Variable für Datenmodule

  Alt 6. Jan 2013, 17:01
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
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Woher kommt globale Variable für Datenmodule

  Alt 6. Jan 2013, 22:04
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#9

AW: Woher kommt globale Variable für Datenmodule

  Alt 7. Jan 2013, 07:10
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,

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?

Geändert von Furtbichler ( 7. Jan 2013 um 07:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

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

AW: Woher kommt globale Variable für Datenmodule

  Alt 7. Jan 2013, 07:24
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
Frank Reim
  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 23:40 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