[firebase-br] Vários ClientDataSets e uma só transação
Ricardo Frenedoso
ricardo.desenvol em supersoft.com.br
Qua Nov 26 13:59:22 -03 2008
Você pode exatamente desse jeito. O cliente abrirá transações para os
selects, que serão imediatamente fechadas, e vc controla manualmente a
transação de inserção. Desse modo vc terá apenas transações curtas na
sua aplicação.
> Bom dia à todos,
>
> Estou aqui novamente com mais uma pergunta sobre ClientDataSet.
>
> Eu tenho uma rotina onde utilizo 3 componentes de acesso, agora estou
> migrando para ClientDataSet. Nessa rotina farei atualizações nos 3
> ClientDataSets e quero que essas alterações sejam gravadas em uma só
> transação para garantir que, caso algum erro ocorra na atualização de
> uma das 3 tabelas nenhuma alteração seja efetivada no banco.
>
> PS: As tabelas não possuem relacionamento master/detail.
>
> Sei que se eu iniciar e terminar as trasações manualmente
> (IBTransaction.StartTransaction/IBTransaction.Commit) o componente
> ClientDataSet não faz o controle transacional, porém essa rotina pode
> ser bem demorada, dependendo do filtro selecionado pelo cliente, então
> não gostaria de manter a transação aberta, gostaria de incluir todos
> os registro em uma só transação... não sei se posso fazer algo assim:
>
> //o clientdataset se responsabiliza pelo controle de início e fim de
> transação ao abrir as 3 tabelas, conforme abaixo
> ClientDataSet1.Open;
> ClientDataSet2.Open;
> ClientDataSet3.Open;
> //Aqui faço todas inclusões/alterações necessárias nas 3 tabelas
>
> //imediatamente antes de gravar os dados eu abro uma transação
> manualmente
> try
> IBTransaction.StartTransaction;
> ClientDataset1.ApplyUpdates;
> ClientDataset2.ApplyUpdates;
> ClientDataset3.ApplyUpdates;
> IBTransaction.Commit;
> except
> IBTransaction.Rollback;
> raise;
> end;
>
>
> Obrigado desde já!
>
> ______________________________________________
> 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