Form2.ADOquery1.close;
Form2.ADOquery1.sql.clear;
Form2.ADOquery1.sql.add('SELECT * FROM dj having '''+i+''' =:a and '''+i2+'''=:b');
Form2.adoquery1.Parameters.ParamByName('a').value:=self.Edit1.text;
Form2.adoquery1.Parameters.ParamByName('b').value:=self.Edit2.text;
Form2.ADOquery1.open;出错提示: 'HAVING 子句 ('yqmoney'=? And 'yqbz'=?) 未分组或集合。'. 

解决方案 »

  1.   

    用下面的语句也无法实现多重查询。 Form2.ADOquery1.close;
    Form2.ADOquery1.sql.clear;
    Form2.ADOquery1.sql.add('SELECT * FROM dj where '''+i+''' =:a and '''+i2+'''=:b');
    Form2.adoquery1.Parameters.ParamByName('a').value:=self.Edit1.text;
    Form2.adoquery1.Parameters.ParamByName('b').value:=self.Edit2.text;
    Form2.ADOquery1.open;
      

  2.   

    把'HAVING  改成 where
      

  3.   

    反过来试试
    Form2.ADOquery1.close; 
    Form2.ADOquery1.sql.clear; 
    Form2.ADOquery1.sql.add( 'SELECT * FROM dj where :a= '''+i+ ''' and  :b= '''+i2+ ''''); 
    Form2.adoquery1.Parameters.ParamByName( 'a').value:=self.Edit1.text; 
    Form2.adoquery1.Parameters.ParamByName( 'b').value:=self.Edit2.text; 
    Form2.ADOquery1.open; 
      

  4.   

    Form2.ADOquery1.close;  
    Form2.ADOquery1.sql.clear;  
    Form2.ADOquery1.sql.add(  'SELECT * FROM dj where i=:a and  i2=:b ');  
    Form2.adoquery1.Parameters.ParamByName(  'a ').value:=self.Edit1.text;  
    Form2.adoquery1.Parameters.ParamByName(  'b ').value:=self.Edit2.text;  
    Form2.ADOquery1.open;  
    这样行了
      

  5.   

    反过来
    Form2.ADOquery1.close; 
    Form2.ADOquery1.sql.clear; 
    Form2.ADOquery1.sql.add( 'SELECT * FROM dj where :a='''+i+''' and  :b='''+i2+''''); 
    Form2.adoquery1.Parameters.ParamByName( 'a ').value:=self.Edit1.text; 
    Form2.adoquery1.Parameters.ParamByName( 'b ').value:=self.Edit2.text; 
    Form2.ADOquery1.open; 
      

  6.   

    将having改成where。。having和where的不同之处在于执行的顺序不同 ,where子句只能接收来自from子句的输入,而having子句则可以接收来自group by 子句where子句和from子句的输入.一般情况下,where子句在分组之前过滤数据,having子句则过滤分组后的数据。
    having子句一般都和group by在一起使用较多..记住的是包含在having子句中的列是组列