procedure TMAINFORM.DSBGOODSOUTAfterPost(DataSet: TDataSet);
var lDeltaDataSet : TDeltaDataSet;
lField1, lField2 : string ;
begin
if not DSBGOODSOUT.DataSet.Active or not DSBGOODSOUT.DataSet.UpdatesPending then
Exit;
lDeltaDataSet:= TDeltaDataSet.Create(DSBGOODSOUT.DataSet);
try
while not lDeltaDataSet.Eof do
begin
case lDeltaDataSet.UpdateKind of
//修改
TUpdateKind.ukModify:
begin
//
lField1 := lDeltaDataSet.FieldByName('goodsid').AsString;
lField2 := lDeltaDataSet.FieldByName('qty').AsString;
Business.Forms.Dialogs.ShowMessage(lField1 + ':' + lField2);
end;
//插入
TUpdateKind.ukInsert:
begin
lField1 := lDeltaDataSet.FieldByName('goodsid').AsString;
lField2 := lDeltaDataSet.FieldByName('qty').AsString;
Business.Forms.Dialogs.ShowMessage(lField1 + ':' + lField2);
end;
//删除
TUpdateKind.ukDelete:
begin
lField1 := lDeltaDataSet.FieldByName('goodsid').AsString;
lField2 := lDeltaDataSet.FieldByName('qty').AsString;
Business.Forms.Dialogs.ShowMessage(lField1 + ':' + lField2);
end;
else
//
end;
lDeltaDataSet.NextStatus
end;
finally
lDeltaDataSet.Free;
end;
SysUtils.Abort;
end;
1.以上是我的代码:这个如果放在afterpost中,需要点两下保存才能保存成功,如果放在BeforeApplyUpdates中则点保存按钮则保存不成功,可以循环保存但是无法保存成功.
2对于新增和删除的记录取出来没有问题,但是如果是修改的,我代码中取了两个字段,如果这个字段的值没有变化那么取出来的是空字符串,比如我修改了一条记录的数量(qty),原来是8改成5,但是没有改goodsid,那么取出来的值:goodsid是空字符串,数量是5,而不是8.我希望取出来的值是修改之前的. |