duvida sobre transacoes

5 views
Skip to first unread message

Julio Cesar

unread,
Apr 5, 2009, 2:48:13 PM4/5/09
to infra...@googlegroups.com
ola a tds, ha mto nao uso o delphi profissionalmente, mas sempre faco alguma coisa aki em casa, participo de mtas listas e news. com relacao a programacao OO eu tenho uma duvida q me atormenta, como eh feito o controle transacional dos objetos na hora da gravacao?
 
exemplo:
faturamento de uma venda:
1 - baixar o estoque
2 - lancar financeiro
3 - etc
 
esses sao soh pra ter uma ideia, lancamento do estoque, do financeiro, da mudanca do estado da venda para faturada, lancamento de comissoes, dentre varias outras coisas, lah pelo meio das operacoes acontece um erro, como eh feito o rollback dos objetos? pq se ha algum problema pode gerar nota sem item, financeiro sem venda, e ai fura td o esquema de controle da empresa.
 
 
julio cesar
 
 

Solerman Kaplon

unread,
Apr 6, 2009, 1:41:06 PM4/6/09
to infra...@googlegroups.com
Julio Cesar escreveu:
esses sao soh pra ter uma ideia, lancamento do estoque, do financeiro, da mudanca do estado da venda para faturada, lancamento de comissoes, dentre varias outras coisas, lah pelo meio das operacoes acontece um erro, como eh feito o rollback dos objetos? pq se ha algum problema pode gerar nota sem item, financeiro sem venda, e ai fura td o esquema de controle da empresa.

Pra começar, o esquema de transações do próprio banco é usado. Depois pode ser feito transação a nível de aplicação, que normalmente funciona parecido com o do banco, ex:

try
  < operação >
  < operação >
  < operação >
  < operação >
  session.Commit;
except
  session.Rollback; // rollback desfaz tudo o que foi feito e não foi dado commit
  raise;
end;



ou usando a abordagem de savepoint, também bem comum (e mais claro):


try
  session.savepoint('notafiscal');
  < operação >
  < operação >
  < operação >
  < operação >
  session.Commit;
except
  session.RollbackToSavePoint('notafiscal'); // rollback desfaz tudo o que foi feito e não foi dado commit
  raise;
end;


ou na terceira, bem parecido com código OO;

transacao = session.startTransaction;
try
     < operação >
  < operação >
  < operação >
  < operação >
  transacao.Commit;
except
  transacao.Rollback;
  raise;
end;


Solerman

Julio Cesar

unread,
Apr 6, 2009, 3:11:00 PM4/6/09
to infra...@googlegroups.com
mas nesse caso vai ser uma mistura dos comandos da conexao e a manipulacao dos objetos, eu achei q fosse algo como uma secao q controlava a vida dos objetos e internamente a transacao
 
 
julio cesar

Marcos Barreto

unread,
Apr 6, 2009, 6:46:22 PM4/6/09
to infra...@googlegroups.com
julio, vc pode manipular todos os objetos antes de mandar para o dao que fará algo como o solerman descreveu, nao haverá mistura alguma. Vc pode preparar toda uma estrutura de objetos antes mesmo de começar as operaçòes de persistencia
Reply all
Reply to author
Forward
0 new messages