Fórum Delphi 2010 - Acess Violation #448911
18/07/2013
0
Estou tendo um problema, em um cliente, vários micros dele, esta acontecendo a mensagem de Acess Violation, e não é em um lugar especifico, ela ocorre aleatoriamente. Exemplo: Ele entra no cadastro de clientes, ai aparece a mensagem, ele sai, fecha o sistema e entre novamente no mesmo cadastro já não aparece mais. Alguém tem alguma idéia?
Obrigado
João Victor
Syspan Ltda
Curtir tópico
+ 0Posts
19/07/2013
Cleverson.
Gostei + 0
20/07/2013
Syspan Ltda
if fCadastroClientes = nil then
Application.CreateForm(tfCadastroClientes, fCadastroClientes);
fCadastroClientes.ShowModal;
fCadastroClientes.Release;
FreeAndNil(fCadastroClientes);
E no caso de tabelas, tenho varias nesse formulário.
Obrigado por enquanto
João Victor
Gostei + 0
20/07/2013
Marco Salles
if fCadastroClientes = nil then
Application.CreateForm(tfCadastroClientes, fCadastroClientes);
fCadastroClientes.ShowModal;
fCadastroClientes.Release;
FreeAndNil(fCadastroClientes);
E no caso de tabelas, tenho varias nesse formulário.
Obrigado por enquanto
João Victor
O release so deve ser utilizado quando ser quer destruir o form dentro dele mesmo . Não se aplica neste caso
quem é o fCadastroClientes ?????? E a variável Publica do Form ????
esses formulários estão na cexção avalaibleforms ????
[]sds
Gostei + 0
22/07/2013
Syspan Ltda
if fCadastroClientes = nil then
Application.CreateForm(tfCadastroClientes, fCadastroClientes);
fCadastroClientes.ShowModal;
fCadastroClientes.Release;
FreeAndNil(fCadastroClientes);
E no caso de tabelas, tenho varias nesse formulário.
Obrigado por enquanto
João Victor
O release so deve ser utilizado quando ser quer destruir o form dentro dele mesmo . Não se aplica neste caso
quem é o fCadastroClientes ?????? E a variável Publica do Form ????
esses formulários estão na cexção avalaibleforms ????
[]sds
Obrigado pela ajuda, no caso do Release entendi, fCAdastroClientes é o meu formulario de Cadastro de Clientes e esse formulário está nos Availables Forms.
Obrigado
João Victor
Gostei + 0
22/07/2013
Cleverson.
Gostei + 0
22/07/2013
Cleverson.
Gostei + 0
22/07/2013
Marco Salles
Obrigado
João Victor
Então
fCAdastroClientes é o VAR ???
outra coisa se vc esta utilizando no Availables Forms logo ele não foi instanciado . Certo ?
se vc utiliza ShowModal e logo após vc libera da memória para que o teste
if fCadastroClientes = nil then ?????? Desnecessário
logo a maneira indicada para instanciar este tipo de forms nesta arquitetura é fazer assim
fCadastroClientes:=TfCadastroClientes.create(nil); try fCadastroClientes.ShowModal; finally FreeAndNil(fCadastroClientes); end;
ps) Não coloque nada no onclose ou ondestroy do fCadastroClientes se fizer deste modo
Action:=cafree por exemplo .. Nada mesmo
[]sds
Gostei + 0
23/07/2013
Syspan Ltda
Obrigado
João Victor
Então
fCAdastroClientes é o VAR ???
outra coisa se vc esta utilizando no Availables Forms logo ele não foi instanciado . Certo ?
se vc utiliza ShowModal e logo após vc libera da memória para que o teste
if fCadastroClientes = nil then ?????? Desnecessário
logo a maneira indicada para instanciar este tipo de forms nesta arquitetura é fazer assim
fCadastroClientes:=TfCadastroClientes.create(nil); try fCadastroClientes.ShowModal; finally FreeAndNil(fCadastroClientes); end;
ps) Não coloque nada no onclose ou ondestroy do fCadastroClientes se fizer deste modo
Action:=cafree por exemplo .. Nada mesmo
[]sds
O fCadastroClientes é o VAR, vou fazer a mudança e testar, mais uma vez obrigado pela ajuda.
João Victor
Gostei + 0
11/02/2015
Henrique Rodrigues
Gostei + 0
11/02/2015
Henrique Rodrigues
fCadastroClientes:=TfCadastroClientes.create(nil)
e
fCadastroClientes:=TfCadastroClientes.create(self) ?
Gostei + 0
12/02/2015
Marco Salles
Proprietário é Nil ....... No caso após a utilização do Formulário (Objeto) , cabe a vc destruir o Formulário ... Indicado , tempo de vida curto
fCadastroClientes:=TfCadastroClientes.create(self) ?
Proprietário é o Self que pode ser um Outro Formulário ,ou um Panel ou um Objeto que descenda da TwinControl (que tenha características de
ser Container).......
No caso após a utilização do Formulário (Objeto) instanciado , cabe ao Proprietário Destruir o Objeto destruir o Formulário ...
Neste caso por exemplo quando self ser destruído , por alguém ou pela aplicação , ele será responsável pela destruição do
fCadastroClientes ... Se por acaso vc der em algum ponto do código um fCadastroClientes.Free , Irá receber um AV (Acesso Violado)
Porque o Objeto j foi destruído pelo seu Proprietário
Indicado , tempo de vida enquanto o Objeto Proprietário existir
http://www.activedelphi.com.br/forum/viewtopic.php?t=50111
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)