[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