[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