Fórum commit / rollback em tres camadas usando clientdataset. #346597
24/09/2007
0
Eduardo Lara
Curtir tópico
+ 0Posts
25/09/2007
Paulo
Tabela pagto => tem pagamento a ser realizado
Tabela cheque => tem cheque a ser liberado
Na minha opinião, vc precisa de uma terceira tabela para guardar os Cheques emitidos, junto com o pagamento(neste caso o ID somente). Se for isso, seria interessante vc criar um chave estrangeira na Tabela cheque, recebendo o ID da Pagto. E criar um Flag na Cheque para marcar os cheques emitidos e o mesmo na Pagto para marcar os pagamento realizados. Caso não seja isso que eu entendi, desconsidere.
Gostei + 0
01/10/2007
Comodelphi
Gostei + 0
01/10/2007
Roneto
Tenho um sistema com o Banco de Dados SQL-SERVER onde a maioria de minhas tabelas estão com a Chave-Primária - Autoincremento (IDENTDY).
Quando vou trabalhar com operações do tipo Mestre-Detalhe, tipo o famoso PEDIDO(mestre) e ITENS_DO_PEDIDO(detalhe) preciso gravar o ID da Tab.Pedido na Tab.Itens_Pedido (faço isso na ´unha´, sem usar MasterSource/MasterField)
Quando executo o POST no ClientDataSet-Mestre eu não consigo obter no novo valor do campo PK para que em seguida eu tenha condições de gravar os registros com o valor do ID_Pedidos no ClientDataSet-Detalhes.
E toda essa operação tem que estar em uma única transação.
Mesmo executando um ApplyUpdates no ClientDataSet.Mestre o valor do campo Prim.Key não é atualizado.
Sou inciante em DBExpress e ´travei´ aqui.
Agradeço a Ajuda!
Gostei + 0
03/10/2007
Essistemas
function Tdm.met_Transacao(const par_Qual: WideString): WideString;
begin
If( par_Qual=´INICIAR´ ) Then
Begin
If( Not sqlConn.InTransaction ) Then
Begin
TD.TransactionID:=1;
TD.IsolationLevel:=xilREADCOMMITTED;
sqlConn.StartTransaction(TD);
Result:=´Transação iniciada!´;
end;
end;
//----------------------------
If( par_Qual=´COMMIT´ ) Then
Begin
sqlConn.Commit(TD);
Result:=´Registro(s) commitados com sucesso!´;
end;
//----------------------------
If( par_Qual=´ROLLBACK´ ) Then
Begin
sqlConn.Rollback(TD);
Result:=´Registro(s) cancelados com sucesso!´;
end;
end;
Na sua aplicação vc chama assim
dmC.CBPdv.AppServer.met_Transacao(´INICIAR´);
dmC.CBPdv.AppServer.met_Transacao(´COMMIT´);
dmC.CbPdv.AppServer.met_Transacao(´ROLLBACK´) ;
CbPdv é um TConectionBrooker, mais pode sem SocketConection.
Boa sorte !
Gostei + 0
11/10/2007
Renatobraungil
Estou com a mesma dúvida sobre controle de transação. Baseado no exemplo citado pergunto:
1- todas as transações vão ter o mesmo ID ??? (isso não vai gerar conflito de transação ???)
2- Onde eu crio o meu TD (TTransacionDesc) ?? no exemplo o TD está apenas sendo usado, onde (em que momento) ele foi criado.
Obrigado e sucesso a Todos !!!
Gostei + 0
11/10/2007
Macario
Olá.
Para você obter o novo codigo gerado pelo campo identity apos o ApplyUpdates
voce executa um select:
select @@identity as NOVOCODIGO
Isso lhe retornara o codigo do campo
entao voce atualiza o campo na tabela de itens de pedido.
espero ter ajudado
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)