После прочтения файла справки Delphi о TDataSetProvider.OnUpdateData
объяснение события:
- Изучите данные (например, для значений или изменений данных, которые не должны быть разрешены) и создайте исключения, которые отменяют применение обновлений до того, как они произойдут.
- Изменение данных (например, шифрование или дешифрование значений) перед их отправкой на исходный набор данных или на сервер базы данных.
Я ищу пример кода, как изменить данные для OnUpdateData.
Я старался изо всех сил искать решение. Вот чего я могу достичь:
Пример 1 :
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;
Проблема для примера 1 : К сожалению, я получаю сообщение об ошибке, что отсутствует какое-либо значение поля. После некоторой отладки я обнаружил, что есть обязательные поля с пустым значением.
Пример 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;
Проблема для примера 2 : При написании этого пути нам не нужно вызывать DataSet.Edit & DataSet.Post. Но значение 'zzz', для которого установлено значение TField.NewValue, не сохраняется в базе данных.
У меня есть особая причина, по которой это обновление должно выполняться в OnUpdateData.
BeforeUpdateRecord / AfterUpdateRecord.
Пожалуйста, совет. Большое спасибо.