【发布时间】:2011-06-30 09:24:58
【问题描述】:
阅读有关 TDataSetProvider.OnUpdateData 的 Delphi 帮助文件后 事件说明:
- 检查数据(例如,对于不应允许的值或数据更改),并引发异常以在更新发生之前取消应用。
- 在将数据发送到源数据集或数据库服务器之前更改数据(例如加密或解密值)。
我正在寻找有关如何更改 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。但是设置为 TField.NewValue 的值 'zzz' 没有被保存到数据库中。
我有一些特殊原因,这个更新必须在 OnUpdateData 中执行 更新前记录/更新后记录。
请指教。非常感谢。
【问题讨论】: