Criando DataModule em tempo de execução.

Delphi

27/05/2014

Bom dia,

Estou tentando criando um datamodule em tempo de execução, mas estou tendo problemas. Tenho a seguinte estrutura:

AutoCreate -> Está somente o principal.

frmPrincipal -> Botão
procedure TForm2.SpeedButton2Click(Sender: TObject);
var ConsultaSQL : TForm;
begin
  ConsultaSQL := TfrmConsultaSQL.Create(nil);
  ConsultaSQL.ShowModal;
  ConsultaSQL.Free;
end;


frmConsultaSQL
  private
    SQL : TDataModule;


implementation
Uses untDMSQL; //Nome desta unit é DMSQL


procedure TfrmConsultaSQL.FormCreate(Sender: TObject);
begin
  SQL := TDMSQL.Create(self);
end;


Já tentei
procedure TfrmConsultaSQL.FormCreate(Sender: TObject);
begin
  SQL := DMSQL.Create(self);
end;


Quando passa por está linha de criação do DataModule estoura um AV, se removo ela o form é criado normalmente.

Desde já, obrigado!
Thiago Ribeiro

Thiago Ribeiro

Curtidas 0

Respostas

Cauê Nishijima

Cauê Nishijima

27/05/2014

Aparentemente seu código esta correto,
Quando você deixa o DataModule no AutoCreate não da erro?
Se puder posta o código do DataModule.
GOSTEI 0
Thiago Ribeiro

Thiago Ribeiro

27/05/2014

Sim, se eu coloco no AutoCreate ele não da erro.

Segue o código do DM:
unit untDMSQL;

interface

uses
  SysUtils, Classes, FMTBcd, WideStrings, DBXFirebird, DB, SqlExpr, Provider,
  DBClient;

type
  TDMSQL = class(TDataModule)
    cdsFilmes: TClientDataSet;
    dpsFilmes: TDataSetProvider;
    qryFilmes: TSQLQuery;
    Banco: TSQLConnection;
    cdsDiretor: TClientDataSet;
    dspDiretor: TDataSetProvider;
    tlbDiretor: TSQLTable;
    cdsDiretorDIR_NOME: TStringField;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  DMSQL: TDMSQL;

implementation

{$R *.dfm}

end.
GOSTEI 0
Nelson Santos

Nelson Santos

27/05/2014

ganhe dinheiro com softwares 3D com Delphi 7
GOSTEI 0
Thiago Ribeiro

Thiago Ribeiro

27/05/2014

Fiz o seguinte:
procedure TfrmConsultaSQL.FormCreate(Sender: TObject);
begin
  DMSQL := TDMSQL.Create(self);
end;


Percebi que o AV ocorre quando passo por está outra linha, quando utilizo um componente que está dentro deste DM.
procedure TfrmConsultaSQL.edtDiretorChange(Sender: TObject);
var Diretor : String;
begin
  Diretor := edtDiretor.Text;
  DMSQL.cdsFilmes.Close; // Aqui
  DMSQL.qryFilmes.ParamByName('Diretor').AsString := Diretor;
  DMSQL.cdsFilmes.Open;
end;
GOSTEI 0
Nelson Santos

Nelson Santos

27/05/2014

ganhe dinheiro com softwares 3D com Delphi 7
http://www.3dsistemas.com.br/#!curso-delpih3d/cisv
GOSTEI 0
POSTAR