Array
(
)

criando data module ...

Rafael Gomes
   - 27 jan 2006

ola amigos ...

nao sei se é usual fazer isso ... mas estou deixando os datamodules sem carregar no comeco da aplicacao, eu crio somente quando vou usar

para criar to usando o seguinte codigo ....

#Código

if not Assigned(DmRE)then
Application.CreateForm(TDmRE,DmRE);


e no evento onDestroy do datamodule coloco o codigo:

#Código
DmRE:= nil;


esse datamodule é destinado apenas a um formulario, criei mais por motivos de organizacao ... quando abro o formulario, crio o datamodule, e depois crio o form ... no evento onclose do form vai o seguinte codigo:

#Código
procedure TFrmRE.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= CaFree;
FrmRe:= nil;
DmRE.Destroy;
end;



agora me digam, isso esta certo???
é uma pratica segura???

conto com sua colaboracao ...
abraçoss


Aroldo Zanela
   - 27 jan 2006

Colega,

O importante é que ele esteja criado e disponível no momento que necessitar. Particularmente, prefiro criá-lo na inicialização do sistema.


Tnaires
   - 28 jan 2006

Olá
Acho q seu código está bom, com exceção do DmRE.Destroy. Ao invés disso, chame DmRE.Free.
Abraços


Rafael Gomes
   - 28 jan 2006

qual a diferenca dos metodos destroy e free????
[]ss


Tnaires
   - 28 jan 2006

Extraído da ajuda do Delphi:

Citação:
Do not call Destroy directly. Call Free instead. Free verifies that the object reference is not nil before calling Destroy.


Citação:
Unlike Destroy, Free provides a safeguard when destroying objects that are nil.

O método Free verifica se a referência ao objeto não é nil antes de chamar o Destroy.


Rafael Gomes
   - 28 jan 2006

entao chamando chamando free, logo em sguida é chamado o metodo destroy, e a vairavel fica valendo nil???

ou devo utilizar o seguinte codigo ..

#Código

DmRE.Free;
DmRE:= nil;



ou somente

#Código
DmRE.Free;


desculpe a pergunta, mas ficou meio confuso ...

[]ss
[/i]


Tnaires
   - 28 jan 2006

Não, a variável deve ser setada como nil manualmente mesmo. O Free só elimina o objeto, mas a referência continua apontando para o endereço do objeto.
Por isso, vc deve usar o Free, e logo em seguida, atribuir nil à referência.
Abraços