pq da erro??

Delphi

29/12/2005

se eu deixar no bloco finally
Q.Free;

da um erro de acesso a memoria, alguem saberia me dizer pq??
como vo liberar esse objeto da memoria??

[]s

function TMySQL.fconsulta(csql: string): TADOQuery;
var
  Q: TADOQuery;
begin
  try
    Screen.Cursor:= crHourGlass;
    Q:= TADOQuery.Create(Application);
    Q.Connection:= Self;
    Q.Close;
    Q.SQL.Clear;
    Q.SQL.Text:= csql;
    Q.Open;
    result:= Q;
    Screen.Cursor:= crDefault;
  finally
    Q.Free;
  end;
end;



Fernando_cunha

Fernando_cunha

Curtidas 0

Respostas

Fernando_cunha

Fernando_cunha

29/12/2005

nao sei se tem correlacao, mas quando uso algum comando com ExecSQL e uso free para liberar o objeto da memoria funciona perfeitamente, mas quando preciso usar um select por exemplo, utilizao Q.Open, se eu tentar liberar da erro de acesso a memoria!!

nao sei se tem correlacao .. mas ja fica registrado!!
[]s


GOSTEI 0
Michael

Michael

29/12/2005

Primeiramente, não crie objetos passando Application com Owner. Use nil nesses casos. Depois, vc devolve o objeto criado para a função (Result := Q). Se vc der Free, quando tentar acessar o valor de retorno da função ele será nil e vc terá um erro de violação de acesso.

Leia o que eu escrevi no outro post e vai entender melhor.

[]´s

P.S: Estou indo embora para casa. Só volto ano q vem.. ;-) Poste suas dúvidas que respondo na segunda-feira.


GOSTEI 0
Fernando_cunha

Fernando_cunha

29/12/2005

vlw cara
bom ano novo!!
[]s


GOSTEI 0
Raserafim

Raserafim

29/12/2005

acho q assim resolve
filally
  Q.Close;
  Q.Free;



GOSTEI 0
POSTAR