Delphi: Transação DBExpress (Vários exemplos)
var
Transacao: TTransactionDesc;
begin
SQLDataSet1.CommandText:= ‘select ID, NOME from CLIENTES where ID = :id;
SQLDataSet1.ParamByName(‘id’).AsInteger:= 1;
ClientDataSet1.Open; // Note que apenas o TClientDataSet deve ser aberto
with ClientDataSet1 do
begin
Append;
FieldByName(‘ID’).AsInteger:= 2005;
FieldByName(‘NOME’).AsString:= ‘ClubeDelphi’;
Post;
Transacao.TransactionID:= 1;
Transacao.IsolationLevel:= xilReadCommitted;
SQLConnection1.StartTransaction(Transacao);
if ApplyUpdates(0) = 0 then
SQLConnection1.Commit(Transacao)
else SQLConnection1.Rollback(Transacao);
end;
==============================================
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;
==============================================
var
Transacao: TTransactionDesc;
begin
with SQLDataSet1 do
begin
CommandText:= ‘insert into CLIENTES (ID, NOME) values (:id, :nome)’;
ParamByName(‘id).AsInteger:= 2005;
ParamByName(‘nome’).AsString:= ‘ClubeDelphi’;
Transacao.TransctionID:= 1;
Transacao.IsolationLevel:= xilReadCommitted;
SQLConnection1.StartTransaction(Transacao);
try
ExecSQL;
SQLConnection1.Commit (Transacao);
except
on E: Exception do
begin
SQLConnection1.Rollback(Transacao);
ShowMessage(‘Ocorreram erros.’ + #13 + E.Message);
end;
end;
end;
end;




0