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;
Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top