sql.add('');
sql.add('PIVOT 表2.nian  In (2000,2001,2002)');
这样写是通过的。程序运行没问题
现在想把年的2000,2001等按变量传递过去。不知道怎么写?
比如有变量y1,y1:=2000,那么应该怎么写?以下的写法通不过sql.add('pivot 表2.nian in (=:y,2001,2002)      );
parameters.fieldbyname('y').value:=y1;

解决方案 »

  1.   

    Parameters.ParamByName('y').value:=y1;
      

  2.   

    sql.add('pivot 表2.nian in (=:y,2001,2002)      );
    parameters.ParamByName('y').value:=y1;不好意思  刚才敲错了 就是这样写的 通不过
      

  3.   

    sql.add('pivot 表2.nian in (=:y,2001,2002)      ); 
    我感觉问题出在这里 ,不知道这样的sql里怎么写的
      

  4.   

    sql.add('PIVOT 表2.nian  In (:y,2001,2002)'); 
      

  5.   

    sql.add('');
    sql.add('PIVOT 表2.nian  In (2000,2001,2002)'); 
    以上没问题这样写还是通不过,提示数据类型不匹配。表2.nian这个字段是数字类型
    sql.add('');
    sql.add('PIVOT 表2.nian  In (:y,2001,2002)'); 
    parameters.ParamByName('y').value:=2000; 
      

  6.   


    sql.add('PIVOT 表2.nian & "年"  In ("2000年","2001年","2002年")');
    以上也没问题  且与
    sql.add('PIVOT 表2.nian  In (2000,2001,2002)'); 查询结果一样,就是表标题头不一样。是不是因为交叉表的缘故呢。2000既要做查询的条件(为数字类型),又要做表头(文本类型)。我数据库里的表2.nian的数据类型改为文本就通过了。
    可是我的数据库类型是不能改的。
    这种情况怎么做阿?
      

  7.   

    sql.add('PIVOT 表2.nian  In (2000,2001,2002)');
    ... 
     stringgrid1.Cells[0,i]:=Fieldbyname('2000').AsString;以上都通过的,可是怎么变量传进去再把值取出来啊
      

  8.   

    y1:=2000;sql.add('PIVOT 表2.nian & "年"  In (:y,"2001年","2002年")'); 
    Parameters.ParamByName('y').Value:=inttostr(y1)+'年';这样总算通过了
    可是把值取出来Fieldbyname('2000年')括号里面变量怎么写呢stringgrid1.Cells[0,i]:=Fieldbyname(???).AsString;