1   sk:='code=:cd ';
2   adoquery1.sql.clear;
3   adoquery1.sql.add('select a,b,c from t1 where '+sk);
4   adoquery1.sql.add(' union select a,b,c from t2 where '+sk);
5   adoquery1.paramsbyname('cd').value:=''+edit.text+'';这句话那儿错了(t1与t2结构一样)
当把第4句话注释掉时就完全可以运行.还有一问
我有一字段其值为1-10之间的任一值,我要按这个字段的值1-3,4-6,6-10分组
最方便是那种方法
如果按1-10,3-10,5-10分组呢?

解决方案 »

  1.   

    少写了一句adoquery1.paramsbyname('cd').value:=''+edit.text+'';因为有两个参数,不是一个
      

  2.   

    第二个问题:用case when语句控制吧
      

  3.   

    好像应该是adoquery1.paramsbyname('cd').AsString:=''+edit.text+'';吧,而且要紧跟上句1   sk:='code=:cd ';
    2   adoquery1.sql.clear;
    3   adoquery1.sql.add('select a,b,c from t1 where '+sk);
    4   adoquery1.paramsbyname('cd').asstring:=''+edit.text+'';
    5   adoquery1.sql.add(' union select a,b,c from t2 where '+sk);
    6   adoquery1.paramsbyname('cd').asstirng:=''+edit.text+'';实在不行的话,直接把sk带进去试
      

  4.   

    注意应该是ADOQuery.Parameters.paramsbyname
    ADOQuery和TQuery有很相近的用法,
    但在这点上是不同的,
    D5程序员开发指南有明确指出。
      

  5.   

    谢谢大家!
    这个问题我已经圆满解决了
    问题出在在一个sql语句中是不允许有两个相同的ado参数值,那怕这两个参数
    的含义与值一模一样,我把第二个sk的改为 sk1:='code=:cd1 ';
    再加一句adoquery1.parameters.paramsbyname('cd1').value:=''+edit.text+'';
    就行了!!!!