DBE TQuery+ClientDataSet

Delphi

19/03/2010

Estou com um probleminha.
Tenho 2 tabelas no ORACLE.

CHEQUE
CHEQUEFATURA

Preciso que quando cadastrar em CHEQUE, já cadastre em CHEQUE_FATURA.
Se der erro em algum momento, não grave em lugar nenhum.
Utilizei TQuery->TDatasetProvider->TClientDataSet->TDataSource para as duas tabelas.

Try
   Database1.StarTransaction
   cdsCHEQUEIDCHEQUE.AsInteger := {proxima sequence};
   cdsCHEQUEIDCHEQUE.Post;
   cdsCHEQUEIDCHEQUE.ApplyUpdates(-1);
   cdsCHEQUEFATURAIDCHEQUE.AsInteger :=  cdsCHEQUEIDCHEQUE.AsInteger;
   cdsCHEQUEFATURA.Post;
   cdsCHEQUEFATURA.ApplyUpdates(-1);
   Database1.Commit;
   Except On E: Exception Do
   Begin
      Database1.rollback;
      MessageDlg('Erro: ' + E.Message, mtError, [mbOK], 0);
      Exit;
   End;
End;

Até ai tudo bem, mas se desse erro de constraint (campo nulo por exemplo) na tabela CHEQUEFATURA, o commit era realizado mas só salvava na tabela CHEQUE.
Quer dizer, o post passa batido, mas no ApplyUpdates não retornava erro.
Li em um site para utilizar o DatasetProvider para este controle no evento OnUpdateError jogando o erro com raise exception.create(e.message), mas eu teria que dar CancelAplly no CDSCHEQUE?
Pois se o usuario acertar o campo e mandar gravar de novo, o cdsCHEQUE não estará em modo de edição. Tem como controlar isso?
Alexandre Carvalho

Alexandre Carvalho

Curtidas 0

Respostas

William Brazilino

William Brazilino

19/03/2010

ApllyUpdates(0)
GOSTEI 0
POSTAR