Transação em aplicação multicamadas/dbexpress

13/09/2004

0

Caros colegas,

tenho uma aplicacao multicamadas(COM+) usando no servidor dbexpress para a conexao com o banco de dados, gostaria de saber como implementar na aplicação cliente o controle de transaçao visto q o sqlconnection está no servidor de aplicação e na aplicação cliente só tenho um dcomconnection fazendo a ligação com o servidor, procurei no forum mas somente encontrei respostas para dbexpress mas não rodando em aplicações distribuidas.

ex: tenho uma tabela de pedidos e itens de pedido
insiro todos os dados na tabela de pedidos e dou um post (seguido de applyupdates) para obter a chave primaria, no meio do caminho o usuário desistiu de inserir os produtos do pedido e cancelou a operação, como fazer o rollback nesta situacao ?




qquer ajuda é importante


Ederson


Eselvati

Eselvati

Responder

Posts

13/09/2004

Chcoelho

Essa duvida que vc está tendo, é uma duvida de muitas pessoas!!! Já solicitei ajuda pelo site da Clube Delphi aos editores da revista, mas eles so enrolam! Pois ao invés deles fazerem uns artigos interessantes como esse de TRANSAÇÕES COM DBEXPRESS, ficam fazendo coisas que pouco interessa, como um dos ultimos artigos que foi como colocar numero de pagina no relatório :? Um artigo desse tipo é pra rir!!!


Responder

13/09/2004

Rômulo Barros

Essa duvida que vc está tendo, é uma duvida de muitas pessoas!!! Já solicitei ajuda pelo site da Clube Delphi aos editores da revista, mas eles so enrolam! Pois ao invés deles fazerem uns artigos interessantes como esse de TRANSAÇÕES COM DBEXPRESS, ficam fazendo coisas que pouco interessa, como um dos ultimos artigos que foi como colocar numero de pagina no relatório :? Um artigo desse tipo é pra rir!!!


Que ´macaquice´ sua, amigo .... Opa!!! pelo contrário: Que ´Coelhice´ :lol: :lol: :lol:


Responder

13/09/2004

Bon Jovi

Não dê ApplyUpdates antes do usuário confirmar toda a operação. Só fique dando Posts.

No botao OK em que o usuário confirma toda a operacao, chame todos os ApplyUpdates:
cdsPedido.ApplyUpdates(0);
cdsItens.ApplyUpdates(0);

Controlar transacao via aplicacao cliente nao sei se é seguro, nem se é aplicável, acho q foge do conceito. Mas se fosse o caso, vc criaria procedures na aplicação servidora para serem chamadas na aplicação cliente, onde estas executariam métodos do SQLConnection.


Responder

15/09/2004

Eselvati

Obrigado pela dica bon jovi mas seguindo o fluxo da aplicação


se depois do

cdsPedido.ApplyUpdates(0) ter gravado certinho no banco e der pau no

cdsItens.ApplyUpdates(0); ? ou seja vou ter um cabecalho de pedido gravado sem itens ?


uma possível solução seria eu mandar dar um delete no cdspedidos ?


Estou meio q perdido nesta situação


Responder

15/09/2004

Bico

Colega,

Proceda da seguinte forma:
Primeiro abra uma transação;
Dê ApplyUpdates;
Se não ocorrer erro dê Commit, caso contrário Rollback;

Exemplo:

IniciarTransação;
try
cdsPedido.ApplyUpdates(0);
cdsItens.ApplyUpdates(0);
Commit;
except
Rollback;
end;

Atenciosamente,
Fernando.


Responder

16/09/2004

Marcosalex

Caros colegas, tenho uma aplicacao multicamadas(COM+) usando no servidor dbexpress para a conexao com o banco de dados, gostaria de saber como implementar na aplicação cliente o controle de transaçao visto q o sqlconnection está no servidor de aplicação e na aplicação cliente só tenho um dcomconnection fazendo a ligação com o servidor, procurei no forum mas somente encontrei respostas para dbexpress mas não rodando em aplicações distribuidas. ex: tenho uma tabela de pedidos e itens de pedido insiro todos os dados na tabela de pedidos e dou um post (seguido de applyupdates) para obter a chave primaria, no meio do caminho o usuário desistiu de inserir os produtos do pedido e cancelou a operação, como fazer o rollback nesta situacao ? qquer ajuda é importante Ederson

Tive esse mesmo problema que voce.

No Servidor, voce deve criar pela Type Lybrary funções para as transações. E também

function TdmdQTServer.StartTransaction : integer; begin with TransacaoCorrente do begin TransactionID := 1; GlobalID := 1; IsolationLevel := xilREADCOMMITTED; CustomIsolation := 0; end; SQLConnectionGuiche.StartTransaction( TransacaoCorrente ); Result := 1; end; function TdmdQTServer.Commit : integer; begin SQLConnectionGuiche.Commit( TransacaoCorrente ); Result := 1; end; function TdmdQTServer.Rollback : integer; begin SQLConnectionGuiche.Rollback( TransacaoCorrente ); Result := 1; end;


E Transacao corrente no caso declarei como private
TransacaoCorrente : TTransactionDesc; // Descritor da transação corrente no DBExpress

No cliente, quando precisar iniciar uma transacao, é só chamar suas funcoes e elas estarão valendo para as querys dos servers.


Responder

16/09/2004

Eselvati

Era isso mesmo q estava precisando


valeu a ajuda



Ederson


Responder

03/07/2006

Wanderleywm

Também estou com problemas com transações em Multicamadas...
Eu inicio a transação normalmente, porém ela não permanece ativa. Estou usando dbexpress e servidor de aplicação soap....


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar