Programa trava após ApplyUpdates
Estou usando TTransactionDesc antes de aplicar o ApplyUpdates, porém se após executar o ApplyUpdates outro usuário também executar, o programa desse usuário fica travado até que eu aplique Commit ou Rollback na minha transação. Como identificar se há uma transação pedende no regitro e/ou não travar a outa aplicação?
Grato pela atenção
var TD: TTransactionDesc; procedure Transaction; begin Random; TD.TransactionID := Random; TD.IsolationLevel := xilREADCOMMITTED; SQLConnection1.StartTransaction(TD); ClientDataSet.ApplyUpdates(0); end;
Grato pela atenção
Escobar
Curtidas 0
Respostas
Christian_adriano
02/02/2005
Olá Colega ´Escobar´,
Utilizo o CDS (ClientDataSet) a pouco tempo, mais pelo que eu sei ele (CDS) controlas as suas transações.
eu utilizo da seguinte maneira:
**********************************************************
Se existirem alterações não executadas na propriedade Delta então execute-as
with ClientDataSet do
begin
if ChangeCount > 0 then
begin
ApplyUpdates(-1);
Refresh;
end;
end;
**********************************************************
Cancela todas as alterações
ClientDataSet.CancelUpdates;
**********************************************************
Desfaz a ultima alteração e move-se p/ o registro alterado
ClientDataSet.UndoLastChange(True);
**********************************************************
Desfaz todas as alterações no registro corrente
ClientDataSet.RevertRecord;
**********************************************************
Alguma duvida estou a disposição.
[]´s.
Christian.
Utilizo o CDS (ClientDataSet) a pouco tempo, mais pelo que eu sei ele (CDS) controlas as suas transações.
eu utilizo da seguinte maneira:
**********************************************************
Se existirem alterações não executadas na propriedade Delta então execute-as
with ClientDataSet do
begin
if ChangeCount > 0 then
begin
ApplyUpdates(-1);
Refresh;
end;
end;
**********************************************************
Cancela todas as alterações
ClientDataSet.CancelUpdates;
**********************************************************
Desfaz a ultima alteração e move-se p/ o registro alterado
ClientDataSet.UndoLastChange(True);
**********************************************************
Desfaz todas as alterações no registro corrente
ClientDataSet.RevertRecord;
**********************************************************
Alguma duvida estou a disposição.
[]´s.
Christian.
GOSTEI 0
Escobar
02/02/2005
christian_adriano, agradeço pela ajuda, mas nesse caso especifico preciso controlar a transação. Pois vou dar ApplyUpdates em varios CDS(tabelas) e caso a verificação em uma das tabela não atender a certos criterios devo dar Rollback em todas as transações (ApplyUpdates) anteriores. O problema é que se outro usuario de ApplyUpdates em uma das tabela sem que eu tenha dado o Commit na transação o programa desse usuario vai travar até que eu finalize a transão.
Grato pela atenção
Grato pela atenção
GOSTEI 0
Biscalquini
02/02/2005
Tente isso
var
TD: TTransactionDesc;
ID: Integer;
procedure Transaction;
begin
ID:=Random(65000);
TD.TransactionID := ID;
TD.IsolationLevel := xilREADCOMMITTED;
If not SQLConnection1.inTransaction Then
Begin
Try
ClientDataSet.ApplyUpdates(0);
SQLConnection1.StartTransaction(TD);
SQLConnection1.Commit;
Except
on E: Exception do
Begin
ShowMessage(´Erro ao aplicar as atualizações!´+#13+E.Message);
ClientDataSet1.CancelUpdates;
SQLConnection1.Roolback;
End;
End;
End;
end;
Deve funcionar....
var
TD: TTransactionDesc;
ID: Integer;
procedure Transaction;
begin
ID:=Random(65000);
TD.TransactionID := ID;
TD.IsolationLevel := xilREADCOMMITTED;
If not SQLConnection1.inTransaction Then
Begin
Try
ClientDataSet.ApplyUpdates(0);
SQLConnection1.StartTransaction(TD);
SQLConnection1.Commit;
Except
on E: Exception do
Begin
ShowMessage(´Erro ao aplicar as atualizações!´+#13+E.Message);
ClientDataSet1.CancelUpdates;
SQLConnection1.Roolback;
End;
End;
End;
end;
Deve funcionar....
GOSTEI 0
Escobar
02/02/2005
Biscalquini, agradeço pela ajuda, mas estou utilizando multicamadas. Quem dá ApplyUpdates é o cliente e no servidor fica o controle da transação.
Gostaria de saber como evitar o travamento do outro programa que tenta fazer o mesmo.
Grato pela atenção[/code]
var TD: TTransactionDesc; procedure Transaction; begin Random; TD.TransactionID := Random; TD.IsolationLevel := xilREADCOMMITTED; SQLConnection1.StartTransaction(TD); end; procedure TForm1.Alterar1(Sender: TObject); begin ClientDataSet1.ApplyUpdates(0); end; procedure TForm1.Alterar2(Sender: TObject); begin ClientDataSet2.ApplyUpdates(0); end; procedure TForm1.Alterar3(Sender: TObject); begin ClientDataSet3.ApplyUpdates(0); //nesse ponto chamo a função no servidor que da commit em minha transação end;
Gostaria de saber como evitar o travamento do outro programa que tenta fazer o mesmo.
Grato pela atenção[/code]
GOSTEI 0