[firebase-br] Problema com transações

João Dias jdias.bjsoftware em gmail.com
Sex Jun 12 08:04:01 -03 2009


Bom dia Washington

Qual o tipo de transação que você está usando?

ReadCommitted é o tipo mais indicado para leitura e escrita com 
consistência.

O problema pode estar acontecendo com a abertura explícita no início do 
Form, como cada coisa no Fb roda sobre uma transação exceto um Generator,
os possíveis Selects que tu fizestes podem estar influenciando no 
Commit/Rollback dos dados.

Seria legal se você usasse a estrutura desconectada (DataSet) para 
armazenar os dados e no seu botão Gravar Abrir a transação e tentar 
gravar lá mesmo

AbrirTransacao();
Try
  TentarGravar();
  Committ();
Except on E:Exception do
  begin
     Rollback();
     raise Exception.Create(E.Message);
  end;
end;

Fazendo a mesma coisa para o Rollback

AbrirTransacao();
Try
  CancelarDataSet();
Except on E:Exception do
  begin
      raise Exception.Create(E.Message);
  end;
end;

Se fazer desta maneira não é possível para sua solução tente ver o que 
está interferindo na sua transação. Observe se o IBO está como 
AutoCommitt ativado também. O IBO tem controle de transações implícitas 
e explícitas, mas você precisa configurá-lo para isso. Infelizmente faz 
tanto tempo que não o uso que não lembro os parâmetros ao certo. Sei que 
o AutoCommitt é um deles.

Espero ter ajudado


-- 
João Dias de Carvalho Neto
jdias.bjsoftware em gmail.com

Quer Artigos de Patterns GOF e Patterns Corporativos com vídeo aula e Fontes Demonstrativos?
vá a http://www.jdiasneto.blogspot.com


NextCorp Informática escreveu:
> Caros colegas
>
> Estou com um problema em uma transação que está me deixando louco, isto que estou utilizando uma transação especifica para estes procedimentos.
>
> É um form que realiza uma consulta e depois emite boletos bancários.
>
> Quando abro o form inicio a transação explicitamente.
> Abro as tabelas e faço os selects normalmente, executa algumas sp de inclusões e depois imprime o boleto.
>
> Após imprimir, faço a pergunta básica: Confirma a transação ? Sim comita não rollback
>
> Abro novamente a transação para que a pessoa imprima os próximos boletos se necessário.
>
> Agora o problema:
>
> Se mando imprimir novamente, repete o ultimo nosso numero novamente, quer dizer a sp que incrementou o ultimo nosso numero corretamente, mesmo após comitar na verdade não comita.
>
> Dai descobri que fechando as tabelas e apos executar o commit e abrir a transação novamente e as tabelas envolvidas, ultimo nosso numero está gravado corretamente.
>
> Ok, beleza, resolvido.
>
> Vou testar um rollback....
>
> Bingo, faz o rollback, mas no momento que fecho o form e neste caso fecho as minhas querys, o que acontece ?
>
> Ele grava os registros que não deveriam ser gravados.
>
> Não sei mais o que fazer, simplesmente, não faz como deveria ser:
>
> Abrir a transação
> Processar
> Confirmar ou Não.
>
> Delphi5 e IBO 4.8.7, Fire 2.1.2.18118
>
>
>
>
>
> Atenciosamente
>
> Washington André Muller da silva
>
> #######################
> NextCorp Informática Ltda
> www.nextcorp.com.br
> nextcorp em terra.com.br
> 0xx-(51)-3037-6605
> #######################
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>   






Mais detalhes sobre a lista de discussão lista