Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   TDataModule cannot be found... (https://www.delphipraxis.net/214328-tdatamodule-cannot-found.html)

BigAl 28. Dez 2023 10:08

TDataModule cannot be found...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

ich nutze in meinem aktuellen Delphi 12 Projekt ein zentrales Datenmodul (TDataModule). Darin sind die zentrale Verbindung zu einer Datenbank sowie einige Queries definiert. Weiterhin ist dort eine zentrale Image-Liste (TVirtualImageList) definiert.

Solange ich das Datenmodul in der aktuellen Sitzung einmal geöffnet hatte funktioniert alles. Ist aber nach dem Laden des Projekts (z.B. nach Start der IDE) das Datenmodul nicht geöffnet erhalte ich Fehler. In den Formularen die das Datenmodul benutzen sind alle Bezüge undefiniert. Beim Kompilieren erhalte ich z.B. den folgenden Fehler:

Anhang 56517

Ich meine (bin mir aber nicht sicher), dass das erste seite heute so ist. Woran kann das liegen? Habe ich da irgendwo was verstellt?

Wäre ja doof, wenn immer alle abhängigen Module explizit in der IDE geöffnet sein müssen...

himitsu 28. Dez 2023 10:35

AW: TDataModule cannot be found...
 
Nja, entweder du öffnest dessen Unit
und was sonst auch noch gut funktioniert, wenn man das Datenmodul in ein Designtimepackage packt und dort lädt (Create).

"erstellte" Datenmodule und Forms registrieren sich eigentlich automatisch global, so dass eine Namensauflösung "eigentlich" gut funktioniert,
und ansonsten muß das Datenmodul irgendwie bekannt sein, also manuell erstellt, oder im Designer geladen, oder z.B. über die Objektablage oder die Projektverwaltung gefunden und womöglich automatisch instanziiert (was nicht immer gut geht).

Aber wenn man es dennoch manuell machen will (z.B. auch damit immer die richtige globale Instanz genommen wird und z.B. nicht die Forum im Form-Designer, falls die Unit grade geöffnet ist), dann
Delphi-Quellcode:
// ODER class function TMyHelperClassOrDataModul.FindGlobalModules(const Name: string): TComponent; static;
function FindGlobalModules(const Name: string): TComponent;
begin
  Result := nil;
  if SameText(Name, 'DM1') then
    Result := DM1; // die globale Instanz
  ...
Dann im Register des Packages ein Delphi-Referenz durchsuchenRegisterFindGlobalComponentProc(FindGlobalModules);
und im Finalization natürlich nicht das Delphi-Referenz durchsuchenUnregisterFindGlobalComponentProc vergessen.

peterbelow 28. Dez 2023 11:00

AW: TDataModule cannot be found...
 
Zitat:

Zitat von BigAl (Beitrag 1531190)
Hallo zusammen,

ich nutze in meinem aktuellen Delphi 12 Projekt ein zentrales Datenmodul (TDataModule). Darin sind die zentrale Verbindung zu einer Datenbank sowie einige Queries definiert. Weiterhin ist dort eine zentrale Image-Liste (TVirtualImageList) definiert.

Solange ich das Datenmodul in der aktuellen Sitzung einmal geöffnet hatte funktioniert alles. Ist aber nach dem Laden des Projekts (z.B. nach Start der IDE) das Datenmodul nicht geöffnet erhalte ich Fehler. In den Formularen die das Datenmodul benutzen sind alle Bezüge undefiniert. Beim Kompilieren erhalte ich z.B. den folgenden Fehler:

Ich meine (bin mir aber nicht sicher), dass das erste seite heute so ist. Woran kann das liegen? Habe ich da irgendwo was verstellt?

Wäre ja doof, wenn immer alle abhängigen Module explizit in der IDE geöffnet sein müssen...

Stell sicher dass in der Liste der autocreate-Objekte das DM vor dem ersten Form aufgelistet wird das es benötigt und auch das Du nicht versehendlich die Name-property des DMs gelöscht hast.

himitsu 28. Dez 2023 11:06

AW: TDataModule cannot be found...
 
Zitat:

Zitat von peterbelow (Beitrag 1531197)
Stell sicher dass in der Liste der autocreate-Objekte das DM vor dem ersten Form aufgelistet wird das es benötigt

Das sollte aber nur die Runtime betreffen, wenn das Programm gestartet wird,
aber wohl nicht, dass es auch im Designer der Delphi-IDE passt.

Zitat:

Zitat von peterbelow (Beitrag 1531197)
und auch das Du nicht versehendlich die Name-property des DMs gelöscht hast.

Das geht nicht. Es muß immer einen Namen geben, bei einem Leerstring oder einem ungültigen Bezeichner, kommt eine Exception vom Designer/PropertyEditor.
Aber ja, ein anderer/falscher Name, ging schon, womit es dann auch nicht mehr gefunden würde.

BigAl 28. Dez 2023 11:06

AW: TDataModule cannot be found...
 
Zitat:

Zitat von peterbelow (Beitrag 1531197)
Stell sicher dass in der Liste der autocreate-Objekte das DM vor dem ersten Form aufgelistet wird das es benötigt und auch das Du nicht versehendlich die Name-property des DMs gelöscht hast.

In "Auto-create forms" habe ich nur das Datenmodul und das Hauptformular. Und ja das Datenmodul steht oben. Alles andere wird dynamisch erzeugt.

Was meinst Du mit "versehendlich die Name-property des DMs gelöscht"?

himitsu 28. Dez 2023 11:11

AW: TDataModule cannot be found...
 
Passiert gern mal ... ausversehn einen Buchstaben gedrückt, während der Designer den Eingabefokus im Name-Property liegen hatte.

BigAl 28. Dez 2023 11:50

AW: TDataModule cannot be found...
 
Zitat:

Zitat von himitsu (Beitrag 1531202)
Passiert gern mal ... ausversehn einen Buchstaben gedrückt, während der Designer den Eingabefokus im Name-Property liegen hatte.

Dann wäre aber der Bezug - zumindest in allen nicht geöffneten Forumularen - sofort komplett ungültig...

jaenicke 28. Dez 2023 12:04

AW: TDataModule cannot be found...
 
Leider habe ich solche Probleme auch sporadisch. Ich kann diese aber nicht zuverlässig reproduzieren, so dass ich sie auch nicht melden kann. Dabei habe ich Fehler dieser Art sowohl mit geöffnetem Datenmodul als auch ohne dass es geöffnet wurde.

Wenn es bei dir zuverlässig funktioniert, wenn das Datenmodul offen ist, würde ich die raten, die Speicherung des Projektdesktops in den Projektoptionen zu aktivieren und es dabei zu belassen.

Wenn du es auch reproduzieren kannst, wenn du den kompletten (nicht veröffentlichbaren) Inhalt entfernst, wäre es natürlich super, weil du es dann zum Testen hier anhängen könntest. Wenn das auch andere reproduzieren können, sollte ein entsprechender Quality-Eintrag gut zu lösen sein und vielleicht dann auch die sporadischen Probleme bei anderen lösen.

Jasocul 28. Dez 2023 13:04

AW: TDataModule cannot be found...
 
Ich meine vor längerem gelesen zu haben, dass es ähnliche Probleme gibt, wenn man in einer Projektgruppe "zentrale" Module gemeinsam nutzt. Das Problem hatte irgendwas damit zu tun, dass die Ablage-Verzeichnisse der entsprechenden Units nicht richtig aufgelöst werden konnten.
Aber das ist aus der Erinnerung und ich kann keine Quelle dazu angeben. Ich kann daher damit auch völlig falsch liegen. :wink:

BigAl 28. Dez 2023 13:08

AW: TDataModule cannot be found...
 
Zitat:

Zitat von Jasocul (Beitrag 1531207)
Ich meine vor längerem gelesen zu haben, dass es ähnliche Probleme gibt, wenn man in einer Projektgruppe "zentrale" Module gemeinsam nutzt. Das Problem hatte irgendwas damit zu tun, dass die Ablage-Verzeichnisse der entsprechenden Units nicht richtig aufgelöst werden konnten.
Aber das ist aus der Erinnerung und ich kann keine Quelle dazu angeben. Ich kann daher damit auch völlig falsch liegen. :wink:

Genau so ist es (eben getestet). Wenn ich das einzelne Projekt öffne geht alles wunderbar wie es soll. Sobald ich das Projekt als Teile einer Gruppe öffne kommt der Fehler...

Danke für den Tip!


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