Se Query1 é um TQuery, vc não está herdando dele. Está definindo-o como owner.
Como vc mesmo vai liberar o query novo, defina-o como nil:

tq_tmp:=TQuery.Create(nil)

(Achei na net, googlando)

De uma forma geral pode-se dizer que a diferença básica entre os dois
métodos é a seguinte:

.Destroy: este método libera (destrói) literalmente o componente (o
objeto) da memória;

.Free: esse apenas verifica se o componente, se o objeto, já está
liberado da memória. Se ainda não, então ele o destrói (chamando o
método .Destroy). Acaba se tornando melhor, pois sendo assim não gera
exceção.

Explicando... É preferível que não se chame o método .Destroy
diretamente na aplicação. Ao invés disto é melhor chamar o método
.Free, pois este verifica se o referido objeto já não está liberado da
memória e somente então (ele mesmo) chama o .Destroy.

Em 20/01/08, Leonardo Quinino <[EMAIL PROTECTED]> escreveu:
>
> Pessoal seguinte, criei um componente em run time, herdando de outro
>
>  Ex:
>  tq_tmp := TQuery.Create( Query1 );
>  etc,etc.
>  tq_tmp.SQL.Text  := 'select id_codigo from clientes where id_codigo =
>  ' +QuotedStr( '1');
>  tq_tmp.Open;
>
>  pego o retorno se encontrou ou não o fim do arquivo
>
>  até então tá tudo certo , minha dúvida,,,,
>  isso é dentro de uma função,,, então é bom liberar esse componente da mémoria
>  estou usando para liberar da memoria o método .free
>
>  tq_tmp.free;
>
>  ////
>  1) qual a diferença entre usar  no lugar o .free   usar .destroy ?
>  2) o .free já faz o serviço completo de limpar da mémoria ?


-- 
Timeo hominem unius libri
Cogito ergo sum - Carpe diem

[]s
Guionardo Furlan
http://guionardo.blogspot.com

Responder a