Im FormDesigner wird aber auch hier dennoch die globale Instanz verwendet.
Das ist ja auch so gewollt! In der
IDE kann es ja auch nur eine Instanz des Forms geben (insbesondere wird dabei ja die lokale Instanz des Datenmoduls dort auch nicht erzeugt - nur zur Runtime) und das kann man ja bequem mit der Datenmodul-Instanz verknüpfen. Per Definition sind ja die Designtime-Instanz des Datenmoduls und die diversen Runtime-Instanzen vom selben Klassentyp.
Die Lösung ist vom Programmieraufwand her recht simpel und eingängig. Man muss lediglich im TForm.Create eine lokale Datenmodul-Instanz erzeugen und entsprechend benennen bevor man inherited aufruft.
Eigentlich kann das Datenmodul-Property im Form auch ganz anders heißen, solange der Name der Instanz passt. Will man diese Instanz nicht auch noch im Code selbst ansprechen, muss man die nicht mal als Property oder Feld deklarieren. Eine einzige Zeile reicht dann schon:
Delphi-Quellcode:
constructor TForm198.Create(AOwner: TComponent);
begin
TMyDataModule.Create(Self).Name := 'MyDataModule';
inherited;
end;