阅读有关 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 中执行
BeforeUpdateRecord/AfterUpdateRecord。
请指教。非常感谢。
Aren't
如果 DataSet.UpdateStatus = usUnmodified 则开始
and
如果 DataSet.UpdateStatus 在 [usInserted, usModified] 中,则
相互排斥吗?你可能有一个错误的结局——或者缺乏其他。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)