Fórum dbxpress e transactions #336584
21/01/2007
0
Quando eu tento, por exemplo, incluir um item numa venda já salva, recebo a mesnagem de erro: ´record not found or changed by another user´
Talvez o meu problema nem sejam as transações e eu esteja falando besteira, mesmo assim gostaria de consertar isso.
Grato!
Vitor Rubio
Curtir tópico
+ 0Posts
22/01/2007
Macario
Veja este tópico:[url=http://forum.clubedelphi.net/viewtopic.php?t=58547&highlight=bidirecionalurl]Transações com DbExpress de forma Bidirecional[/url]
Acredito que irá lhe ajudar. 8)
Gostei + 0
22/01/2007
Adriano Santos
Qq dúvida postae.
Gostei + 0
01/02/2007
Vitor Rubio
O que aconteceria se tivesse duas transações com o id 1?
Se eu estou trabalhando com mestre-detalhe, a venda e seus itnes, eu tenho que trabalhar com duas transções?
Grato!
Gostei + 0
01/02/2007
Adriano Santos
Mano, pelo que entendi não é necessário termos duas ID´s de transação, já que todos os ClientDataSet´s estarão ligados no mesmo SqlConnection. Olha isso:
var TudoOK: Boolean; Transacao: TTransactionDesc; begin TudoOK:= False; Transacao.TransactionID:= 1; Transacao.IsolationLevel:= xilReadCommitted; SQLConnection1.StartTransaction(Transacao); // Aplicando os updates if ClientDataSet1.ApplyUpdates(0) = 0 then if ClientDataSet2.ApplyUpdates(0) = 0 then if ClientDataSet3.ApplyUpdates(0) = 0 then if ClientDataSet4.ApplyUpdates(0) = 0 then TudoOK:= True; // Note que TudoOK só será true se não houver nenhum erro em nenhum dos Updates if TudoOK then begin SQLConnection1.Commit(Transacao); ShowMessage(´Atualizações OK.´); end else begin SQLConnection1.Rollback(Transacao); ShowMessage(´Ocorreram erros. Alterações descartadas.´); end; end;
Aqui abrimos uma única transação. Quem comita ou dá rollback é o SqlConection:
SQLConnection1.Commit(Transacao);
SQLConnection1.Rollback(Transacao);
Ou seja, tudo que estiver envolvido (leia-se conectado) na transção/SqlConnection será comitado.
Alguém me corrija se eu falei besteira.
Fui
Gostei + 0
02/02/2007
Vitor Rubio
Valew!
Gostei + 0
02/02/2007
Macario
Veja que nos exemplos do topico indicado, não é usado as propriedades MasterSource dos Datasets envolvidos.
Você faz mestre/detalhe usando esta propriedade?
[]´s
Gostei + 0
02/02/2007
Vitor Rubio
Valew!
Gostei + 0
02/02/2007
Macario
Eu não ´manjo´ deste tipo de ´ligações´, por isso não compreendi o seu metodo.
Na pratica trabalho com Datasets independentes, pois usando o controle de transação, posso ficar tranquilo sobre a integridade dos dados.
:roll:
Gostei + 0
02/02/2007
Vitor Rubio
Os dois jeitos funcionam.
Gostaria de saber como seria a sua abordagem, [b:19e7220153]Macario[/b:19e7220153]
como funciona manter o dataset desligado de tudo? como grava no banco depois? um loop que popula outro ou direto via SQL? como você deleta o mestre ou, ao cancelar o mestre, não inclui nenhum dos detalhes?
Grato!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)