Delphi: Cancelamento de um TDataSet.Post em um Evento OnBeforePost
Pergunta
Em nossa tela de entrada de dados principal, temos um OK / Cancelar diálogo em caso OnBeforePost.
- OK deixa as coisas seguirem o seu curso
- Cancelar agora faz um
Dataset.Cancel;
O que faz o que significou, reverter as alterações e coloca o conjunto de dados em modo de navegação.
Isso é bom para a maioria dos clientes, mas nós foram perguntado se ele pode ser alterado para
- Cancelar , abortar o Post e estadia em modo de edição com as mudanças atuais mantidos.
Se quiser cancelar, eles podem usar o botão de cancelamento.
Olhando para a fonte para procedure TDataSet.Post;
não parece possível usar o evento desta forma.
Dose alguém tem alguma opinião sobre uma forma isso poderia ser feito?
Follow Up: é assim que eu escolhi para lidar com isso agora
case MessageDlg('Save Changes?', mtWarning, [mbYes, mbNo, mbAbort], 0) of
mrYes: ;
mrNo: Dataset.Cancel;
mrAbort: Abort;
mrNone: Abort;
end;
Solução
Chamando o Abort
método (a partir da unidade System
, se bem me lembro) gera uma exceção EAbort
silencioso, que cancela apenas a operação atual. Isso deve funcionar.
. (Btw: este método de cancelar uma operação databaset também é descrito em algum lugar profundo no sistema de ajuda como a forma 'normal' para conseguir isso --- que é onde eu tenho esta técnica a partir originalmente)