duvida transação em multi-camadas
boa noite!
Procurando pelo forum uma resposta para a minha duvida encontrei a seguinte resposta:
-----------------------------------------------------------------------------------var
TudoOK: Boolean;
Transacao: TTransactionDesc;
begin
try
{ **** Iniciando a transação **** }
Transacao.TransactionID:= 1;
Transacao.IsolationLevel:= xilReadCommitted;
SeuSQLConnection.StartTransaction(Transacao);
{ **** Aplicando os updates **** }
if ClientDataSet1.ApplyUpdates(0) = 0 then
begin
ClientDataSet2.Insert;
PreencheClientDataSet2;
ClientDataSet2.Post;
if ClientDataSet2.ApplyUpdates(0) = 0 then
TudoOK:= True;
// TudoOK só será true se não houver erro em nenhum Update
end;
{ **** Confirmando ou voltando a transação **** }
if TudoOK then
SeuSQLConnection.Commit(Transacao)
else
SeuSQLConnection.Rollback(Transacao);
except
// Ocorreu uma exceção qualquer no bloco ...
SeuSQLConnection.Rollback(Transacao);
end;
end;
-----------------------------------------------------------------------------------
Essa rotina funciona belezinha em aplicações client/servidor normal, so q no meu caso tem um agravante pelo fato do sqlConnection ficar na camada servidora, com isso eu nao tenho como fazer o commit/rollback.
Obs.: os clientdataset ficam na camada cliente, e é nesta camada q preciso fazer o controle da transação, quer dizer ... pelo menos acredito q seja!.
Obrigado pela atenção.. um abraço a todos
Procurando pelo forum uma resposta para a minha duvida encontrei a seguinte resposta:
-----------------------------------------------------------------------------------var
TudoOK: Boolean;
Transacao: TTransactionDesc;
begin
try
{ **** Iniciando a transação **** }
Transacao.TransactionID:= 1;
Transacao.IsolationLevel:= xilReadCommitted;
SeuSQLConnection.StartTransaction(Transacao);
{ **** Aplicando os updates **** }
if ClientDataSet1.ApplyUpdates(0) = 0 then
begin
ClientDataSet2.Insert;
PreencheClientDataSet2;
ClientDataSet2.Post;
if ClientDataSet2.ApplyUpdates(0) = 0 then
TudoOK:= True;
// TudoOK só será true se não houver erro em nenhum Update
end;
{ **** Confirmando ou voltando a transação **** }
if TudoOK then
SeuSQLConnection.Commit(Transacao)
else
SeuSQLConnection.Rollback(Transacao);
except
// Ocorreu uma exceção qualquer no bloco ...
SeuSQLConnection.Rollback(Transacao);
end;
end;
-----------------------------------------------------------------------------------
Essa rotina funciona belezinha em aplicações client/servidor normal, so q no meu caso tem um agravante pelo fato do sqlConnection ficar na camada servidora, com isso eu nao tenho como fazer o commit/rollback.
Obs.: os clientdataset ficam na camada cliente, e é nesta camada q preciso fazer o controle da transação, quer dizer ... pelo menos acredito q seja!.
Obrigado pela atenção.. um abraço a todos
Wiltefran
Curtidas 0