Multiplas transações em uma única conexão com DBExpress 4.0 e novos comandos de transações, é possível?

11/01/2010

2

  Colegas Delphianos   Multiplas transações em uma única conexão com DBExpress 4.0 e novos comandos de transações, é possível?   Gostaria de saber se o DBExpress do Delphi 2010 (DBExpress 4.0)  através do uso dos métodos:
   
   
function  BeginTransaction: TDBXTransaction; overload;
function  BeginTransaction(Isolation: TDBXIsolation): TDBXTransaction; overload;   procedure CommitFreeAndNil(var Transaction: TDBXTransaction);
  
procedure RollbackFreeAndNil(var Transaction: TDBXTransaction);
procedure RollbackIncompleteFreeAndNil(var Transaction: TDBXTransaction);   do SqlConnection já suporta multiplas transações em uma única conexão?   Em um curso de DataSnap do do Renato Matos (site istudar)  ele mostrou com os métodos deprecados (DBExpress 3.0) que uma única conexão não sabe trabalhar com multiplas transações. Para resolver ele criou várias conexões. Mas eu esperava encontrar algo muito mais poderoso do DBExpress, trabalhar com várias transações em um única conexão.   Se isto ainda não é possível (pelo menos não ao meu pequeno conhecimento de DBExpress, sempre usei a dobradinha Firebird e IBO) fica a dica para os arquitetos da Embarcadero fazer com que seja possível trabalhar com várias transações em uma única conexão. Na minha visão conexão deve ser apenas um canal de comunicação entre o App Server e o DB para levar as intruções/statements. E transação deve um mecanismo independente da conexão.   Eu tentei criar métodos no server para retornar uma transação (TDBXTransaction) ao proxi do cliente, na expectativa de que eu pudesse passar para o CommitFreeAndNil e o RollbackFreeAndNil a transação que aquele cliente criou, numa tentativa de que as transações, mesmo usando uma única conexão do server ao DB, soubessem se individualizar sobre suas operação de inserção, deleção, update, ou seja, a transação de um cliente não deveria interferir na transação de outro cliente.   Código do App Server e invocado no proxi do cliente (o cliente guardaria a transação dele para devolver ao servidor a mesma transação na hora  de chamar o Commit ou RollBack) ....     class function Start: TDBXTransaction;
    class procedure Commit(Tran: TDBXTransaction);
    class procedure RollBack(Tran: TDBXTransaction); .....   class function TUtil.Start: TDBXTransaction;
begin
  Result := getConn.BeginTransaction;
end;   class procedure TUtil.Commit(Tran: TDBXTransaction);
begin
  getConn.CommitFreeAndNil(Tran);
end;   class procedure TUtil.RollBack(Tran: TDBXTransaction);
begin
  getConn.RollbackFreeAndNil(Tran);
end;   mas aí estes métodos não apareceram na classe proxi, suponho que seja pelo fato de que ainda não é possível transferir entre client/server um tipo TDBXTransaction. O que também poderia ser feito lá na Embarcadero, talvez.   É isto aí, aguardo comentários se isto é possível. Caso contrário, aguardamos as novidades pela Embarcadero.   Delmar
__,_._,___
Responder