Como modificar valores de campo no TDataSetProvider.OnUpdateData

Depois de ler o arquivo de ajuda do Delphi sobre a explicação do evento TDataSetProvider.OnUpdateData:

Examinar dados (por exemplo, valores ou alterações de dados que não devem ser permitidos) e criar exceções que cancelam a aplicação de atualizações antes que elas ocorraAltere os dados (por exemplo, criptografar ou descriptografar valores) antes de serem enviados ao conjunto de dados de origem ou servidor de banco de dado

Estou procurando um código de exemplo de comochange data para OnUpdateData. Eu tentei o meu melhor para procurar solução. Isto é o que eu posso alcançar:

Exemplo :

procedure TDBNextDocNo.DSPUpdateData(Sender: TObject; DataSet: TCustomClientDataSet);
begin
  DataSet.First;
  while not DataSet.EOF do begin
    if DataSet.UpdateStatus = usUnmodified then begin
      TPacketDataSet(Dataset).InitAltRecBuffers(True);
      if DataSet.UpdateStatus in [usInserted, usModified] then begin
        Dataset.Edit;
        DataSet.FindField('MyField').AsString := 'zzz';
        Dataset.Post;
      end;
    end;
  end;
  DataSet.Next;
end;

Problem for Example 1: Infelizmente, continuo recebendo o erro de que algum valor do campo está ausente. Depois de executar alguma depuração, descobri que existem campos obrigatórios com valor vazio.

Exemplo 2:

procedure TDBNextDocNo.DSPUpdateData(Sender: TObject; DataSet: TCustomClientDataSet);
begin
  DataSet.First;
  while not DataSet.EOF do begin
    if DataSet.UpdateStatus = usUnmodified then begin
      TPacketDataSet(Dataset).InitAltRecBuffers(True);
      if DataSet.UpdateStatus in [usInserted, usModified] then 
        DataSet.FindField('MyField').NewValue:= 'zzz';     
    end;
    DataSet.Next;
  end;  
end;

Problem for Example 2: Ao escrever desta maneira, não precisamos chamar DataSet.Edit & DataSet.Post. Mas o valor 'zzz' definido como TField.NewValue não está sendo salvo no banco de dado

Tenho algum motivo especial para que esta atualização seja executada em OnUpdateData, em vez de BeforeUpdateRecord / AfterUpdateRecord.

Conselho por favor. Muito obrigado

questionAnswers(2)

yourAnswerToTheQuestion