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