Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Datenmodul dynamisch erstellen (https://www.delphipraxis.net/192722-datenmodul-dynamisch-erstellen.html)

Delbor 13. Mai 2017 19:56

Delphi-Version: XE8

Datenmodul dynamisch erstellen
 
Hi zusammen
Zurzeit arbeite ich an einem kleinen Testprogramm, bestehend aus der Mainform und einem Datenmodul. Dieses wurde bis jetzt automatisch erstellt. Nun brauche ich aber einen integerwert aus diesem Modul und erstelle dieses nun bei Mainform.Create:
Delphi-Quellcode:
procedure TSQLiteTestMain.FormCreate(Sender: TObject);
begin
  FDatamodule := DMLSQLite.Create(Self);
  PathFinderFrame1.OnPathListEvent := DMLSQLite.DoPathListEvent;
  SPEDI_Seitelaenge.Value := DMLSQLite.Seitenlaenge;
end;
Unter Projekt=>Optionen=>Formulare ist das Modul unter "Verfügbar" aufgeführt. Übrigens die selben bedingungen, die auch in meinem Datenbank-Programm vorhanden sind. Trotzdem krieg ich bei DMLSQLite.Create eine Av.
Wnn ich das Modul unter den Projektoptionen wieder in die Liste der automatisch erzeugten Formulare aufnehme, ist alles wieder OK.
Was mache ich falsch?

Gruss
Delbor

nahpets 13. Mai 2017 21:07

AW: Datenmodul dynamisch erstellen
 
Schwer zu sagen, da nicht bekannt ist, was z. B. beim Create von DMLSQLite alles passiert.

Gibt es da irgendwelche Abhängigkeiten, die nur erfüllt sind, wenn DMLSQLite automatisch erstellte wird?

Benötigst Du SPEDI_Seitelaenge.Value := DMLSQLite.Seitenlaenge schon im Create? Oder könnte auch ein (etwas) späterer Zeitpunkt ausreichen?

Sowas in der Art eventuell?
Delphi-Quellcode:
begin
  Application.Initialize;
  Application.CreateForm(TSQLiteTestMain, SQLiteTestMain);
  Application.CreateForm(TDMLSQLite, DMLSQLite);
  SQLiteTestMain.SPEDI_Seitelaenge.Value := DMLSQLite.Seitenlaenge
  Application.Run;
end.

Delbor 13. Mai 2017 21:35

AW: Datenmodul dynamisch erstellen
 
Hi Nahpeds

Ich hab jetzt mal versucht, diese Anweisungen alle nach Mainform.OnActivate zu verlegen. Das hat nichts gebracht.
Ich hatte das Problem übrigens schonmal. Abhilfe hat mir nur gebracht, das Modul völlig neu zu erstellen.

SPEDI_Seitelaenge.Value zeigt auf der Mainform die Grösste Seitenlaenge eines Bildes, das skaliert werden soll, an. Für das Testprogrämmchen wäre dies zwar nicht notwendig

Gruss
Delbor

Lemmy 13. Mai 2017 22:04

AW: Datenmodul dynamisch erstellen
 
Zitat:

Zitat von Delbor;1371294

[DELPHI
procedure TSQLiteTestMain.FormCreate(Sender: TObject);
begin
FDatamodule := DMLSQLite.Create(Self);
PathFinderFrame1.OnPathListEvent := DMLSQLite.DoPathListEvent;
SPEDI_Seitelaenge.Value := DMLSQLite.Seitenlaenge;
end;[/DELPHI]

heißt die Klasse(!) des Datamoduls wirklich DMLSQLite oder evtl. TDMLSQLite? Ist DMLSQLite evtl. der Name einer globalen Variable vom Typ des Datenmoduls das automatisch von Delphi angelegt wird?

Grüße

nahpets 13. Mai 2017 22:08

AW: Datenmodul dynamisch erstellen
 
@Lemmy

Oh Mann, das hätte ich aber eigentlich auch sehen müssen.

Klappt das so?
Delphi-Quellcode:
procedure TSQLiteTestMain.FormCreate(Sender: TObject);
begin
  FDatamodule := TDMLSQLite.Create(Self);
  PathFinderFrame1.OnPathListEvent := FDatamodule.DoPathListEvent;
  SPEDI_Seitelaenge.Value := FDatamodule.Seitenlaenge;
end;

Delbor 13. Mai 2017 23:40

AW: Datenmodul dynamisch erstellen
 
Hi zusammen

Sorry, wenn ich jetzt ziemlich verspätet antworte - ich bin/war zur Zeit in 2 Foren unterwegs. Und im andern Forum ist die in der Schweiz bevorstehende Abstimmung zur zukünftigen Energiestategie ein heisses Thema...

Mir bleibt nichts anderes übrig, als nahpeds zu zitieren:
Zitat:

@Lemmy

Oh Mann, das hätte ich aber eigentlich auch sehen müssen.
Und ich erst recht, da ich diese Prozedur mit einer in einem andern Projekt verglichen habe - und da ist bestimmt nichts falsch!

Versucht hab ichs bislang noch nicht, aber ich wäre erstaunt, wenn das nicht tun würde.

Gruss
Delbor

PS: Ja, Lemmy, das klappt bestens. Es haben sich auch schon andere kleine Flüchtigkeitsfehler gezeigt.
Aber nun habe ich wirklich die nötige Bettschwere, schliesslich war gerade 2 Uhr...

himitsu 14. Mai 2017 13:52

AW: Datenmodul dynamisch erstellen
 
PS: Wenn Formulare/Module nicht automatisch erstellt werden, dann einfach immer erstmal diese böse globale Variable "DMLSQLite" löschen.
Und schon wäre es sofort aufgefallen, voallem da du eine eigene Variable "FDatamodule" hast.
Wie du wohl die nächste Variable/Feld nennst, wenn noch ein weiteres DataModul dazu kommt? :stupid:

Zitat:

Trotzdem krieg ich bei DMLSQLite.Create eine Av.
Wieso bist du da eignentlich nicht auf die Idee gekommen mal den Debugger nach der "Zugriffsverletzung bei Adresse $000000xx" zu fragen?
Dir hätte da schließlich auffallen müssen, dass DMLSQLite = nil ist. (globale Variablen werden mit 0 initialisiert)

Wäre es eine lokale Variable gewesen, dann hätte der Compiler zurecht wegen der nicht-initialisierten Variable gemeckert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:22 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