Fuga de memória. Onde?

Delphi

17/09/2007

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:

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

Carlosib

Curtidas 0

Respostas

Carlosib

Carlosib

17/09/2007

Sobe


GOSTEI 0
Massuda

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

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

Carlosib

17/09/2007

Sobre


GOSTEI 0
Carlosib

Carlosib

17/09/2007

sobe :oops:


GOSTEI 0
Paulo Samurai

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


GOSTEI 0
POSTAR