Fórum Erro de Acces violation... #273156

18/03/2005

0

Caros colegas...

Estou com um problema na liberação de uma tela de cadastro.
O sistema tem um menu, EXE, e uma DLL que contem os cadastros.
Até aí tudo bem... ele abre a tela, cadastra salva.. tudo certo, mas...
em algumas situações que ainda não consegui descubrir ele apresenta um erro de ´Access violation at address 00ADC9C4 in module ´Administracao.dll´. Read of address 0A641448´ e trava, isso ocorre depois de ele entrar no evento onDestroy do Módulo de Dados da DLL (Que contem a camada de acesso ao Banco de Dados...)

Segue trecho do Código...
-------------------------------------------------------------------------------------
{Criação do Formulário...}
procedure TFCad_BancoTalentos.FormCreate(Sender: TObject);
begin

{Centraliza o Fomulário...}
CentralizaFrm(TForm(Self));

DmAdministracao:=TDmAdministracao.Create(Application);

DMAdministracao.QryConsEmpresas.Open;

DMAdministracao.QryBancoTalentos.Open;
DMAdministracao.QryBancoTalentos_Referencia.Open;

end;

-------------------------------------------------------------------------------------

{Finalização do Formulário...}
procedure TFCad_BancoTalentos.FormClose(Sender: TObject;
var Action: TCloseAction);
begin

if DmAdministracao <> nil then
begin

if DmAdministracao.QryBancoTalentos.State in [dsInsert,dsEdit] then
DMAdministracao.QryBancoTalentos.Post;

{Aplica as Aterações no Servidor}
DmAdministracao.TrAdministracao.CommitRetaining;
{-------------------------}

DMAdministracao.QryBancoTalentos.Close;
DMAdministracao.QryConsEmpresas.Close;


DmAdministracao.Free
end;

Action:=CaFree;
FCad_BancoTalentos := Nil;
end;

-------------------------------------------------------------------------------------

{Finalização do Módulo...}
procedure TDMAdministracao.DataModuleDestroy(Sender: TObject);
begin
if DMAdministracao <> nil then
begin
if TrAdministracao.InTransaction then
TrAdministracao.Commit;
end;
end;

Não sei se alguem da Lista já passou por isso, o que irrita é que não há uma regra, as vezes aparece o erro, as vezes não...

Uso o Delphi 5 SP1, IBX para acessar o Banco, Firebird 1.5.2 e SO é XP SP 2.

Agradeço a atenção...


Dessis Empresarial

Dessis Empresarial

Responder

Posts

18/03/2005

Andremuller

Algumas coisas que tu deve lembrar.

NUNCA usar variáveis globais, delete toda clausa var da classe

tipo

var
frmCad: TfrmCad

deleta isso e trabalha com propriedades.

Declara como primeira unit, tanto no exe que chama a dll, quanto na dll a unit ShareMem.

Pelo que me lembre esses são os maiores empecilhos.
Faz isso e vamos ver se resolve.


Responder

Gostei + 0

21/03/2005

Dessis Empresarial

Pois é amigo, fiz o que sugeriu, inserí a unit ShareMem e deletei o var que tinhas a Variável Publica e mesmo assim, dá erro na finalização do Data Module, tá estranho... parece piada... mas observei que quando entro em outro módulo do sistema... fecho e entro no Administração (Tela que relatei o problema...) o erro não ocorre... , se entro no sistema e vou diretamenta na tela do Administração, e entro...cadastro o que for necessário, mas quando saiu ele apresenta o erro de violação de acesso na Finalização do Módulo, ele entrar no onDestroy mas falha a liberação da memória....

Agradeço sua atenção...


Responder

Gostei + 0

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

Aceitar