Fórum Desativar IBTransaction sem desativar IBQuery #431287

19/12/2012

0

Olá pessoal, eu estava com problemas de deadlock em um sistema comercial que desenvolvi. Através das pesquisas que fiz, me indicaram sempre desativar o IBTransaction após gravar os dados no BD. Porém, isto gera um efeito colateral, isto está fechando também as IBQuery(s). E quando eu abro novamente, ele volta pro primeiro registro e não no que estava. Alguem tem alguma solução mais simplificada pra resolver isto sem ter que ficar refazendo a pesquisa depois de reativar a IBQuery?

Código usado pra salvar:

DataModule1.IBQCliente.Post;
DataModule1.IBQCliente.ApplyUpdates;
DataModule1.IBTransaction1.Active:=true;
DataModule1.IBQCliente.Transaction.CommitRetaining;
DataModule1.IBTransaction1.Active:=false;
DataModule1.IBQCliente.Active:=true;

O ideal seria manter a IBQuery aberta já que eu usei o CommitRetaining...
Daniel Pessoa

Daniel Pessoa

Responder

Posts

19/12/2012

Claudia Nogueira

O Commit fecha tudo que está ligado a ele.
Depois de abrir a query você tem que posicionar no registro que estava antes, então você tem que marcar a posição.

Exemplo:
Var
bmPosicao : TBookmark;
begin
bmPosicao := DataModule1.IBQCliente.GetBookmark;
DataModule1.IBQCliente.Post;
DataModule1.IBQCliente.ApplyUpdates;
DataModule1.IBTransaction1.Active:=true;
DataModule1.IBQCliente.Transaction.CommitRetaining;
DataModule1.IBQCliente.Close;
DataModule1.IBQCliente.Open;
    try
      DataModule1.IBQCliente.GotoBookmark(bmPosicao);
    except
      DataModule1.IBQCliente.First;
    end;
DataModule1.IBQCliente.FreeBookmark(bmPosicao);
end;
Responder

Gostei + 0

19/12/2012

Daniel Pessoa

É isto que eu estava fazendo, mas queria saber se não havia um jeito mais fácil. Porque pelo que pesquisa o Commit fecha, mas o CommitRetaining deveria deixar o registro aberto.
Responder

Gostei + 0

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

Aceitar