Fórum Access Violation #339056

20/03/2007

0

Ao sair de um procedimento, ao passar pelo ultimo end da uma mensagem de access violation, alguem sabe o que é?


Prilady

Prilady

Responder

Posts

20/03/2007

Marco Salles

Algum objeto que não esta instancaido , que não existe ou que ja foi destruido

Tipo isso
var umObjeto:TButton; begin umObjeto:=TButton.create(nil); umObjeto.free; umObjeto.name:=´VaiDarZebra´; end;


Coloque o fragemento de código para mais esclarecimentos


Responder

Gostei + 0

20/03/2007

Prilady

O CÓDIGO É O SEGUINTE:

procedure TfrmMenu.btnPesquisarClick(Sender: TObject);
var
fornec01: tfornec01;
aierro:integer;
pcHost,pcDir,pcNive :array[0..79] of char;
begin
psaux:=´´;
StrPCopy(pcHost,asHost);
StrPCopy(pcDir,asPath);
StrPCopy(pcNive,asNivel);

aiErro := IniciaServidor(strnew(pchost));
If (aiErro = 0) then
AbreBancoDeDados(strnew(pcDir),strnew(pcNive),aiSegur,aiModo);
aiErro := ReiniciaSequencial(strnew(´fornec01´));

If (aiErro = 0) then
aiErro := LeProximoRegistroSequencial(strnew(´fornec01´),@fornec01);

uiTotal := 1;
aiErro := ReiniciaSequencial(strnew(´fornec01´));
If (aiErro = 0) then aiErro := LeProximoRegistroSequencial(strnew(´fornec01´),@fornec01);
uvDados[1] := TStringList.Create;
uvDados[2] := TStringList.Create;
While aiErro = 0 do
begin
psAux := ´99.999.999/9999-99´;
uvDados[1].Add(Picture(fornec01.a017cgc,psAux));
psAux := ´´;
uvDados[2].Add(Picture(fornec01.a017nom,psAux));
if fornec01.a017nom[1] = edtBusca.Text then
begin
sgFornecedores.Cells[0,uitotal] := fornec01.a017nom;
inc(uiTotal);
end;
aiErro := LeProximoRegistroSequencial(strnew(´fornec01´),@fornec01);
next
end;

FechaBancoDeDados;
FinalizaServidor;
end;


Responder

Gostei + 0

20/03/2007

Marco Salles

So uma pergunta .
Deixando como comentário as duas ultimas instruçoes

//FechaBancoDeDados; //FinalizaServidor;


Voce ainda tem o erro ::::

Tente tb deixar como comentário somente a Ultima

FechaBancoDeDados; //FinalizaServidor;



Responder

Gostei + 0

20/03/2007

Marco Salles

So uma pergunta .
Deixando como comentário as duas ultimas instruçoes

//FechaBancoDeDados; //FinalizaServidor;


Voce ainda tem o erro ::::

Tente tb deixar como comentário somente a Ultima

FechaBancoDeDados; //FinalizaServidor;



Responder

Gostei + 0

21/03/2007

Prilady

Mesmo tirando essas duas rotinas ainda da erro. Se eu tirar a função da dll leproximoregistrosequencial ele nao da mais erro, mas preciso dela pra pegar os valores, provavelmente é ela que esta gerando erro. Se tivesse como liberar ela da memoria depois de usa-la... mas não sei como fazer isso... obrigada


Responder

Gostei + 0

21/03/2007

Marco Salles

Se tivesse como liberar ela da memoria depois de usa-la... mas não sei como fazer isso... obrigada


Jeito tem... Mas engraçado que se voce[b:4ebbfb40c8] não[/b:4ebbfb40c8] libera-la não daria acesso violado , a nao ser que voce estivesse usando algo nela que não existisse mais...

Vejo que nesta sua dll voce so usa muito a função leproximoregistrosequencial , não seria uma opção chamar esta função em rumtime atraves de Tipo Procedimental ????

Por fim se voce suspeita que esta função que esta dando este erro , verifique qual são os objetos que estão presentes nelas e que foram destruidos .. Este tipo de erro a grosso modo se dá atarvés d acesso a algo que não esta mais na memória


Responder

Gostei + 0

21/03/2007

Prilady

Gente deu certo, muito obrigada, mas não me perguntem como que eu nem sei, acho que digitei o nome errado de algum objeto, obrigada


Responder

Gostei + 0

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

Aceitar