Fórum pq da erro?? #307111

29/12/2005

0

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

Responder

Posts

29/12/2005

Fernando_cunha

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


Responder

Gostei + 0

29/12/2005

Michael

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.


Responder

Gostei + 0

29/12/2005

Fernando_cunha

vlw cara
bom ano novo!!
[]s


Responder

Gostei + 0

30/12/2005

Raserafim

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



Responder

Gostei + 0

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

Aceitar