Varios Begintrans, qual a ordem de Commit ?
Estou usando D6 com vários BD access com ADO e em algumas situações eu insiro dados em 3 BDs diferentes que são interligados.
Se eu inicio as transações assim:
ADOConection1.BeginTrans;
ADOConection2.BeginTrans;
ADOConection3.BeginTrans;
Existe uma ordem correta de Commit ?
Eu estou tendo problemas pois, atualiza BD2 e BD3 e não em BD1, o que tem me gerado inconsistencia de dados.
Agradeço qualquer ajuda.
Quadrado
Se eu inicio as transações assim:
ADOConection1.BeginTrans;
ADOConection2.BeginTrans;
ADOConection3.BeginTrans;
Existe uma ordem correta de Commit ?
Eu estou tendo problemas pois, atualiza BD2 e BD3 e não em BD1, o que tem me gerado inconsistencia de dados.
Agradeço qualquer ajuda.
Quadrado
Quadrado
Curtidas 0
Respostas
Edilcimar
21/01/2008
depende da dependência entre tabelas, se tabela2 é dependente de tabela1, vc deve comitar primeiro a tabela1 e depois a tabela2
GOSTEI 0
Djjunior
21/01/2008
sei não, não seria o caso de vc criar uma função exclusiva para dar os comiits seria algo do tipo:
ai vc troca todos seus commits por este comando, vc ainda poderia só por termos de padronização criar outra procedure em que vc passaria por parametro a conexão e daria commit somente nela
procedure Commit; begin if ADOConection1.InTransaction then ADOConection1.Commit; if ADOConection2.InTransaction then ADOConection2.Commit; if ADOConection3.InTransaction then ADOConection3.Commit; end;
ai vc troca todos seus commits por este comando, vc ainda poderia só por termos de padronização criar outra procedure em que vc passaria por parametro a conexão e daria commit somente nela
procedure Commit(conexcao: TADOConnection); override; begin if (conexcao = ADOConection1) and (ADOConection1.InTransaction) then ADOConection1.Commit; if (conexcao = ADOConection1) and (ADOConection2.InTransaction) then ADOConection2.Commit; if (conexcao = ADOConection1) and (ADOConection3.InTransaction) then ADOConection3.Commit; end;
GOSTEI 0