[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