Fórum Transacoes DBExpress #331928
23/10/2006
0
Pois bem, no DBExpress eu nao informo a transacao que a query participa, eu apensa inicio a transacao e confirmo. Se eu iniciar a transacao, efetuar comandos sql e ja gravar entao o seguinte trecho é valido:
var Transacao: TTransactionDesc; begin Transacao.TransactionID := 1; Transacao.GlobalID := 1; Transacao.IsolationLevel := xilREADCOMMITTED; SQLConnection.StartTransaction(Transacao); Query.ExecSQL; SQLConnection.Commit(Transacao); end;
Agora, a situação é que eu quero iniciar a transacao, efetuar varias alterações e só depois confirmar. Nao td de uma vez só. A seguir o trecho que iniciaria a transacao:
// Variavel Global nesse caso !!!! var Transacao: TTransactionDesc; (...) begin Transacao.TransactionID := 1; Transacao.GlobalID := 1; Transacao.IsolationLevel := xilREADCOMMITTED; SQLConnection.StartTransaction(Transacao); end;
Depois de vários Updates, insert, deleletes, etc o seguinte treco iria dar Commit na Transacao:
SQLConnection.Commit(Transacao);
Logicamente aparece o seguinte problema: Outras telas e outras alterações estariam ocorrendo ao mesmo tempo... Acontece que qd eu abro a transacao em uma tela e efetuo varias e varias alterações em qualquer outra, qd é confirmado o Commit da transacao todas as alterações serao confirmadas... Justamente pq nao consigo informar em qual das transacoes cada Query deve trabalhar... Ela trabalha em qualquer uma q esteja aberta.
Existe alguma forma de contornar isso? Ou realmente só será possivel trabalhar como no primeiro codigo que se inicia, efetua alterações e ja aplica o commit?
Pessoal. Desculpa pela pergunta gigantesca... Aguardo colaboração.
Capelari
Curtir tópico
+ 0Posts
23/10/2006
Adriano Santos
[url=http://forum.clubedelphi.net/viewtopic.php?t=58547&highlight=sqldataset+++clientdataset]Transações com DbExpress de forma Bidirecional[/url]
E mais algumas coisas sobre DBExpress:
[url=http://forum.clubedelphi.net/viewtopic.php?t=75031&start=0&postdays=0&postorder=asc&highlight=&sid=6c3d12b7f2e7a711939b7662cd0834db]dbExpress Interbase 6.5 Delphi 7.0[/url]
[url=http://forum.clubedelphi.net/viewtopic.php?t=75051]Mestre/Detalhe dbExpress[/url]
:wink: :wink:
Gostei + 0
24/10/2006
Macario
Apenas uma duvida, da maneira que voce quer usando variavel global por quanto tempo voce mantem a transacao aberta? Isso nao gera problemas de deadLock para voce?
[]´s
Gostei + 0
24/10/2006
Adriano Santos
O [b:ca3578e8e7]Macario[/b:ca3578e8e7] tem razão. A transação deve ser o mais breve possível, senão dá xabú.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)