Lo ideal es tener varios DataModules en la misma aplicación, de modo que pongas el componente de conexión solo y abandonado en el UserSession (FDConnection). Los otros componentes FDQuery los pongas en cada DataModulo, y que cada formulario IWForm este asociado a un DataModulo. Entonces quedaría así:
El UserSession:
Código Delphi
[-]
unit UserSessionUnit;
interface
uses
IWUserSessionBase, SysUtils, Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option,
FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.MSSQL,
FireDAC.Phys.MSSQLDef, FireDAC.VCLUI.Wait, Data.DB, FireDAC.Comp.Client;
type
TIWUserSession = class(TIWUserSessionBase)
FDConnectionDB: TFDConnection;
private
public
end;
implementation
{$R *.dfm}
end.
El Módulo de datos:
Código Delphi
[-]
unit DMFormLOGIN;
interface
uses
System.SysUtils, System.Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option,
FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf,
FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, Data.DB,
FireDAC.Comp.DataSet, FireDAC.Comp.Client;
type
TIWDMFormLOGIN = class(TDataModule)
FDQueryTEAM: TFDQuery;
procedure DataModuleCreate(Sender: TObject);
private
public
end;
var
IWDMFormLOGIN: TIWDMFormLOGIN;
implementation
uses ServerController;
{$R *.dfm}
procedure TIWDMFormLOGIN.DataModuleCreate(Sender: TObject);
begin
FDQueryTEAM.Connection := UserSession.FDConnectionDB;
end;
end.
Y el Formulario:
Código Delphi
[-]
unit FormLOGIN;
interface
uses
Classes, SysUtils, IWAppForm, IWApplication, IWColor, IWTypes, DMFormLOGIN;
type
TIWFormLOGIN = class(TIWAppForm)
procedure IWAppFormCreate(Sender: TObject);
procedure IWAppFormDestroy(Sender: TObject);
procedure IWAppFormShow(Sender: TObject);
private
IWDMFormLOGIN: TIWDMFormLOGIN;
public
end;
implementation
{$R *.dfm}
procedure TIWFormLOGIN.IWAppFormCreate(Sender: TObject);
begin
if IWDMFormLOGIN = nil then IWDMFormLOGIN := TIWDMFormLOGIN.Create(Self);
end;
procedure TIWFormLOGIN.IWAppFormDestroy(Sender: TObject);
begin
if Assigned(IWDMFormLOGIN) then FreeAndNil(IWDMFormLOGIN);
end;
procedure TIWFormLOGIN.IWAppFormShow(Sender: TObject);
begin
IWDMFormLOGIN.FDQueryTEAM.Open;
end;
initialization
TIWFormLOGIN.SetAsMainForm;
end.