Fórum Programa trava após ApplyUpdates #267263

02/02/2005

0

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?

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

Escobar

Responder

Posts

02/02/2005

Christian_adriano

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.


Responder

Gostei + 0

02/02/2005

Escobar

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


Responder

Gostei + 0

02/02/2005

Biscalquini

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....


Responder

Gostei + 0

02/02/2005

Escobar

Biscalquini, agradeço pela ajuda, mas estou utilizando multicamadas. Quem dá ApplyUpdates é o cliente e no servidor fica o controle da transação.



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]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar