Fuga de memória. Onde?
Olá pessoal,
estou usando IBX para acessar uma base de dados Firebird 2.0. Todo o acesso ocorre sem problema ´aparentemente´. Porém ao colocar uma consulta dentro de um timer ocorre um ´vazamento´ de memória.
Uso Delphi 7 e IBX 7.07
Meu código:
O que estou fazendo de errado?
estou usando IBX para acessar uma base de dados Firebird 2.0. Todo o acesso ocorre sem problema ´aparentemente´. Porém ao colocar uma consulta dentro de um timer ocorre um ´vazamento´ de memória.
Uso Delphi 7 e IBX 7.07
Meu código:
var Transacao : TIBTransaction; qry : TIBQuery; begin qry := TIBQuery.Create(nil); Transacao := TIBTransaction.Create(nil); try qry.Transaction := Transacao; qry.Database := DM.BancoDados; DM.BancoDados.DefaultTransaction := Transacao; //Query para inserção de uma pessoa with qry do begin Transacao.StartTransaction; try Close; SQL.Clear; Case Opcao of SQL.Add(´SELECT * FROM COMPROMISSOS WHERE DATA = :DATA´); ParamByName(´DATA´).AsDate := Date; Open; txtComp.Clear; while not eof do begin txtComp.Items.Add(FieldByName(´COMP´).AsString); next; end; Close; Transacao.CommitRetaining; except showMessage(´Erro!!´); Transacao.RollbackRetaining; end; end; finally qry.Free; Transacao.Free; end;
O que estou fazendo de errado?
Carlosib
Curtidas 0
Respostas
Carlosib
17/09/2007
Sobe
GOSTEI 0
Massuda
17/09/2007
Seu código é esse mesmo? Tem um case no meio do código que não faz sentindo algum.
GOSTEI 0
Carlosib
17/09/2007
Massuda o CASE foi erro ao copiar e colar o código de maneira simplificada para postar aqui.
var Transacao : TIBTransaction; qry : TIBQuery; begin qry := TIBQuery.Create(nil); Transacao := TIBTransaction.Create(nil); try qry.Transaction := Transacao; qry.Database := DM.BancoDados; DM.BancoDados.DefaultTransaction := Transacao; //Query para inserção de uma pessoa with qry do begin Transacao.StartTransaction; try Close; SQL.Clear; SQL.Add(´SELECT * FROM COMPROMISSOS WHERE DATA = :DATA´); ParamByName(´DATA´).AsDate := Date; Open; txtComp.Clear; while not eof do begin txtComp.Items.Add(FieldByName(´COMP´).AsString); next; end; Close; Transacao.CommitRetaining; except showMessage(´Erro!!´); Transacao.RollbackRetaining; end; end; finally qry.Free; Transacao.Free; end;
GOSTEI 0
Carlosib
17/09/2007
Sobre
GOSTEI 0
Carlosib
17/09/2007
sobe :oops:
GOSTEI 0
Paulo Samurai
17/09/2007
Uma ideia, desabilite o timer no inicio do metodo para reativar no finally. Problemas obscuros podem acontecer sempre que o timer dispara e o evento anterior ainda não terminou ;)
[]´s
[]´s
GOSTEI 0