procedure TIv1CFrm.BtnSADetailClick(Sender: TObject);
begin
  with DM1.ADOTbAffair do
  begin
    if (State = dsEdit) or (State = dsInsert) then
    begin
      SumQuanMoney();
      Post;//你是对DM1.ADOTbAffairafqt以及DM1.ADOTbAffairafsum进行附值操作,这个的Post是对DM1.ADOTbAffair进行保存~~不是一回事阿~~
    end;
    Edit;
  end;
end;

解决方案 »

  1.   

    procedure TIv1CFrm.SumQuanMoney();
    begin
      with DM1.ADOQueryIV do
      begin
        Close;
        SQL.Clear;
        SQL.Add('Select sum(afquan) as aftqt, sum(afsum) as aftsum from airc');
        SQL.Add('Where afno = ''' + DBEdit1.Text + '''');
        ExecSQL;
        Open;
      end;  with DM1.ADOTbAffair do
      begin
        if DM1.ADOQueryIV.FindField('aftqt').Value <> null then
        begin
          DM!.AdoTbaffair.Edit;
          DM1.ADOTbAffairafqt.Value := DM1.ADOQueryIV.FindField ('aftqt').Value;//********
          DM!.AdoTbaffair.Post;
        end;    if DM1.ADOQueryIV.FindField('aftsum').Value <> null then 
        begin
          DM!.AdoTbaffair.Edit;
          DM1.ADOTbAffairafsum.Value := DM1.ADOQueryIV.FindField('aftsum').Value;//********
          DM!.AdoTbaffair.Post;
        end;
      end;
      DM1.ADOQueryIV.Close;
    end;procedure TIv1CFrm.BtnSADetailClick(Sender: TObject);
    begin
      SumQuanMoney();
    end;
      

  2.   

    to taxi(游少爷):试过了,不行
      

  3.   

    如果*处改为对文本字段赋值,则不会报错。
    DM1.ADOTbAffairafmemo.Value := IntToStr(DM1.ADOQueryIV.FindField ('aftqt').Value);
      

  4.   

    to tikkypeng(一两狂死郎之天衣有缝):
    DM1.ADOTbAffairafqt以及DM1.ADOTbAffairafsum是DM1.ADOTbAffair的两个字段呀
      

  5.   

    不好意思~~看错了 ~~这种操作应该尽量避免  ADOQuery1XXX.Value := ADOQuery2XXX.Value;这种形式阿~~
    有时候确实容易出现问题的~~最好ADOQuery1XXX.Value := ADOQuery1XXX.AsString;也就是写出数据类型~~
      

  6.   

    with DM1.ADOTbAffair do
      begin
        if DM1.ADOQueryIV.FindField('aftqt').Value <> null then
        begin
          DM!.AdoTbaffair.Edit;
          DM1.ADOTbAffairafqt.Value := DM1.ADOQueryIV.FieldByName('aftqt').Value;//********
          DM!.AdoTbaffair.Post;
        end;    if DM1.ADOQueryIV.FindField('aftsum').Value <> null then 
        begin
          DM!.AdoTbaffair.Edit;
          DM1.ADOTbAffairafsum.Value := DM1.ADOQueryIV.FieldByName('aftsum').Value;//********
          DM!.AdoTbaffair.Post;
        end;
      end;
      

  7.   

    那还不是一样吗?
    问题应该不在那两个赋值语句,现在的问题是对ADOTbAffair中数值型字段赋值就报错,而文本型的则不会。即便是用DBEdit来手工赋值然后再Post,它也会报错,而对文本型的就不会!