GARANTIR DESCONTO

Fórum Fuga de memória. Onde? #346153

17/09/2007

0

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

Responder

Posts

17/09/2007

Carlosib

Sobe


Responder

Gostei + 0

17/09/2007

Massuda

Seu código é esse mesmo? Tem um case no meio do código que não faz sentindo algum.


Responder

Gostei + 0

18/09/2007

Carlosib

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; 



Responder

Gostei + 0

20/09/2007

Carlosib

Sobre


Responder

Gostei + 0

24/09/2007

Carlosib

sobe :oops:


Responder

Gostei + 0

26/09/2007

Paulo Samurai

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


Responder

Gostei + 0

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

Aceitar