var
editamount:double;
beginstr1:='update GoodsDetail set G_Amount=isnull(GoodsDetail.G_Amount,0)+isnull(TempTable1.T_Amount,0)+(-editamount)from GoodsDetail,Temptable1 ';
  with adoquery1
  begin
     try
      close;
      sql.Clear;
      sql.Add(str1);
      ExecSQL;
      except
      showmessage('未知错误,保存失败!');
      end;
   end;
end;报错为editamount为错误的Column名,请问如何写这条SQL语句!      

解决方案 »

  1.   

    你的editmount是哪个表的字段,你要指明,例如写成 GoodsDetail.editamount
    同时我觉得你的GoodsDetail和Temptable1之间要有连接条件where,否则会造成笛卡儿集
      

  2.   

    str1:='update GoodsDetail set G_Amount=isnull(GoodsDetail.G_Amount,0)+isnull(TempTable1.T_Amount,0)+(-editamount)from GoodsDetail,Temptable1 ';
    没有-号吧
      

  3.   

    对不起!代码是这样的:
    var
    editamount:double;
    beginstr1:='update GoodsDetail set G_Amount=isnull(GoodsDetail.G_Amount,0)+isnull(TempTable1.T_Amount,0)+editamount from GoodsDetail,Temptable1 where Temptable1.T_Code=GoodsDetail.G_Code';
      with adoquery1
      begin
         try
          close;
          sql.Clear;
          sql.Add(str1);
          ExecSQL;
          except
          showmessage('未知错误,保存失败!');
          end;
       end;
    end;
    其中editamount是我定的的一个Double类型的变量。报错为editamount为错误的Column名,请问如何写这条SQL语句!
      

  4.   

    那就格式化Sql语句:
    Format('update GoodsDetail set G_Amount=isnull(GoodsDetail.G_Amount,0)+isnull(TempTable1.T_Amount,0)+%f.2 from GoodsDetail,Temptable1 where Temptable1.T_Code=GoodsDetail.G_Code',[editamount])
      

  5.   

    你的变量不应该写在引号当中,可以实施这样:
    str1:='update GoodsDetail set G_Amount=isnull(GoodsDetail.G_Amount,0)+isnull(TempTable1.T_Amount,0)'+editamount +'from GoodsDetail,Temptable1 where Temptable1.T_Code=GoodsDetail.G_Code';
    不然的话计算机误认为editamount是一个字段的名称。
    ----------------------------
      个人意见仅供参考。
      

  6.   

    editamount不是字段名是不能直接出现在SQL语句中的,
    可以象楼上说的那样,有加号分开。
      

  7.   

    format一下你的sql语句,或者'"+editamount+"'试试把我的意思是,在sql语句中的editamount这个位置应该是一个''包着的字符串,而你的字符串传进去没有'',试着解决一下吧,呵呵!!