Transações com dbexpress
Gostaria da opinião de todos para a seguinte situação:
var
TudoOK: Boolean;
Transacao: TTransactionDesc;
begin
TudoOK:= False;
Transacao.TransactionID:= 1;
Transacao.IsolationLevel:= xilReadCommitted;
SQLConnection1.StartTransaction(Transacao);
// Aplicando os updates
if ClientDataSet1.ApplyUpdates(0) = 0 then
if ClientDataSet2.ApplyUpdates(0) = 0 then
if ClientDataSet3.ApplyUpdates(0) = 0 then
if ClientDataSet4.ApplyUpdates(0) = 0 then
TudoOK:= True;
// Note que TudoOK só será true se não houver nenhum erro em nenhum dos Updates
if TudoOK then
begin
SQLConnection1.Commit(Transacao);
ShowMessage(´Atualizações OK.´);
end
else
begin
SQLConnection1.Rollback(Transacao);
ShowMessage(´Ocorreram erros. Alterações descartadas.´);
end;
end;
Considerando que cada ApplyUpdates(0) gera uma transação (executando um commit ou Rollback no SGDB) e que SQLConnection1.Commit(Transacao) também gera um commit.
Pergunto: No caso de todas as transações emitidas por ApplyUpdates(0) terem sidas commitadas, a última transação (Commit(Transacao)) não estaria somente sobrecarregando o SGBD ? Existe alguma maneira de evitar isto ?
var
TudoOK: Boolean;
Transacao: TTransactionDesc;
begin
TudoOK:= False;
Transacao.TransactionID:= 1;
Transacao.IsolationLevel:= xilReadCommitted;
SQLConnection1.StartTransaction(Transacao);
// Aplicando os updates
if ClientDataSet1.ApplyUpdates(0) = 0 then
if ClientDataSet2.ApplyUpdates(0) = 0 then
if ClientDataSet3.ApplyUpdates(0) = 0 then
if ClientDataSet4.ApplyUpdates(0) = 0 then
TudoOK:= True;
// Note que TudoOK só será true se não houver nenhum erro em nenhum dos Updates
if TudoOK then
begin
SQLConnection1.Commit(Transacao);
ShowMessage(´Atualizações OK.´);
end
else
begin
SQLConnection1.Rollback(Transacao);
ShowMessage(´Ocorreram erros. Alterações descartadas.´);
end;
end;
Considerando que cada ApplyUpdates(0) gera uma transação (executando um commit ou Rollback no SGDB) e que SQLConnection1.Commit(Transacao) também gera um commit.
Pergunto: No caso de todas as transações emitidas por ApplyUpdates(0) terem sidas commitadas, a última transação (Commit(Transacao)) não estaria somente sobrecarregando o SGBD ? Existe alguma maneira de evitar isto ?
Urquizo
Curtidas 0