Data Module em Dll alguem pode me responder?
Eu já consegui criar um formulário em uma Dll, o que eu não consigo e criar uma Dll com o DataModule e passar seus componente para uma outra Dll que utilizara os componentes informados no Data Module.
Meus amigos, por favor, me ajudem.
Meus amigos, por favor, me ajudem.
Rodrigo Ferreira
Curtidas 0
Respostas
E_gama
31/03/2003
Voce deve criar e exportar, em sua DLL algumas funcoes operacionais para o DataModule, por exemplo:
Na função ´ConectaBanco´, você faz todos os procedimentos normais para a criação do DataModulo, assim como os processos para se conectar com o banco de dados.
Assim, quando um form precisar acessar o DataModulo, bastaria fazer algo do tipo (considerando que no seu DataModulo tem um componente TDatabase, com o nome ´DataBase1´):
function ConectaBanco(p1, p2, ...): TDataModule; procedure DescontecaBanco;
Na função ´ConectaBanco´, você faz todos os procedimentos normais para a criação do DataModulo, assim como os processos para se conectar com o banco de dados.
Assim, quando um form precisar acessar o DataModulo, bastaria fazer algo do tipo (considerando que no seu DataModulo tem um componente TDatabase, com o nome ´DataBase1´):
var DM_DADOS: TDataModule; begin DM_DADOS := ConectaBanco(p1, p2, ...): Query1.DatabaseName := DM_DADOS.DataBase1; end;
GOSTEI 0
E_gama
31/03/2003
Deixa eu fazer um correção, mas com um exemplo: (Estou utilizando ADO, mas fica fácil mudar para outra forma de acesso)
DM_DLL.DPR (a DLL que contém o DataModule):
DM_DLL_U (Unit do DataModule, na DLL):
Configure o seu ADOConnection adequedamente para seu banco de dados...
Agora, um form que utiliza a DLL:
Daqui em diante, para os outros ´Tables/Query´s´ vc podem fazer o seguinte:
DM_DLL.DPR (a DLL que contém o DataModule):
library DM_DLL;
uses
SysUtils,
Classes,
ADODB,
DM_DLL_U in ´DM_DLL_U.pas´ {DataModule1: TDataModule};
{$R *.res}
function ConectaBanco: TADOConnection;
begin
DataModule1 := TDataModule1.Create(nil);
Result := DataModule1.ADOConnection1;
end;
exports
ConectaBanco;
begin
end.
DM_DLL_U (Unit do DataModule, na DLL):
unit DM_DLL_U;
interface
uses
SysUtils, Classes, DB, ADODB;
type
TDataModule1 = class(TDataModule)
ADOConnection1: TADOConnection;
private
{ Private declarations }
public
{ Public declarations }
end;
var
DataModule1: TDataModule1;
implementation
{$R *.dfm}
end.
Configure o seu ADOConnection adequedamente para seu banco de dados...
Agora, um form que utiliza a DLL:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB;
type
TForm1 = class(TForm)
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function ConectaBanco: TADOConnection; external ´DM_DLL.DLL´;
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.SQL.Text := ´select * from CUSTOMER´;
ADOQuery1.Connection := ConectaBanco;
ADOQuery1.Open;
end;
end.
Daqui em diante, para os outros ´Tables/Query´s´ vc podem fazer o seguinte:
ADOTable1.Connection := ADOQuery1.Connection; ADOQuery2.Connection := ADOQuery1.Connection;
GOSTEI 0