请问字段名如何做SQL参数?能实现吗?
    QryTemp.SQL.Clear;
    SQLStr :='update temp set :cField =:nNew where id =:nId';//字段名如何做SQL参数?
    QryTemp.SQL.Add(SQLStr);
    QryTemp.ParamByName('cField').AsString := TableField ;
    QryTemp.ParamByName('nNew').AsInteger :=ACountNew[I];
    QryTemp.ParamByName('nId').AsInteger := I+1 ;
    QryTemp.ExecSQL;
    QryTemp.Close;
我试过好像不行,请指教!

解决方案 »

  1.   

    刚刚测试了一下
    这样做果然是不行的;
     
    with Self.ADOQuery1 do
    begin
      sql.Clear;
      sql.Add('update tab set :xx=:yy where b=:zz');//tab表名、b字段名
      Parameters.ParamByName('xx').Value := 'a';//字段名
      Parameters.ParamByName('yy').Value := 'New_Value';//新的值
      Parameters.ParamByName('zz').Value := 33;//条件
      ExecSQL;
    end;
      

  2.   

    为什么非得要用参数呢?
    这样就可以了
    -------------------------
    procedure TForm1.Button1Click(Sender: TObject);
    var
      TableField : string;
      sqlstring: string;
    begin
      TableField  := 'a';
      sqlstring := 'update tab set '+TableField +'=:yy where b=:zz';
      //TableField 在这里传进去
      with Self.ADOQuery1 do
      begin
        sql.Clear;
        sql.Add(sqlstring);
        Parameters.ParamByName('yy').Value := 'New_Value';
        Parameters.ParamByName('zz').Value := 33;
        ExecSQL;
      end;
    end;
      

  3.   

    楼主的方法可以啊,想探论下“字段名如何做SQL参数?能实现吗?”
      

  4.   

    可以的,也就是Kshape_zh(伟大的大伟//[给我个支点、我就可以翘起整个地球仪!]) ( ) 所说,动态表、动态存储过程、触发器等都是这样的
      

  5.   

    //楼主的方法可以啊,想探论下“字段名如何做SQL参数?能实现吗?”
    哈哈,楼主,自言自语。
      

  6.   

    可以的,SQL版中有好多这样的例子
      

  7.   

    execute语句可以执行字符串指定的SQL语句,也许可以实现楼主要的功能。