AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wie kommt ein TDBEdit an die Instanz meines DataModules? Warum/Wie funktioniert es?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kommt ein TDBEdit an die Instanz meines DataModules? Warum/Wie funktioniert es?

Ein Thema von RSE · begonnen am 4. Jul 2011 · letzter Beitrag vom 7. Jul 2011
 
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#1

Wie kommt ein TDBEdit an die Instanz meines DataModules? Warum/Wie funktioniert es?

  Alt 4. Jul 2011, 15:39
Hallo,

Standardfall:
In einer Unit MyDataModule ist die Klasse TMyDM = class(TDataModule) definiert. In dieser Klasse gibt es die DataSource MyDS. Zusätzlich gibt es in dieser Unit eine globale Variable MyDM: TMyDM. Nun kann in einer anderen Unit im Formdesigner in dem TDBEdit im Feld DataSource eingetragen werden "MyDM.MyDS".
Zur Laufzeit kann nun das DBEdit auf die Instanz der MyDS zugreifen. Ich habe mir nie den Kopf zerbrochen, wie das funktioniert - wird wohl irgendwie über die globale Variable funktionieren.

Komplizierterer Fall:
MyDs ist in TMyCustomDM definiert. Es gibt keine globale Variable MyCustomDM: TMyCustomDM. TMyCustomDM ist durch Visual Inheritance zu TMyDM abgeleitet und erbt damit MyDS. Es gibt auch keine globale Variable MyDM: TMyDM.
Nun gibt es eine Superklasse TMyCustomForm, auf der ein MyDBEdit: TDBEdit liegt. In TMyCustomForm gibt es eine public Eigenschaft DM: TMyCustomDM read FMyDM. TMyCustomForm ist durch Visual Inheritance zu TMyForm abgeleitet. In TMyForm wir die Eigenschaft DM verdeckt durch eine gleichnamige Eigenschaft DM: TMyDM read GetMyDM, wobei MyDM lediglich eine Typumwandlung durchführt: Result := TMyDM(FMyDM); Im Konstruktor von TMyForm wird das Datenmodul erzeugt: FMyDM := TMyDM.Create(Self); Die Instanz vom Typ TMyDM steckt also in TMyCustomForm.MyDM.
Nun kann ich im FormDesigner in TMyCustomForm.MyDBEdit in der Eigenschaft DataSource "MyCustomDM.MyDS" eintragen.
Auch in diesem Fall funktioniert MyDBEdit wie es soll. Ich kann mir nun aber beim besten Willen nicht mehr vorstellen, wie MyDBEdit an die Instanz des Datenmoduls kommt.

Zur Übersicht Auszüge aus den Units des komplizierteren Falls:
Delphi-Quellcode:
Unit UMyCustomDataModule;
type
  TMyCustomDM = class(TDataModule)
    MyDS: TDataSource;
  end;
Delphi-Quellcode:
Unit UMyDataModule;
type
  TMyDM = class(TMyCustomDM)
  end;
Delphi-Quellcode:
Unit UMyCustomForm;
type
  TMyCustomForm = class(TForm)
    MyDBEdit: TDBEdit;
  protected
    FMyDM: TMyCustomDM;
  public
    property MyDM: TMyCustomDM read FMyDM;
  end;
Delphi-Quellcode:
Unit UMyForm;
type
  TMyForm = class(TMyCustomForm)
  private
    function GetMyDM: TMyDM;
  public
    constructor Create(AOwner: TComponent); override;
    property MyDM: TMyDM read GetMyDM;
  end;
implementation

constructor TMyForm.Create(AOwner: TComponent);
begin
  FMyDM := TMyDM.Create(Self);
  inherited;
end;

function TMyForm.GetMyDM: TMyDM;
begin
  Result := TMyDM(FMyDM);
end;
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."

Geändert von RSE ( 5. Jul 2011 um 14:19 Uhr) Grund: tippfehlerbereinigt (Sichtbarkeiten und Bezeichner)
  Mit Zitat antworten Zitat
 


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 15:51 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 by Thomas Breitkreuz