Hola,
Bueno. No te preocupes, hay veces que no me entiendo ni yo.

Pero a ver cómo te explico, no ya la solución a tu problema, pero, lo que yo quería decir antes.
Supongamos que tenemos varias unidades,... por ejemplo:
Código Delphi
[-]
unit UMainForm;
interface
uses
Forms;
type
TMainForm = class(TForm)
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
end.
Código Delphi
[-]
unit USecondaryForm;
interface
uses
Forms;
type
TSecondaryForm = class(TForm)
end;
var
SecondaryForm: TSecondaryForm;
implementation
{$R *.dfm}
end.
Código Delphi
[-]
unit UMyDataModule;
interface
uses
SysUtils, Classes;
type
TMyDataModule = class(TDataModule)
end;
var
MyDataModule: TMyDataModule;
implementation
{$R *.dfm}
end.
Ahora vamos a utilizar el módulo de datos desde el formulario principal, tal como yo he entendido que tú lo haces:
Código Delphi
[-]
unit UMainForm;
interface
uses
Forms;
type
TMainForm = class(TForm)
procedure FormCreate(Sender: TObject);
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
uses
UMyDataModule;
procedure TMainForm.FormCreate(Sender: TObject);
var
module : TMyDataModule;
begin
module := TMyDataModule.Create( nil );
try
finally
module.Free();
end;
end;
end.
Estamos usando el módulo de datos en nuestro formulario principal. Lo estamos haciendo "de forma privada", incluso utilizamos una variable local al método "FormCreate". Si desde el formulario secundario quisiéramos acceder al módulo de datos, podríamos hacer lo mismo, empero, igual no es lo que queremos, puesto que accederíamos a una instancia distinta del módulo de datos. Tal vez esto sea lo que queramos, pero, me parece que no es el caso.
Así pues, ¿qué podemos hacer? Podemos, simplemente, utilizar la variable global "MyDataModule". De esta manera podríamos trabajar tal que así en ambos formularios:
Código Delphi
[-]
unit UMainForm;
interface
uses
Forms;
type
TMainForm = class(TForm)
procedure FormCreate(Sender: TObject);
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
uses
UMyDataModule;
procedure TMainForm.FormCreate(Sender: TObject);
begin
if not Assigned( MyDataModule ) then
MyDataModule := TMyDataModule.Create( nil );
end;
end.
De este modo estaríamos trabajando en ambos formularios con la misma instancia del módulo de datos. Da igual quien cree la instancia antes, puesto que no la crearemos dos veces. Y yo creo que con esto podría terminarse el asunto, según lo he entendido yo, vaya. Sin embargo, todavía le podemos dar una vuelta de tuerca más, aunque no sé si ganaríamos algo o no.
Lo que puede verse a continuación es que hemos añadido el módulo de datos como un miembro de nuestro formulario principal. Además, para dar acceso al módulo de datos desde otros sitios, como nuestro formulario secundario, hemos declarado una propiedad que permite el acceso a nuestro módulo de datos. Vamos, tal que así:
Código Delphi
[-]
unit UMainForm;
interface
uses
Forms, UMyDataModule;
type
TMainForm = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
FMyDataModule : TMyDataModule;
public
property MyDataModule : TMyDataModule read FMyDataModule;
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
procedure TMainForm.FormCreate(Sender: TObject);
begin
FMyDataModule := TMyDataModule.Create( nil );
end;
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FMyDataModule.Free();
end;
end.
Código Delphi
[-]
unit USecondaryForm;
interface
uses
Forms;
type
TSecondaryForm = class(TForm)
procedure FormCreate(Sender: TObject);
end;
var
SecondaryForm: TSecondaryForm;
implementation
{$R *.dfm}
uses
UMainForm;
procedure TSecondaryForm.FormCreate(Sender: TObject);
begin
MainForm.MyDataModule...
end;
end.
En conclusión. Como digo una posible solución (si entendí bien la cuestión) pasa por hacer público, por hacer visible de alguna manera el módulo de datos que queremos compartir entre diferentes formularios, unidades, etc. No sé si ahora ha quedado un poco más claro, no ya la solución a tu problema, pero al menos lo que yo trataba de decir en mi primer mensaje.
