AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Vererbung zwischen TDataModules wird ständig gelöst?
Thema durchsuchen
Ansicht
Themen-Optionen

Vererbung zwischen TDataModules wird ständig gelöst?

Ein Thema von Angel4585 · begonnen am 25. Nov 2013 · letzter Beitrag vom 3. Dez 2013
Antwort Antwort
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

Vererbung zwischen TDataModules wird ständig gelöst?

  Alt 25. Nov 2013, 08:29
Delphi-Version: 2010
Guten Tag!

Ich habe von einem eigene TDataModule zwei weitere abgeleitet:

Delphi-Quellcode:
TdmSchnittstelle = class(TDataModule)
TdmVariante1 = class(TdmSchnittstelle)
TdmVariante2 = class(TdmSchnittstelle)
Das ganze habe ich über die IDE gemacht, also nicht selbst Units angelegt und angefangen abzuleiten.
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:
inherited dmVariante1: TdmVariante1
inherited dmVariante2: TdmVariante2
Jetzt ist es aber so, das öfters (von der IDE) die Vererbung "gelöst" wird.
Jedenfalls die der Formulare, da steht dann plötzlich nurnoch:

Delphi-Quellcode:
object dmVariante1: TdmVariante1
object dmVariante2: TdmVariante2
Beim compilieren klappt das noch alles, aber beim Programmstart kommen dann beim Instanziieren folgende Fehlermeldungen:
Code:
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.
Das Ganze passiert dann, wenn ich z.B. bei Variante1 die Größe des Formulars/Datenmoduls ändere.

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:
Fehler beim Lesen von dmVariante1.ClientHeight: Eigenschaft ClientHeight existiert nicht. Den Fehler ignorieren und fortsetzen?
Das gleiche für ClientWidth und Variante2.
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?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Vererbung zwischen TDataModules wird ständig gelöst?

  Alt 25. Nov 2013, 11:59
Da bist du nicht der einzige: http://stackoverflow.com/questions/5...le-inheritance
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Vererbung zwischen TDataModules wird ständig gelöst?

  Alt 25. Nov 2013, 13:30
Danke! Ich bin durch deinen Link auf folgende Seite gestoßen, wo das Phänomen auch etwas erklärt wird: http://wiert.me/2009/08/20/delphi-ti...-the-designer/
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Vererbung zwischen TDataModules wird ständig gelöst?

  Alt 25. Nov 2013, 14:50
Danke! Ich bin durch deinen Link auf folgende Seite gestoßen, wo das Phänomen auch etwas erklärt wird: http://wiert.me/2009/08/20/delphi-ti...-the-designer/
Das war die Idee...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
jeroenp

Registriert seit: 5. Aug 2010
7 Beiträge
 
Delphi 2 Desktop
 
#5

AW: Vererbung zwischen TDataModules wird ständig gelöst?

  Alt 26. Nov 2013, 08:12
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: http://wiert.me/2009/08/20/delphi-ti...-the-designer/

--jeroen
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#6

AW: Vererbung zwischen TDataModules wird ständig gelöst?

  Alt 3. Dez 2013, 07:41
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.
Martin Weber
Ich bin ein Rüsselmops

Geändert von Angel4585 ( 3. Dez 2013 um 07:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Vererbung zwischen TDataModules wird ständig gelöst?

  Alt 3. Dez 2013, 08:35
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.
Das ist aber kein generelles Problem, denn dann würde es viel häufiger auftreten. Die obigen Schritte mache ich mehrmals am Tag ohne Probleme. Irgendetwas an deiner Installation ist nicht Standard und löst das aus.

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.
Das hört sich eher danach an, daß die Änderungen nicht gespeichert werden (was eigentlich automatisch geschehen sollte). Hast du irgendwelche Komponenten, Experten oder sonstige IDE-Plugins installiert, die man hier mal unter Verdacht stellen könnte?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#8

AW: Vererbung zwischen TDataModules wird ständig gelöst?

  Alt 3. Dez 2013, 08:45
Das ist aber kein generelles Problem, denn dann würde es viel häufiger auftreten. Die obigen Schritte mache ich mehrmals am Tag ohne Probleme. Irgendetwas an deiner Installation ist nicht Standard und löst das aus.
Möglicherweise wurde das zwischenzeitlich auch behoben, du arbeitest mit XE5, ich mit 2010 Pro.
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?

Das hört sich eher danach an, daß die Änderungen nicht gespeichert werden (was eigentlich automatisch geschehen sollte). Hast du irgendwelche Komponenten, Experten oder sonstige IDE-Plugins installiert, die man hier mal unter Verdacht stellen könnte?
Ich denke das Verhalten ist schon korrekt.
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?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

AW: Vererbung zwischen TDataModules wird ständig gelöst?

  Alt 3. Dez 2013, 08:51
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.
fork me on Github
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:13 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