下面代码是appserver上一个Provider的BeforeUpdateRecord事件中的代码,
关于Provider和Field.ProviderFlag的详细资料你参考李维写的d5分布开发的系统篇。
procedure TiCRMSaleDataRDM.dspVAccountBeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind; var Applied: Boolean);
var
i: Integer;
begin
//如果是调用DatasetProvider.ApplyUpdates就非常重要,因为在客户端静态设定
//字段的ProviderFlag中的fpInkey会在对ClientDataSet.Data赋值时丢失
for i := 0 to DeltaDS.RecordCount - 1 do
begin
if not (pfInKey in DeltaDS.FieldByName('ID').ProviderFlags) then
DeltaDS.FieldByName('ID').ProviderFlags :=
DeltaDS.FieldByName('ID').ProviderFlags + [pfInkey];
end;
end;
这个办法实际上就是在DataSetProvider提交之前设定一个fpInKey,这要求表必须有主键!
联系客服