with QueryWsdSet do
    begin
      close;
      SQL.Clear;
      if SelectedNode.Level=0 then
        //SQL.Add('update settingT set wdsx=Ewsx.Text, set wdxx=Ewxx.Text, set sdsx=Essx.Text, set sdxx=Esxx.Text');
        SQL.Add('update settingT set wdsx=:wdsx, set wdxx=:wdxx, set sdsx=:sdsx, set sdxx=:sdxx');
      if SelectedNode.Level=1 then
        SQL.Add(format('update settingT set wdsx=:wdsx, set wdxx=:wdxx, set sdsx=:sdsx, set sdxx=:sdxx where cf=%d',[StrToInt(CurrNodeId)]));
      if SelectedNode.Level=2 then
        SQL.Add(format('update  settingT set wdsx=:wdsx, set wdxx=:wdxx, set sdsx=:sdsx, set sdxx=:sdxx where cf=%d and hw=%d',[ParentNodeId,CurrNodeId]));
      QueryWsdSet.ParamByName('wdsx').AsFloat := strToFloat(Ewsx.Text);
      QueryWsdSet.ParamByName('wdxx').AsFloat := strToFloat(Ewxx.Text);
      QueryWsdSet.ParamByName('sdsx').AsFloat := strToFloat(Essx.Text);
      QueryWsdSet.ParamByName('sdxx').AsFloat := strToFloat(Esxx.Text);
      QueryWsdSet.execsql;
    end;
提示说我SET附近有语法错误,到底怎么回事呀

解决方案 »

  1.   

    SQL.Add(format('update settingT set wdsx=:wdsx,wdxx=:wdxx,sdsx=:sdsx,sdxx=:sdxx where cf=%d',[StrToInt(CurrNodeId)]));
      

  2.   

    SQL.Add(format('update  settingT set wdsx=:wdsx, set wdxx=:wdxx, set sdsx=:sdsx, set sdxx=:sdxx where cf=%d and hw=%d',[ParentNodeId,CurrNodeId]));
          QueryWsdSet.ParamByName('wdsx').AsFloat := strToFloat(Ewsx.Text);
          QueryWsdSet.ParamByName('wdxx').AsFloat := strToFloat(Ewxx.Text);
          QueryWsdSet.ParamByName('sdsx').AsFloat := strToFloat(Essx.Text);
          QueryWsdSet.ParamByName('sdxx').AsFloat := strToFloat(Esxx.Text);
          QueryWsdSet.execsql;
    -------------------------------------------
    这里你都知道用参数,为什么上面就不用呢
      

  3.   

    哦,huangwenhuan(晕死一片) ,你一说,我好象明白了,先试下
      

  4.   

    //SQL.Add('update settingT set wdsx=Ewsx.Text, set wdxx=Ewxx.Text, set sdsx=Essx.Text, set sdxx=Esxx.Text');这括号里面会当着一个字符串,Ewsx.Text这个东东当然不能识别了,慢慢体会
      

  5.   

    不对吧,huangwenhuan(晕死一片),你好象没看清楚我的代码呢
      

  6.   

    //SQL.Add('update settingT set wdsx=Ewsx.Text, set wdxx=Ewxx.Text, set sdsx=Essx.Text, set sdxx=Esxx.Text');不好意思,我就看到你这句注释了的有点错 cf=%d and hw=%d',[ParentNodeId,CurrNodeId]));//把这里的也换成传参数也有错吗?
      

  7.   

    是的,你看下我现在地代码:
     begin
        with QueryWsdSet do
        begin
          close;
          SQL.Clear;
          if SelectedNode.Level=0 then
            //SQL.Add('update settingT set wdsx=Ewsx.Text, set wdxx=Ewxx.Text, set sdsx=Essx.Text, set sdxx=Esxx.Text');
            SQL.Add('update settingT set wdsx=:wdsx, set wdxx=:wdxx, set sdsx=:sdsx, set sdxx=:sdxx');
          if SelectedNode.Level=1 then
          begin
            //SQL.Add(format('update settingT set wdsx=:wdsx, set wdxx=:wdxx, set sdsx=:sdsx, set sdxx=:sdxx where cf=%d',[nId]));
            SQL.Add('update settingT set wdsx=:wdsx, set wdxx=:wdxx, set sdsx=:sdsx, set sdxx=:sdxx where cf=:nId');
            QueryWsdSet.ParamByName('nid').AsInteger := nid;
          end;      if SelectedNode.Level=2 then
          begin
            //SQL.Add(format('update settingT set wdsx=:wdsx, set wdxx=:wdxx, set sdsx=:sdsx, set sdxx=:sdxx where cf=%s and hw=%d',[ParentNodeId,nId]));
            SQL.Add('update settingT set wdsx=:wdsx, set wdxx=:wdxx, set sdsx=:sdsx, set sdxx=:sdxx where cf=:ParentNodeId and hw=:nId');
            QueryWsdSet.ParamByName('nid').AsInteger := nid;
            QueryWsdSet.ParamByName('ParentNodeId').AsInteger := strToInt(ParentNodeId);
          end;      QueryWsdSet.ParamByName('wdsx').AsFloat := strToFloat(Ewsx.Text);
          QueryWsdSet.ParamByName('wdxx').AsFloat := strToFloat(Ewxx.Text);
          QueryWsdSet.ParamByName('sdsx').AsFloat := strToFloat(Essx.Text);
          QueryWsdSet.ParamByName('sdxx').AsFloat := strToFloat(Esxx.Text);
          QueryWsdSet.execsql;
        end;
        QueryWsdSet.close;
      

  8.   

    set wdsx=:wdsx, set wdxx=:wdxx, set sdsx=:sdsx, set sdxx=:sdxx///set多了,一个就行
      

  9.   

    set 太多了,一个就够了。