Transação em aplicação multicamadas/dbexpress
13/09/2004
0
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
Posts
13/09/2004
Chcoelho
13/09/2004
Rômulo Barros
Que ´macaquice´ sua, amigo .... Opa!!! pelo contrário: Que ´Coelhice´ :lol: :lol: :lol:
13/09/2004
Bon Jovi
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.
15/09/2004
Eselvati
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
15/09/2004
Bico
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.
16/09/2004
Marcosalex
Tive esse mesmo problema que voce.
No Servidor, voce deve criar pela Type Lybrary funções para as transações. E também
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.
03/07/2006
Wanderleywm
Eu inicio a transação normalmente, porém ela não permanece ativa. Estou usando dbexpress e servidor de aplicação soap....
Clique aqui para fazer login e interagir na Comunidade :)