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