有多项查询条件(>20),用户自选条件,比如10个,如何将满足查询条件项目数 >N,(N由用户自选.比如8)
的记录全部显示出来??

解决方案 »

  1.   

    把别人回答附加过来->>sql语言拼接->>sql语言拼接,说起来是一句话,但是做起来几乎就是不可能,因为N是变数.如果10个条件满足7个就是可以拼上百条语句,这怎么能行,还要存,还要union,感觉不行
      

  2.   

    用分页显示,SQL 语句+TCLIENTDATASET可以办到!!
      

  3.   

    看了半天还是不大明白。
    是不是这个意思。
    select * from table1 where 条件1 and 条件2 ……
    这个条件由用户自己选择?
      

  4.   

    一点也不难
    不过对楼主的(信誉值+问题点数)=100的巧合感到好奇
    希望下次放多点分
    sqlstr:='select * from table where 1=1'
    sqlstr:=sqlstr+@#@#$
    两分就写这么多吧
      

  5.   

    karry,只有靠你了一个人:你看明白了题目吗,不是那么简单的 题目意思就是 比如客户选择了10个条件,他可以把满足其中任意8个条件,9个条件,10个条件的记录全部取出来
      

  6.   

    我想科学的方法是
    SELECT * FROM 表 WHERE 进行固定
    后面的条件让用户自已去组合'设定值栏口' '连接符(AND,OR等) 添加按钮(将左边的设定添加到下面的MEMO控件中
    MEMO中显示:
        姓名='张三'
    AND 编号='0101'
    OR  ...然后通过MEMO.LINES.TEXT与上面的SELE进行连接你应该明白了,道理是这样的,方法很多
     
      

  7.   

    等了这么久,还是没等到.贴个方案,给大家参考一下.构造表的时候,最后加一个标记字段 int然后用户i个条件中 选择j个 只要满足k个就输出 在sql里面实现:update 表名 set 查询字段=0     //一个存储过程update 表名 set 查询字段+=1 where 条件1满足    …………update 表名 set 查询字段+=1 where 条件j满足   select * from 表名 where 查询字段>=k   当然我觉得不太满意,所以又再顶了一下,请大家帮忙仔细想想,好吗?
      

  8.   

    这是很容易就能实现的,用Sql拼接,如果你的的查询条件小于256个则直接声明一个String;,否则用分配内存的办法或动态数组(因为String的长度不大于255个)
    Var
       Str:String;
       I:Integer;    //记数器,有多少个查询条件被使用
    开始的时候
       Str:='';
    if 查询条件1被赋值 then
    begin
       Str:=Str+'1';
       Inc(I);
    end;
    else
       Str:=Str+'0';if 查询条件2被赋值 then
    begin
       Str:=Str+'1';
       Inc(I);
    end
    else
       Str:=Str+'0';//如此类推
    我们不光知道了有多少个查询条件而且知道了是哪些查询条件,这样在拼接SQL语句时就可以了,当然在拼接的时候还要注意多种字段如日期字段啊等先转换成字符串啊,这种方法我已经使用过了,只不过查询组合条件没有超过10个的,但是原理是一样的(在拼接时也要用一个计数器记录已经有几个拼上去了,自己体会一下吧,有什么问题给我发邮件[email protected]
      

  9.   

    在查询按钮的click事件中,先判断像Combox和Edit这样的控件的text是否为空,再将text的内容拼到SQL语句中,用table也可以
     if tb_zk.Active then
          tb_zk.Active := false;
        tb_zk.Filtered := false;
        if (trim(cb_dw.Text) <> '') and (trim(cb_fc.text) = '') and (trim(cb_bz.Text) = '') then
          tb_zk.Filter := 'a2=' + '''' + cb_dw.Text + ''''; //+ 'and a3=' +''''+ cb_fc.Text +''''+ ' and a4=' +''''+ cb_bz.Text+'''';
        if (trim(cb_dw.Text) <> '') and (trim(cb_fc.text) <> '') and (trim(cb_bz.Text) = '') then      tb_zk.Filter := 'a2=' + '''' + cb_dw.Text + '''' + 'and a3=' + '''' + cb_fc.Text + ''''; //+ ' and a4=' +''''+ cb_bz.Text+'''';
        if (trim(cb_dw.Text) <> '') and (trim(cb_fc.text) <> '') and (trim(cb_bz.Text) <> '') then      tb_zk.Filter := 'a2=' + '''' + cb_dw.Text + '''' + 'and a3=' + '''' + cb_fc.Text + '''' + ' and a4=' + '''' + cb_bz.Text + '''';
        tb_zk.Filtered := true;
        tb_zk.Active := true;
      

  10.   

    续上:如Str是'1001011111'则表示有第1个查询条件、第4个查询条件、第6个、第7个、第8个、第9个、第10个,而第2个、第3个、第5个查询条件没有被用户选择