[firebase-br] Vários ClientDataSets e uma só transação
Fabrício Fadel Kammer
ffkammer em conchalnet.com.br
Qua Nov 26 12:49:38 -03 2008
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á!
Mais detalhes sobre a lista de discussão lista