![]() |
Delphi-Version: 2010
Vererbung zwischen TDataModules wird ständig gelöst?
Guten Tag!
Ich habe von einem eigene TDataModule zwei weitere abgeleitet:
Delphi-Quellcode:
Das ganze habe ich über die IDE gemacht, also nicht selbst Units angelegt und angefangen abzuleiten.
TdmSchnittstelle = class(TDataModule)
TdmVariante1 = class(TdmSchnittstelle) TdmVariante2 = class(TdmSchnittstelle) Nun hat jede der beiden Varianten ein eigenes Formular, auf dem die Komponenten zu sehen sind. Ist auch OK soweit. Die Formulare fangen im Code folgendermaßen an:
Delphi-Quellcode:
Jetzt ist es aber so, das öfters (von der IDE) die Vererbung "gelöst" wird.
inherited dmVariante1: TdmVariante1
inherited dmVariante2: TdmVariante2 Jedenfalls die der Formulare, da steht dann plötzlich nurnoch:
Delphi-Quellcode:
Beim compilieren klappt das noch alles, aber beim Programmstart kommen dann beim Instanziieren folgende Fehlermeldungen:
object dmVariante1: TdmVariante1
object dmVariante2: TdmVariante2
Code:
Das Ganze passiert dann, wenn ich z.B. bei Variante1 die Größe des Formulars/Datenmoduls ändere.
Exception EReadError in Modul MyProgram.exe bei 000ZYX.
Fehler beim Lesen von dmVariante1.ClientHeight: Eigenschaft ClientHeight existiert nicht. Exception EReadError in Modul MyProgram.exe bei 000XYZ. Fehler beim Lesen von dmVariante2.ClientHeight: Eigenschaft ClientHeight existiert nicht. Lösen kann ich das nur, indem ich mir das Formular als Text anzeigen lass und händisch object zu inherited ändere. Dann kommt noch die Meldung:
Code:
Das gleiche für ClientWidth und Variante2.
Fehler beim Lesen von dmVariante1.ClientHeight: Eigenschaft ClientHeight existiert nicht. Den Fehler ignorieren und fortsetzen?
Wenn ich das Ignoriere geht alles wieder wunderbar, bis zum nächsten Vorfall. Was für ein Problem hat die IDE (oder ich?) hier? Kann ich in der IDE irgendwo was einstellen damit sowas nichtmehr passiert? |
AW: Vererbung zwischen TDataModules wird ständig gelöst?
Da bist du nicht der einzige:
![]() |
AW: Vererbung zwischen TDataModules wird ständig gelöst?
Danke! Ich bin durch deinen Link auf folgende Seite gestoßen, wo das Phänomen auch etwas erklärt wird:
![]() |
AW: Vererbung zwischen TDataModules wird ständig gelöst?
Zitat:
|
AW: Vererbung zwischen TDataModules wird ständig gelöst?
Dear Angel4585 .
Sorry for writing in English, but my way of "rechtschreiben" probably would make it worse (: I've not seen this behaviour of datamodules becoming corrutp automagically happen from within the IDE, but there must be a bug somewhere. I'd appreciate if you can find out steps, and post them (including the affected Delphi version) as a comment to my blog post: ![]() --jeroen |
AW: Vererbung zwischen TDataModules wird ständig gelöst?
Ich habe das jetzt eine Weile getestet mit folgendem Ergebnis:
-> Kind speichern ohne Veränderung + IDE schliessen und wieder öffnen = Vererbung besteht weiterhin -> Anwendung compiliert ohne Veränderung = Vererbung wird gelöst + Height und Width wird hinzugefügt -> Kind gespeichert mit Veränderung der Formulargröße + IDE schliessen und wieder öffnen = Vererbung besteht weiterhin + Height und Width wird hinzugefügt -> Anwendung compiliert mit Veränderung der Formulargröße = Vererbung wird gelöst + Height, Width, ClientHeight, uvm. wird hinzugefügt Mit "Vererbung besteht weiterhin" meine ich, dass bei der Ansicht des Formulars als Text als erstes immernoch "inherited" steht anstatt "object". "Vererbung gelöst" entsprechend umgekehrt. Beim compilieren wird also irgendwo eine Aktion durchgeführt die das Formular verändert, denn speichern alleine bewirkt das nicht. Edit: Zusätzlich gibt es ein problem beim tauschen des "object" gegen das "inherited" im Text-Modus. Wenn man nich in den Designer-Modus wechselt und die ganzen Meldungen ignoriert, kommen die Meldungen zur Laufzeit wodurch das Programm (in meinem Fall) abstürzt. |
AW: Vererbung zwischen TDataModules wird ständig gelöst?
Zitat:
Zitat:
|
AW: Vererbung zwischen TDataModules wird ständig gelöst?
Zitat:
Sollte es aber auch bei anderen 2010er Installationen nicht auftreten, wäre es natürlich interessant wodurch es ausgelöst wird. Aber nach was muss ich suchen? Kann es an JCL,JVCL, ReportBuilder, etc liegen? Oder Pfadeinstellungen? Gesetzte bzw. nicht gesetzt Flags? Zitat:
Ich ändere lediglich "object" zu "inherited". "ClientHeight" etc. lasse ich, das darf dann der Designer aufräumen. Löscht man diese auch manuell, geht es problemlos. Nur besteht evtl. die Gefahr zu viel zu löschen? |
AW: Vererbung zwischen TDataModules wird ständig gelöst?
Ich würde bei Datenmodulen auf Vererbung verzichten denn es zieht einen ganzen Rattenschwanz an Abhängigkeiten hinter sich her.
Wenn man z.B. aus einer Anwendung einen Teil absplitten und in eine neue Anwendung kopieren möchte dann tut man sich wesentlich leichter wenn die Datenmodule nicht vererbt sind. Dependency Injection bietet neben Vererbung ebenfalls die Möglichkeit externe Funktionalität in einem Datenmodul zu nutzen. Allerdings muss man bei Datenmodulen (allgemein bei Komponenten) auf Injection über ein Property oder eine Methode ausweichen da wegen dem virtuellen Konstruktor dieser nicht frei verwendbar ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz