Multiplas transações em uma única conexão com DBExpress 4.0 e novos comandos de transações, é possível?
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
__,_._,___
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
__,_._,___
Delmar Observação)
Curtidas 0