我为了记录字段修改前后的值,在adoquery的beforepost中加了一下代码:
var
j:integer;
adoquery:tadoquery;
name:string;
begin
    for j:=0 to adoquery1.fieldcount-1 do
    begin
      if string(adoquery1.fields[j].OldValue)<>adoquery1.fields[j].AsString then
      begin
        adoquery:=tadoquery.Create(application);
          adoquery.connection:=form1.ADOConnection1;
          adoquery.sql.add('select top 0 * from SH_RIZHI') ;
          adoquery.open;
          adoquery.append;
          adoquery.FieldByName('wid').AsString:=jinghao;
          adoquery.FieldByName('tbname').AsString:='岩屑描述记录';
          adoquery.FieldByName('tkeyname').AsString:='开始井深';
          adoquery.FieldByName('tname').AsString:='JP_yxm';
          adoquery.FieldByName('mender').AsString:= username;
          adoquery.FieldByName('mdate').AsDateTime:=Date;
            if  adoquery1.FieldList.Fields[j] is TStringField then
                  begin
                  adoquery.FieldByName('bvalue').AsString:=adoquery1.Fields[j].OldValue;
                  adoquery.FieldByName('avalue').AsString:=adoquery1.Fields[j].Value ;
                  end
            else if  adoquery1.FieldList.Fields[j] is tfloatfield then
                  begin
                   adoquery.FieldByName('bvalue').AsString:=formatfloat('0.00',adoquery1.Fields[j].OldValue);
                   adoquery.FieldByName('avalue').AsString:=formatfloat('0.00',adoquery1.Fields[j].Value);
                  end
            else if  adoquery1.FieldList.Fields[j] is TIntegerField then
                  begin
                    adoquery.FieldByName('bvalue').AsString:=inttostr(adoquery1.Fields[j].OldValue);
                    adoquery.FieldByName('avalue').AsString:=inttostr(adoquery1.Fields[j].Value);
                  end
            else if  adoquery1.FieldList.Fields[j] is tblobfield then
                  begin
                   adoquery.FieldByName('bblob').AsString:=adoquery1.Fields[j].OldValue;
                   adoquery.FieldByName('ablob').AsString:=adoquery1.Fields[j].Value;
                  end
            else if adoquery1.FieldList.Fields[j] is TSmallintField  then
                  begin
                    adoquery.FieldByName('bvalue').AsString:=inttostr(adoquery1.Fields[j].OldValue);
                    adoquery.FieldByName('avalue').AsString:=inttostr(adoquery1.Fields[j].Value);
                  end ;
          adoquery.post;
          adoquery.close;
          adoquery.free;
        break;
      end;
    end;
end;
在修改一个image字段时提示出错:
Could not convert variant of type (Array Byte) into type(Double)
用断点调试错误出在if string(adoquery1.fields[j].OldValue)<>adoquery1.fields[j].AsString then这一句
不知道怎么解决,问题很紧急,请各位大侠帮下忙!

解决方案 »

  1.   

    請將if string(adoquery1.fields[j].OldValue)<>adoquery1.fields[j].AsString then这一句改為if VarToStr(adoquery1.fields[j].OldValue)<>adoquery1.fields[j].AsString then
    因為oldvalue為Variant型數據
      

  2.   

    請將if string(adoquery1.fields[j].OldValue)<>adoquery1.fields[j].AsString then这一句改為if VarToStr(adoquery1.fields[j].OldValue)<>adoquery1.fields[j].AsString then
    因為oldvalue為Variant型數據我已測試過﹐沒問題
      

  3.   

    adoquery1.fields[j].OldValue)<>adoquery1.fields.AsVariant 
    看看