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?

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
Antwort Antwort
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.359 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Wie kommt ein TDBEdit an die Instanz meines DataModules? Warum/Wie funktioniert e

  Alt 6. Jul 2011, 08:35
Hmm, mal ein paar Überlegungen:

Was bringt denn:
Delphi-Quellcode:
Showmessage(MyDBEdit.DataSource.Owner.Name);
Showmessage(MyDBEdit.DataSource.Name);
FindComponent('MyCustomDM')...
Kann es denn sein, dass Du in Deinem Demobeispiel maßgebliche Variablen Deines echten Projektes "unterschlägst", dass also tatsächlich irgendwo eine solche Variable definiert ist?

Kannst Du Deinen Demotext mit vertretbarem Aufwand in ein echtes Projekt gießen und live testen?
Dann könnten wir das vielleicht auch mal genauer nachvollziehen...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
RSE

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

AW: Wie kommt ein TDBEdit an die Instanz meines DataModules? Warum/Wie funktioniert e

  Alt 6. Jul 2011, 08:59
Hmm, mal ein paar Überlegungen:

Was bringt denn:
Delphi-Quellcode:
Showmessage(MyDBEdit.DataSource.Owner.Name);
Showmessage(MyDBEdit.DataSource.Name);
FindComponent('MyCustomDM')...
1. "MyDM"
2. "MyDS"
3. nil
Das scheinen mir alles sehr korrekte Werte zu sein...
Kann es denn sein, dass Du in Deinem Demobeispiel maßgebliche Variablen Deines echten Projektes "unterschlägst", dass also tatsächlich irgendwo eine solche Variable definiert ist?
Ich habe das ganze Projekt durchsucht: Es kommt TMyCustomDM, UMyCustomDM (Der Klassenname ohne T ist im Originalprojekt Teil des Unitnamens - Fehler im ersten Beitrag) und in der DPR etwas wie "UMyCustomDM in 'pfad\UMyCustomDM.pas' {MyCustomDM: TDataModule},". Die Zeile in der DPR ist also der einzige Ort im ganzen Projekt (abgesehen von DFMs), in dem der Bezeichner MyCustomDM vorkommt, und dort tut er es nur in einem Kommentar.
Kannst Du Deinen Demotext mit vertretbarem Aufwand in ein echtes Projekt gießen und live testen?
Dann könnten wir das vielleicht auch mal genauer nachvollziehen...
Ich probiere mal, inwieweit das ohne tatsächliche DB-Anbindung ausführbar ist und hänge es ggf. hier an einen Beitrag von mir an.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.359 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Wie kommt ein TDBEdit an die Instanz meines DataModules? Warum/Wie funktioniert e

  Alt 6. Jul 2011, 09:14
"UMyCustomDM in 'pfad\UMyCustomDM.pas' {MyCustomDM: TDataModule},"

Ich weiß es nicht wie der Compiler genau vorgeht, aber vielleicht wertet er ja diesen "Kommentar" irgendwie aus und erzeugt beim Öffnen des Projektes eine passende Variable - eben zur Herstellung der Projektverbindungen. Ist nur Spekulation - wäre aber ja denkbar.

Ändere doch mal testweise den Kommentar in {MyCustomDMXxx: TDataModule}.

Wenn es dann nicht mehr funktioniert, hätte man eine Erklärung...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
RSE

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

AW: Wie kommt ein TDBEdit an die Instanz meines DataModules? Warum/Wie funktioniert e

  Alt 6. Jul 2011, 09:42
Ich habe jetzt mal mein Beispiel implementiert... und es läuft nicht. Baue ich in das Originalprojekt genau die selbe DS und das selbe DBEdit ein, klappt es. Somit ist dem Thread gerade die Diskussionsgrundlage entzogen worden...
Ich werde mich auf die Suche machen und mich dann wieder melden.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.052 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Wie kommt ein TDBEdit an die Instanz meines DataModules? Warum/Wie funktioniert e

  Alt 6. Jul 2011, 09:54
Du kannst in deinem uns nicht vorliegenden Projekt gern widerlegen, was ich sagte, es stimmt dennoch. Erzeugst du allerdings irgendwo eine Instanz dieses DataModules, wird diesem DataModule ein Name verpasst (rat mal welcher) und sie wird gefunden, wenn die Form aus der dfm geladen wird bzw wenn dieses ominöse GlobalFixupReferences aufgerufen wird (Tip: kompilier mit debug dcus und setz nen Stoppunkt in TDBEdit.SetDataSource)

Die Identifizierung der Komponenten, die in der dfm einander zugewiesen werden, geschieht anhand des Namens.

Siehe Anhang
Angehängte Dateien
Dateityp: zip Sample.zip (1,8 KB, 0x aufgerufen)
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 6. Jul 2011 um 10:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.359 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Wie kommt ein TDBEdit an die Instanz meines DataModules? Warum/Wie funktioniert e

  Alt 6. Jul 2011, 10:27
Oha!

Also mit dem DataModuleName stimmt. Siehe Code + ScreenShot.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  DM2a, DM2b: TDataModule2;
begin
  DM2a := TDataModule2.Create(Application);
  Caption := Caption + '->' + DM2a.Name;
  DM2b := TDataModule2.Create(Application);
  Caption := Caption + '->' + DM2b.Name;
end;
Dann sollte aber FindComponent die Komponente finden...

Ich steige hier aus und warte auf einen Abschlussbericht des TE
Angehängte Grafiken
Dateityp: jpg dmname.jpg (6,7 KB, 9x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
RSE

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

AW: Wie kommt ein TDBEdit an die Instanz meines DataModules? Warum/Wie funktioniert e

  Alt 6. Jul 2011, 14:07
So, das Beispielprojekt ist fertig. Ihr findet es im Anhang.
Angehängte Dateien
Dateityp: zip DataSource.zip (3,9 KB, 3x aufgerufen)
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.359 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Wie kommt ein TDBEdit an die Instanz meines DataModules? Warum/Wie funktioniert e

  Alt 6. Jul 2011, 16:13
So ganz habe ich das nicht durchblickt, aber ein DataModule schaut beim erzeugen sofort nach, ob es sich irgendwo einklinken (aufdrängeln ) kann.
In der Konsequenz sollte das zur Folge haben, dass man nicht zwei DataModules mit gleichen Komponenten verwenden kann.
Na ja, es ist etwas verworren.

Im Projekt habe ich mal die Functionen aus Classes.pas herauskopiert und Breakpoints gesetzt. Die Überwachung der globalen DBEdit "E" zeigt dann, wann E ein DataSet zugewiesen wird.

DataSet toleriert dabei, dass der aktuelle Klassentyp nicht mehr TMyCustomDM ist (oder so ähnlich ).
Angehängte Grafiken
Dateityp: jpg dminstance.jpg (36,1 KB, 4x aufgerufen)
Angehängte Dateien
Dateityp: zip My.zip (16,4 KB, 1x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:14 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