Desativar IBTransaction sem desativar IBQuery
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...
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
Curtidas 0
Respostas
Claudia Nogueira
19/12/2012
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:
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;
GOSTEI 0
Daniel Pessoa
19/12/2012
É 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.
GOSTEI 0