Tienes que crear el módulo de datos. Esto es lo que viene en el ejemplo 3:
Vas a tener un proyecto ejecutable, un programa.bpl y un módulo de datos DM.dcp (DM principal)
En tu DM.dcp (DM Principal) estableces dos procedimientos, uno para crearlo y otro para liberarlo:
Código Delphi
[-]
procedure CreateDataModuleMain;
procedure FreeDataModuleMain;
implementation
{$R *.DFM}
var
DataModuleMainCount: Integer;
procedure CreateDataModuleMain;
begin
if not Assigned(DataModuleMain) then
DataModuleMain := TDataModuleMain.Create(Application);
Inc(DataModuleMainCount);
end;
procedure FreeDataModuleMain;
begin
Dec(DataModuleMainCount);
if DataModuleMainCount <= 0 then
begin
FreeAndNil(DataModuleMain);
DataModuleMainCount := 0;
end;
end;
Esto es tu DM principal.
Ahora, toma en cuenta que tanto tu proyecto ejecutable como todos tus BPL, deben contener un módulo de datos particular, este DM particular se va a comunicar con el DM principal. También tienes que crearlo de la misma forma y añades la creación del DM Principal:
Código Delphi
[-]
var
DataModuleOrder: TDataModuleOrder;
procedure CreateDataModuleOrder;
procedure FreeDataModuleOrder;
implementation
uses
custdata;
{$R *.DFM}
var
DataModuleOrderCount: Integer;
procedure CreateDataModuleOrder;
begin
if not Assigned(DataModuleOrder) then
DataModuleOrder := TDataModuleOrder.Create(Application);
Inc(DataModuleOrderCount);
end;
procedure FreeDataModuleOrder;
begin
Dec(DataModuleOrderCount);
if DataModuleOrderCount <= 0 then
begin
FreeAndNil(DataModuleOrder);
DataModuleOrderCount := 0;
end;
end;
procedure TDataModuleOrder.DataModuleCreate(Sender: TObject);
begin
CreateDataModuleMain; QueryCustomer.Open;
end;
procedure TDataModuleOrder.DataModuleDestroy(Sender: TObject);
begin
QueryCustomer.Close;
FreeDataModuleMain; end;
initialization
DataModuleOrderCount := 0;
end.
Esto es el DM particular que utiliza el programa BPL
Cuando creas tu BPL, debes de crear el DM particular de ese BPL
Código Delphi
[-]procedure TFormOrder.FormCreate(Sender: TObject);
begin
CreateDataModuleOrder;
end;
procedure TFormOrder.FormDestroy(Sender: TObject);
begin
FreeDataModuleOrder;
end;
Recuerda que al crear el DM particular de tu BPL, se manda llamar el DM Principal.
De la misma forma, deberás crear un DM para tu proyecto ejecutable que a su vez cree el DM principal. Igual, de la misma forma.
Y la idea es: Se crea tu proyecto.exe, al crearse, este manda crear su DM particular y al crear el DM particular, manda crear el DM principal. Cuando desde tu proyecto.exe, cargas el programa.bpl, el programa.bpl manda crear su DM particular y este a su vez manda crear el DM principal, pero como el DM principal ya fue creado desde el proyecto.exe el DM particular del tu programa.bpl tomará esa conexión previamente creada.
Espero haberme explicado correctamente, de cualquier manera, todo eso viene en el ejemplo 3.