我在编写仓库管理系统,在插入数据的时候先对表中已有的商品进行判断,假如是空,则直接插入,假如插入商品已经存在,则把要插入商品的数量添加到已有的数量上去,下面是我的代码
with query1 do
    begin
    close;
    sql.Clear;
    sql.Add('insert into ruku(入库单号,商品名称,入库数量,入库日期,入库人,操作员)');//插入ruku表操作
    sql.Add('values(:x1,:x2,:x3,:x4,:x5,:x6)');
    ParamByName('x1').AsString:=edit1.Text;
    ParamByName('x2').AsString:=edit2.Text;
    ParamByName('x3').AsString:=edit3.Text;
    ParamByName('x4').AsString:=edit4.Text;
    ParamByName('x5').AsString:=edit5.Text;
    ParamByName('x6').AsString:=edit6.Text;
    try
     execsql;
     except
      showmessage('数据库错误');
     end;
    end;
with query1 do
  begin
  close;
  sql.clear;
  sql.add('select * from kucun where 商品名称=:x2');//查询kucun表中商品是否存在
  parambyname('x2').AsString:=edit2.Text;
  open;
  end;
k:=query1.Fields[0].AsString;
if trim(k)='' then//判断
with query1 do
  begin
  close;
  sql.Clear;
  sql.Add('insert into kucun(商品名称,商品数量)');
  sql.Add('values(:x2,:x3)');
  parambyname('x2').AsString:=edit2.Text;
  parambyname('x3').AsString:=edit3.Text;
  try
    execsql;
    except
      showmessage('数据库错误');
    end
  end
  else  pro_num:=strtoint(edit3.Text)+strtoint(query1.Fields[0].AsString);//这里我想把插入的商品数量edit3.text的值和查询到kucun表中商品数量相加,再把kucun表更新,单步调试在这里报错' 'is not a valid integer value,我不知道哪里除了问题
with query1 do
  begin
  close;
  sql.Clear;
  sql.Add('updata kucun')  end;
      showmessage('数据已经保存');    query1.Close;
    edit1.Clear;
    edit2.Clear;
    edit3.Clear;
    edit4.Clear;
    edit5.Clear;
    edit6.Clear;
    query2.Active:=false;
    query2.Active:=true;
end;

解决方案 »

  1.   

    k:=query1.Fields[0].AsString; 
    if trim(k)='' then//判断
    begin//增加一个 
    with query1 do 
      begin 
      close; 
      sql.Clear; 
      sql.Add('insert into kucun(商品名称,商品数量)'); 
      sql.Add('values(:x2,:x3)'); 
      parambyname('x2').AsString:=edit2.Text; 
      parambyname('x3').AsString:=edit3.Text; 
      try 
        execsql; 
        except 
          showmessage('数据库错误'); 
        end;
       end;//增加一个 
      end 
      else   pro_num:=strtoint(edit3.Text)+strtoint(query1.Fields[0].AsString);//这里我想把插入的商品数量edit3.text的值和查询到kucun表中商品数量相加,再把kucun表更新,单步调试在这里报错' 'is not a valid integer value,我不知道哪里除了问题 
    with query1 do 
      begin 
      close; 
      sql.Clear; 
      sql.Add('updata kucun')   end;
      

  2.   

    刚刚试过了,还是提示同样的错误,我前面只定义了2个变量
    var  pro_num:integer;
      k:string;
      

  3.   

    strtoint(edit3.Text)+strtoint(query1.Fields[0].AsString);//这里edit3.Text为空或query1.Fields[0].AsString为空导致strtoint出现异常
      

  4.   

    pro_num:=strtoint(edit3.Text)+strtoint(query1.Fields[0].AsString);
    确定edit3.text和query1.field[0].asstring中全部是数字?
      

  5.   

    声明一个 
    var
      sSql:String;sSql := 'insert into ruku(入库单号,商品名称,入库数量,入库日期,入库人,操作员)'
    with query1 do
    begin 
      Sql.txt:= sSql;在此可设置断点来看SQL语句 包括中间的值是否正确。不要用 ParamByName( 这样不容易找出错在什么地方。
      

  6.   

    {
    具体代码没有看,根据你提供的内容,给你一个思路,
    1.进行商品判断,如果商品存在则把数量添加进去。
    2.如果商品不存在则把商品添加到表里面。
      手写一点代码供参考}
      with adoquery1 do
      begin
        close;
        sql.clear;
        sql.add('select * from 表名 where 商品名称='''+edit1.text+'''');
        open;
      end;
      if adoquery1.recordcount>0 then{找到商品名称存在}
       begin
         with adoquery1 do
         begin
           close;
           sql.clear;
           sql.add('update 表名 set 数量 where 商品名='''+edit1.text+'''');
           ......
         end;
      end
      else{商品不存在}
      begin
        close;
        sql.clear;
        sql.add('insert into 表名(字段名)values(字段对应的变量)');
        ......
      end;
      

  7.   

    sql.add('select 商品数量 from kucun where 商品名称=:x2');//查询kucun表中商品是否存在 
    把*改成你的字段名 
    k:=query1.Fields[0].AsString; 
    然后你在后面直接有K就可以了,当k或edit3.text为空时,你要给个默认值0。
      

  8.   

    换了一种方法,已经解决问题了,主要是数据库中商品数量是char类型的问题,谢谢大家