Es geht auch noch etwas einfacher. Beim Auflösen der Referenzen haben Komponenten der Form-Instanz Vorrang. Hier ein Form mit Referenz auf ein globales Datenmodul, die zur Laufzeit auf die lokale Instanz umgebogen wird.
Delphi-Quellcode:
type
TMyDataModule = class(TDataModule)
HostdbConnection: TFDConnection;
TestTable: TFDQuery;
private
public
end;
var
MyDataModule: TMyDataModule;
Delphi-Quellcode:
object DataSource1: TDataSource
DataSet = MyDataModule.TestTable
Left = 304
Top = 64
end
Delphi-Quellcode:
type
TForm198 =
class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
private
FMyDataModule: TMyDataModule;
protected
property MyDataModule: TMyDataModule
read FMyDataModule;
public
constructor Create(AOwner: TComponent);
override;
end;
constructor TForm198.Create(AOwner: TComponent);
begin
FMyDataModule := TMyDataModule.Create(Self);
{ Wenn die globale Instanz von MyDataModule hier bereits existiert, wird der Name dieser lokalen Instanz beim Laden der DFM verändert.
Daher setzen wir den wieder zurück, sonst werden die Referenzen nicht richtig aufgelöst. Da es eine lokale Instanz des Forms ist, führt das hier zu keinerlei Kollisionen }
FMyDataModule.
Name := '
MyDataModule';
{ Wichtig! Das muss vor dem inherited geschehen. }
inherited;
end;
EDIT: Die Forms kann man damit wieder ganz normal über
TForm198.Create(???) erzeugen und muss sich um die Datenmodule gar nicht kümmern.