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.


Rodrigo Ferreira

Rodrigo Ferreira

Responder

Posts

31/03/2003

E_gama

Voce deve criar e exportar, em sua DLL algumas funcoes operacionais para o DataModule, por exemplo:

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):
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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar