我做一个数据库更新的程序,我想在Edit2中输入增加的Quantity(数量),但是编译能够通过,但是白执行时,就说我的nTemp附近有错误,请问各位高人,这是怎么回事,以下是我的代码
var
   nTemp: Integer;
begin
      nTemp := StrToInt(Edit2.text);
      Query1.Close;
      Query1.SQL.Clear;
      Query1.SQL.Add('Update stock ');
      query1.SQl.Add('set Quantity = Quantity + nTemp');
      query1.SQl.Add('where PartName = '''+ edit1.Text+'''');
      query1.SQl.Add('AND ProductName = '''+ edit3.Text+'''');

解决方案 »

  1.   

    StrToInt(trim(Edit2.text));试试
      

  2.   

    query1.SQl.Add('set Quantity = Quantity + ' + inttostr(nTemp));
    query1.SQl.Add('  where PartName = '''+ edit1.Text+'''');//where前面加空格
      

  3.   

    你出现问题的原因是在语句与与语句之间的空格的问题
    有的语句之间没有空格 编译的时候计算机认为是STRING所以编译可以通过
    但是执行的时候就会有错误
      

  4.   

    var
       nTemp: Integer;
    begin
          nTemp := StrToInt(Edit2.text);
          Query1.Close;
          Query1.SQL.Clear;
          Query1.SQL.Add('Update stock ');
          query1.SQl.Add('set Quantity = Quantity + nTemp');
          query1.SQl.Add('where PartName = '''+ edit1.Text+'''');
          query1.SQl.Add('AND ProductName = '''+ edit3.Text+'''');
    ---------------------------------
    var
       nTemp: Integer;
       SQLText:String;
    begin
          nTemp := StrToInt(Edit2.text);
          SQLText:='将要执行的SQL语句用字符串组合成有效的';
          Showmessage(SQLText);//显示出来看一看是否正确注意空格  With Query1 do
      begin   
        Close;
        SQL.Clear;
        SQL.Add(SQLText);
        ExecSQL;
      end;
      

  5.   

    在Where 和 And 前面加一个空格。编译时检查为合理字符串,但运行时为非法字符。
      

  6.   

    1、写个函数检查一下EDIT1的值是否全部是数字:
    如返回结果为FALSE,则存在非法字符
    function TForm1.checknum(str: string): boolean;
    var
      i:integer;
      s:string;
    begin
      s:=trim(str);
      if s<>'' then result:=true else
      begin
        result:=false;
        exit;
      end;
      for i:=1  to length(s) do
      begin
        if (ord(s[i])>57) or (ord(s[i])<48) then
        begin
          result:=false;
          exit;
        end;
      end;
    end;2、你的代码:
    var
      ntmp:integer;
    begin
      if not checknum(edit2.Text) then
      begin
        showmessage('edit1存在非法字符!');
        exit;
      end;
      ntmp:=StrToInt(Edit2.text);
      with query1 do
      begin
        close;
        sql.clear;
        sql.add(''Update stock set Quantity = Quantity+:AA ');
        sql.add('where PartName =:BB and ProductName = :CC ');
        parameters[0].value:=ntemp;
        parameters[1].value:=edit1.Text;
        parameters[2].value:=edit3.Text;
        ExecSQL;
      end;
    end;
      

  7.   

    修正,上面应为:showmessage('edit2存在非法字符!');
      

  8.   

    语法错了。nTemp属于delphi的变量,你写到sql string中去了。修改这一句:query1.SQl.Add('set Quantity = Quantity + nTemp');--改为:query1.SQl.Add('set Quantity = Quantity '''+ nTemp+'''');
      

  9.   

    with    Query do
      begin
        Close;
          SQL.Clear;
          sql.Add(Format('Update stock set Quantity = Quantity +%s',[Edit2.text]));
          sql.Add('where PartName = '''+ edit1.Text+'''');
          SQl.Add('AND ProductName = '''+ edit3.Text+'''');
      end;
      

  10.   

    试试另一种感觉吧:
    var
       nTemp: Integer;
    begin
          nTemp := StrToInt(Edit2.text);
          Query1.Close;
          Query1.SQL.Clear;
          Query1.SQL.Add('Update stock ');
          query1.SQl.Add('set Quantity =Quantity+:var1');
          query1.SQl.Add('where PartName = '''+ edit1.Text+'''');
          query1.SQl.Add('AND ProductName = '''+ edit3.Text+'''');
          Query1.ParamByName('var1').AsInteger:=ntemp;