Fórum Delphi 2010 - Acess Violation #448911

18/07/2013

0

Boa tarde,

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

Syspan Ltda

Responder

Posts

19/07/2013

Cleverson.

Isso já aconteceu comigo, vc criou algum procedimento para criar os formulários? Eu percebi que isso acontecia quando o formulário exibia dados de 2 tabelas ou mais, por exemplo, o cadastro de cliente, onde existia a tabela de cidades também.
Responder

Gostei + 0

20/07/2013

Syspan Ltda

Não tenho nenhum procedimento especifico, o que faço é que crio todos os formularios em tempo de execução, exemplo:

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
Responder

Gostei + 0

20/07/2013

Marco Salles

Não tenho nenhum procedimento especifico, o que faço é que crio todos os formularios em tempo de execução, exemplo:

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
Responder

Gostei + 0

22/07/2013

Syspan Ltda

Não tenho nenhum procedimento especifico, o que faço é que crio todos os formularios em tempo de execução, exemplo:

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
Responder

Gostei + 0

22/07/2013

Cleverson.

Coloca o FreeandNil(fCadastroCliente) no evento OnDestroy do Formulário de Cadastro do Cliente.
Responder

Gostei + 0

22/07/2013

Cleverson.

Coloca o FreeandNil(fCadastroCliente) no evento OnDestroy do Formulário de Cadastro do Cliente.
Responder

Gostei + 0

22/07/2013

Marco Salles

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


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
Responder

Gostei + 0

23/07/2013

Syspan Ltda

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


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
Responder

Gostei + 0

11/02/2015

Henrique Rodrigues

Boa tarde, testou?
Responder

Gostei + 0

11/02/2015

Henrique Rodrigues

Qual a diferença entre

fCadastroClientes:=TfCadastroClientes.create(nil)

e

fCadastroClientes:=TfCadastroClientes.create(self) ?
Responder

Gostei + 0

12/02/2015

Marco Salles

fCadastroClientes:=TfCadastroClientes.create(nil)

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
Responder

Gostei + 0

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

Aceitar