Data Module em Dll alguem pode me responder?
31/03/2003
0
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
Curtir tópico
+ 0
Responder
Posts
31/03/2003
E_gama
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;
Responder
31/03/2003
E_gama
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;
Responder
Clique aqui para fazer login e interagir na Comunidade :)