请教为什么TClientDataSet过滤时有一些条件可以过滤,但有一些条件不能过滤?
比如:
CltDS_Km22.Filter := 'jlch='+QuotedStr(Cx_jlchkm22.Text);
CltDS_Km22.Filtered := True;
这样可以过滤出结果,但是:
CltDS_Km22.Filter := 'ksch_km22='+QuotedStr(Cx_kschkm22.Text);
CltDS_Km22.Filtered := True;
这样就没过滤出想要的结果,这是为什么呢?而且我发现对一些字段可以过滤,但对另外一些字段就不能过滤。

解决方案 »

  1.   

    你说的很对,ClientDataSet是有BUG的,对汉字过滤有BUG,如果可以的话你可以使用ADOQuery替换这个组件,Ado的没有这个问题,建议最好不要在Filter里使用复杂的过滤条件。如果有问题可以到高级群:9642802,找管理员大海!
      

  2.   

    楼上说的对,TClientDataSet的Filter对汉字是有问题,如果不考虑用ADO延用TClientDataSet的话
    在TClientDataSet的OnFilterRecord里做处理//
    Accept := StrPos(DataSet.FieldByName('ksch_km22').AsString,Cx_kschkm22.Text) <> nil; 
      

  3.   

    我觉得楼主的问题不一定是程序Bug的事,
    还有可能和楼主待过滤的数据类型有关系:
    数值型的过滤条件可以这样写: (以下例子中ColName所表示的是待过滤的数据库列名)
      Filter:='ColName>'+Edit1.Text; 
      其真实的过滤字符会是这样的:ColName>10
    字符型的可以这样写:
      Filter:='ColName='''+Edit1.Text+'''';
      其真实的过滤字符会是这样的:ColName='张三',这里的列取值有单引号
    日期型的则需要这样写
      Filter:='ColName>"'+Edit1.Text+'"';
      其真实的过滤字符会是这样的:ColName>"1920-10-10 10:30:21",这里的列取值为双引号