Delphi 2010 - Acess Violation

Delphi

18/07/2013

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

Curtidas 0

Respostas

Cleverson.

Cleverson.

18/07/2013

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.
GOSTEI 0
Syspan Ltda

Syspan Ltda

18/07/2013

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
GOSTEI 0
Marco Salles

Marco Salles

18/07/2013

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
GOSTEI 0
Syspan Ltda

Syspan Ltda

18/07/2013

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
GOSTEI 0
Cleverson.

Cleverson.

18/07/2013

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

Cleverson.

18/07/2013

Coloca o FreeandNil(fCadastroCliente) no evento OnDestroy do Formulário de Cadastro do Cliente.
GOSTEI 0
Marco Salles

Marco Salles

18/07/2013

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
GOSTEI 0
Syspan Ltda

Syspan Ltda

18/07/2013

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
GOSTEI 0
Henrique Rodrigues

Henrique Rodrigues

18/07/2013

Boa tarde, testou?
GOSTEI 0
Henrique Rodrigues

Henrique Rodrigues

18/07/2013

Qual a diferença entre

fCadastroClientes:=TfCadastroClientes.create(nil)

e

fCadastroClientes:=TfCadastroClientes.create(self) ?
GOSTEI 0
Marco Salles

Marco Salles

18/07/2013

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
GOSTEI 0
POSTAR