中间层中beforeupdaterecord中如何根据DELTADS与SOURCEDS来生成自已的更新SQL(ADO)?在线(40分)

  • 主题发起人 主题发起人 hubeizwj
  • 开始时间 开始时间
H

hubeizwj

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,本人在取更新数据时,DELTADS.FIELDBYNAME('FLD1').OLDVALUE
,DELTADS.FIELDBYNAME('FLD1').VALUE,,DELTADS.FIELDBYNAME('FLD1').NEWVALUE到底用哪个,才是真正更改过的值,如查有N人FLD,那如何意判断哪些字段有改动,哪些没改变???
 
你说的都不是
首先你得判定当前记录的状态,如果是update,那么,它上条记录即是原始的记录,对比当前记录和原始记录字段的差异,就知道是否修改过了。
对于具有嵌套数据集的情况,嵌套数据集的修改状态是包含在主数据集中未修改记录里面
 
看看代码例子
begin
TmpAErrorDs := AErrorDs;
TmpDataSet := DataSet;
CompareDs := TClientDataSetHack.Create(nil);
try
CompareDs.CloneCursor(TmpDataSet, False);
while not TmpDataSet.Eofdo
begin
case TmpDataSet.UpdateStatus of
usUnmodified : begin
//更新右子树
if Tree^.PRight <> nil then
do
Apply(DataSet, AErrorDs, Tree^.PRight);
//更新左子树
if Tree^.PLeft <> nil then
begin
TmpAErrorDs.Append;
do
Apply(TClientDataSetHack(TDataSetField(TmpDataSet.FieldByName(Tree^.PLeft^.FField)).NestedDataSet),
TClientDataSetHack(TDataSetField(TmpAErrorDs.FieldByName(Tree^.PLeft^.FField)).NestedDataSet),
Tree^.PLeft);
end;
end;
//记录被修改时, 明细记录本身是不保存在记录中的
usModified :do
Update;
//插入数据
usInserted : begin
do
Insert;
//更新右子树
if Tree^.PRight <> nil then
do
Apply(DataSet, AErrorDs, Tree^.PRight);
//更新左子树
if Tree^.PLeft <> nil then
begin
TmpAErrorDs.Append;
do
Apply(TClientDataSetHack(TDataSetField(TmpDataSet.FieldByName(Tree^.PLeft^.FField)).NestedDataSet),
TClientDataSetHack(TDataSetField(TmpAErrorDs.FieldByName(Tree^.PLeft^.FField)).NestedDataSet),
Tree^.PLeft);
end;
end;

usDeleted : begin
//更新右子树
if Tree^.PRight <> nil then
do
Apply(DataSet, AErrorDs, Tree^.PRight);
//更新左子树
if Tree^.PLeft <> nil then
begin
TmpAErrorDs.Append;
do
Apply(TClientDataSetHack(TDataSetField(TmpDataSet.FieldByName(Tree^.PLeft^.FField)).NestedDataSet),
TClientDataSetHack(TDataSetField(TmpAErrorDs.FieldByName(Tree^.PLeft^.FField)).NestedDataSet),
Tree^.PLeft);
end;

do
Delete;
end;

end;
TmpDataSet.Next;
end;
finally
CompareDs.Free;
end;
end;
 
althon64,不懂
 
althon64,我看不懂,
 
后退
顶部