s := '(cbs_code_lid'+' like '''+cbscodeLid+GetSeparator(tempquery1, 'CST_CBS_CODE', ProjId)
      +'%'') or (cbs_code_lid'+'='''+cbscodeLid+''') ';
  s := Format('(%s)', [s]) ;  if IsShowAll then
  begin
    if  cbx1.checked then         //显示系统项
      filter := s//CreateFullCodeFilterStr('cbs_code_lid', cbscodeLid)
    else
      filter := '(' + s + ' and (CST_type = ''CBS''))';
  end else
  begin
    if  cbx1.checked then         //显示系统项
      filter := '(cbs_code_sid = ' + IntToStr(cbsCodeSid) + ')'
    else
      filter := '((cbs_code_sid = ' + IntToStr(cbsCodeSid) + ')' + ' and (CST_type = ''CBS''))';
  end;
    showmessage(filter);
  query.filtered := false;
  query.Filter := filter;
  query.filtered := true;
上面拼出来的字符串filter不能使用,请问,是哪里有问题吗?

解决方案 »

  1.   


    s := '(cbs_code_lid like '+ QuotedStr(cbscodeLid+GetSeparator(tempquery1, 'CST_CBS_CODE', ProjId) +'%') + ') or (cbs_code_lid=' + QuotedStr(cbscodeLid)+ ') ';
      s := Format('(%s)', [s]) ;  if IsShowAll then
      begin
        if  cbx1.checked then        //显示系统项
          filter := s//CreateFullCodeFilterStr('cbs_code_lid', cbscodeLid)
        else
          filter := '(' + s + ' and (CST_type = ''CBS''))';
      end else
      begin
        if  cbx1.checked then        //显示系统项
          filter := '(cbs_code_sid = ' + IntToStr(cbsCodeSid) + ')'
        else
          filter := '((cbs_code_sid = ' + IntToStr(cbsCodeSid) + ')' + ' and (CST_type = ''CBS''))';
      end;
        showmessage(filter);
      query.filtered := false;
      query.Filter := filter;
      query.filtered := true; 
      

  2.   

    这个Filter字符串在SQL server 中是可以运行的,但是就是写在adoquery.filter里出问题,提示参数问题,上面兄弟的代码有点问题
      

  3.   

    (((cbs_code_lid like '013.%') or (cbs_code_lid='013') ) and (CST_type = 'CBS'))
    真正拼出来是这样的语句,这个语句放在filter中不行吗?
      

  4.   

    不要用filter,ado的filter支持简单的过滤语句,对于复杂的语句,使用sql
      

  5.   

    ((cbs_code_lid='013' OR cbs_code_lid like '013.%' OR
      cbs_code_lid like '013/%' OR cbs_code_lid like '013\%' OR cbs_code_lid like '013-%') 
      and (CST_type = 'CBS')) 
    这个过滤都可以,可就上面的不行,太奇怪了,长度不如这个,也没这个复杂~~~~