在运用sql子句set时遇到麻烦,如果字段的名称不能事先设定,要根据程序运行的结果而定,这个字段是n1、n2、n3、n4、n5其中之一,不知这个set语句如何写,高人赐教。
dm.sqlx5.SQL.Add('update jsk ');
dm.sqlx5.SQL.Add('set n1=32');
........

解决方案 »

  1.   

    dm.sqlx5.SQL.Add('update jsk '); 
    dm.sqlx5.SQL.Add('set :n1=32'); dm.sqlx5.SQL.ParamByName('n1').Value='n1';
      

  2.   


    执行以下语句:
    错误提示: sqlx5:parameter'n1' not found
    可是parameter'n1'已定义了,不知为何?????===========================================================
    dm.sqlx5.SQL.Add('update jsk ');
    dm.sqlx5.SQL.Add('set :n1=0 ');
    dm.sqlx5.SQL.Add('where InvNo=:pp  and Payer=:kk and   IssuedDate=:dd ');
    dm.sqlx5.Parameters.ParamByName('n1').Value:='n1';///(或字段表达式)
    ..................
      

  3.   

    dm.sqlx5.SQL.Add('update jsk '); 
    dm.sqlx5.SQL.Add('set :n1=32'); dm.sqlx5.SQL.ParamByName('n1').Value='n1';
      

  4.   

    用个变量保存字段名啊..变量的值在更新之前根据程序中的选择自动修改..strCol := 'xx';
    dm.sqlx5.SQL.Add('update jsk set');
    dm.sqlx5.SQL.Add(strCol);
    dm.sqlx5.SQL.Add('=0 ');
    dm.sqlx5.SQL.Add('where InvNo=:pp  and Payer=:kk and  IssuedDate=:dd ');
      

  5.   

    4楼的前辈:
    这一句通不过编译,用的是d7dm.sqlx5.SQL.ParamByName('n1').Value:='n1';
      

  6.   


    dm.sqlx5.SQL.Add('update jsk '); 
    dm.sqlx5.SQL.Add('set n1=32'); 
    .................
    var
      c: string;
    ....
     c := 'n1';// c:= 'n2';
    ...
    dm.sqlx5.SQL.Add('update jsk '); 
    dm.sqlx5.SQL.Add('set '+ c+ '=32'); 
      

  7.   


    这个明显有问题嘛,这样写的话,sql语句成了:
    update jsk set 'n1'=32这里不能用参数的,只能老老实实地用字符串拼起来。