O que acontece com a transação quando a estação trava?

Firebird

12/08/2005

oi pessoal. estou com a seguinte dúvida:
na parte de entrada de notas do meu sistema, na hora de gravar, eu dou um ApplyUpdates no ClientDataSet e depois executo uma Stored Procedure para atualizar o campo média dos produtos. Eu criei um bloco para evitar que a nota fosse gravada incorretamente. Exemplo abaixo:

try
ClientDataSet1.ApplyUpdates(0);
with IBSQL1 do
begin
if not Transaction.Active then Transaction.StartTransaction;
SQL.Clear;
SQL.Add(´EXECUTE PROCEDURE SP_CALCULAMEDIA;´);
ExecQuery;
Transaction.Commit;
end;
except
ShowMessage(´Erro ao gravar!´);
IBTransaction1.RollBack;
end;

ps.: ClientDataSet1->Provider->IBDataSet1->Transaction é a mesma transação que IBSQL1.Transaction;

com isso a qualquer momento que aconteça um problema para gravar os dados eu mando abortar tudo e eu não corro o risco de gravar a nota sem executar a stored.

mas a minha dúvida é a seguinte: e se depois de, por exemplo, dar o applyupdates o computador travar, o que acontece com a transação? O bloco except não pôde ser executado por causa do travamento e o commit não chegou a acontecer porque travou antes. O que o Firebird faz com essa transação?


Djorius

Djorius

Curtidas 0

Respostas

Afarias

Afarias

12/08/2005

|com isso a qualquer momento que aconteça um problema para gravar
|os dados eu mando abortar tudo e eu não corro o risco de gravar a nota
|sem executar a stored.

Na verdade vc corre o risco SIM pq o código não está correto.

O código correto seria:

with IBSQL1 do 
begin
  if not Transaction.InTransaction then 
    Transaction.StartTransaction; 
  try 
    ClientDataSet1.ApplyUpdates(0); 
    SQL.Clear; 
    SQL.Add(´EXECUTE PROCEDURE SP_CALCULAMEDIA;´);
    ExecQuery; 
    Transaction.Commit; 
  except 
    Transaction.RollBack; 
    ShowMessage(´Erro ao gravar!´); 
  end; 
end;


Note q o StartTransaction deve vir ANTES do ApplyUpdates.


|mas a minha dúvida é a seguinte: e se depois de, por exemplo, dar o
|applyupdates o computador travar, o que acontece com a transação?

É perdida.


T+


GOSTEI 0
POSTAR