function TForm5.IsFieldChanged(aDataSet: TkbmMWCustomClientQuery; aFieldName: string): Boolean;
var
  i: TkbmNativeInt;
  pRec, pOrigRec, pOldRec: PkbmRecord;
  aOldV, aNewV: Variant;
  IsFieldValueChanged:Boolean;
begin
    if ADataSet.FindField(aFieldName)=nil then
      raise EMemTableError.Create('当前数据集无此字段.');

    IsFieldValueChanged:=False;
    pRec := pkbmRecord(aDataSet.ActiveBuffer);
    if pRec = nil then
       Exit;
    pOrigRec:=pRec;
    while pOrigRec^.PrevRecordVersion <> nil do
    begin
         pOrigRec := pOrigRec^.PrevRecordVersion;
    end;

    if pRec^.UpdateStatus = usModified then
    with aDataSet do
    begin
        pOldRec := OverrideActiveRecordBuffer;
        try
              OverrideActiveRecordBuffer := pRec; // 指向修改后的数据
              aNewV := FieldByName(aFieldName).Value;
              OverrideActiveRecordBuffer := pOrigRec; // 指向修改前的数据
              aOldV := FieldByName(aFieldName).Value;
              if aNewV <> aOldV then
              begin
                IsFieldValueChanged:=True;
              end;
        finally
          OverrideActiveRecordBuffer := pOldRec;
        end;
    end;
    result:=IsFieldValueChanged;

end;

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。