就是在adoquery上如何在第一次的基础上进行第二次查询,甚至第3次…… 
就是说多个可以选的控件checkbox,我可以选一项进行查询,也可以选很多!
关键问题是在sql里面的where的连接怎么处理!!

解决方案 »

  1.   

    每次查询之前写个函数生成查询条件function QuesCondition: string;
    var  str1, ... strN :string;//每个对应一个CheckBox
    begin
      if checkboxXi.checked then
      begin
        str1 := ' fieldname = YourDefine'; 
        
      end
      else
      begin
        str1 := '';
      end;
      
      ... 
      result := str1 + ' and ' + ... + strN;//根据需要自己改。end;
      

  2.   

    var str:string;
    beging
    str:='select * from table where';
    if checkbox1.check then 
    str := str + '....';
    if checkbox2.check then
    str := str +.........
    .....
    adoquery1.close;
    adoqueyr1.sql.clear;
    adoquery1.sql.add(str);
    adoquery1.open;
      

  3.   

    你们说的那些我都试过,但是会遇到你们想象不到的问题!
    比如回复人: HeLiang7(阿亮) 所说:如果str2或者后面随便哪个为空的话,adoquery会出现错误!
    回复人: w78z(学之小妹妹) 所说:你的意思跟上面哪个差不多!
      

  4.   

    对,AND的问题,不好意思,低级错误,呵呵。
      

  5.   

    以下函数调用结果是WHERE中的条件,不是完整的SQL语句
    方案一:function QuesCondition: string;
    var  str1, ... strN :string;//每个对应一个CheckBox
    begin
      if checkboxXi.checked then
      begin
        str1 := ' fieldname = YourDefine'; 
        //从str2开始,这里写成str1 := ' And fieldname = YourDefine';
        //空格方面的问题你自己调一下
      end
      else
      begin
        str1 := '';
      end;
      
      ... 
      result := str1 +  ... + strN;//不加AND,AND已经在str中写了end;方案二:function QuesCondition: string;
    var  str1, ... strN :string;//每个对应一个CheckBox
    begin
      if checkboxXi.checked then
      begin
        str1 := ' fieldname = YourDefine'; 
        //空格方面的问题你自己调一下
      end
      else
      begin
        str1 := ' fieldname = %'  ;//这里的%表示你数据库中SQL语句可以识别的通配符
      end
      
      ... 
      result := str1 + ' and ' + ... + strN;//此处都加上AND,因为条件都不为空end;