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