Einzelnen Beitrag anzeigen

OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Datamodule wird zu Formular

  Alt 7. Okt 2015, 12:06
Hallo Freunde,

ich hatte zu diesen Thema schon einmal einen Thread erstellt, doch der ist verschwunden... Vermutlich, weil ich dachte, Problem sei gelöst. Ist es aber nicht, weder in D2010 noch in XE4 (auf das sich mein Thread damals bezog) und auch in XE7 nicht.

Folgende Konstellation:

- Ein Datenmodul, genannt TBaseDM. In diesem befinden sich eine ganze Reihe Methoden, die als abstract markiert sind.
- Davon abgeleitet ein weiteres Datenmodul (TLocalDM), das diese abstrakten Methoden überschreibt:
Delphi-Quellcode:
type
  TLocalDM = class(TBaseDM)
  //TLocalDM = class(TDataModule)
  ...
end;
- Ebenfalls von TBaseDM abgeleitet ein drittes Datenmodul (TSQLDM), das ebenfalls diese abstrakten Methoden überschreibt.
Delphi-Quellcode:
type
  TSQLDM = class(TBaseDM)
  ...
end;
Nun das Phänomen: Ich öffne die Projektdatei mit dem TLocalDM. Mache irgendeine Änderung. Speichere und compiliere. Alles prima. Starte das Programm und es crasht mit der Meldung "Eigenschaft ClientHeight existiert nicht". Hat er ja recht, ClientHeight haben Datenmodule nicht - aber Formulare.

Öffne ich TLocalDM.pas erneut und gehe auf die Formularansicht, dann sehe ich kein Quadrat, das mein Datenmodul darstellt, sondern ein Formular (Titelzeile, Minimize-,Maximize-,Close-Button). Ich muß dann den Kopf der Unit umbauen:
Delphi-Quellcode:
type
  //TLocalDM = class(TBaseDM)
  TLocalDM = class(TDataModule) //Kommentare nun vertauscht !
  ...
end;
Dann das Projekt speichern, schließen und neu öffnen, wo mir sofort entgegenspringt "Eigenschaft ClientHeight existiert nicht". Hier wähle ich "alle ignorieren", da noch etliche formularspezifische Properties folgen. Dann tausche ich die Kommentare zurück, compiliere und speichere neu und das Problem ist weg. Bis ich LocalDM.pas schließe und neu öffne - dann ist aus dem Datenmodul wieder ein Formular geworden.

Ich hatte schon mal herumgeforscht und gesehen, das Delphi in der Projektdatei Hinweise hinterlegt, das mein LocalDM eigentlich ein TDataModule ist. Dies stimmt auch alles, trotzdem wird immer wieder ein Formular draus:
Delphi-Quellcode:
  FZW_BaseDM in 'FZW_BaseDM.pas{BaseDM: TDataModule},
  FZW_NoDBDM in 'FZW_NoDBDM.pas{NoDBDM: TDataModule},
  FZW_LocalDM in 'FZW_LocalDM.pas{LocalDM: TDataModule},
  FZW_SQLDM in 'FZW_SQLDM.pas{SQLDM: TDataModule},
Der ganz große Witz ist nun: Mit TSQLDM passiert das nicht. Das bleibt ein Datenmodul, egal wie oft ich TSQLDM.pas öffne und wieder schließe.

Ich hatte, wie schon erwähnt, während der Nutzung von XE4 schon einmal um Rat gefragt, wie man diese sehr nervige Sache abstellt (zumal dann immer wieder beim Kunden auftaucht "Eigenschaft ClientHeight existiert nicht", obwohl man eigentlich am SQLDM was geändert hat und das nur am LocalDM nachziehen wollte). Ich hatte die leise Hoffnung, das das unter XE7 verschwinden würde, tat es aber nicht.

Also erneut die Frage in die Runde: Was mache ich falsch (oder habe ich falsch genmacht) und wie werde ich diesen Geist wieder los ?
  Mit Zitat antworten Zitat