如果 用 
 ClinetDataSet.Filter:='name=''江南制造总局''';那么可以把 字段名为name的值为“江南制造总局” 过滤出来;但是如果想用模糊过滤
 ClinetDataSet.Filter:='name like ''%江南制造总局%''';
呵呵,ClinetDataSet就傻掉了。
 它识别不了,过滤不出来了。
我这个测试环境是在oracle 数据库下测试的,字段name的类型是 varchar2(50);这么简单的过滤为什么用AdoDataSet好好的,怎么用到ClinetDataSet就不行了呢?当然ClinetDataSet对英文的模糊过滤是没有问题的。就是中文有点问题。
也许把name的类型改成固定长度的就没有问题。
也许把ClinetDataSet 所对应的DataProvider的DataSet的字段静态加载固定列就好了。
但是我不想那样做。为何因为ClinetDataSet的这个bug,而让我们迁就它,作出许多影响我们开发效率的事情呢。希望有兴趣的朋友们讨论一下。怎样改写或者继承ClinetDataSet组件 来改正这个 过滤识别中文 存在的问题;如果有第三方的ClinetDataSet的替代组件也好啊!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3468703

解决方案 »

  1.   

    呵呵,这不是bug,是你对这个控件不了解而已,你可以在onfiler事件中处理
      

  2.   

    楼上的兄弟,我不明白您在filer事件中写
    些什么能够处理这个问题?
    希望不吝賜教
      

  3.   

    Accetp:=Pos('江南制造总局',DataSet.FieldByName('Name').AsString)<>0;
    OnFilter事件中写代码比较灵活,可没ClinetDataSet.Filter来的方便.
      

  4.   

    直接使用ClinetDataSet.Filter 过滤中文的确有问题。
    (包括Locate、Lookup)都有相同问题。
    解决方案就如同楼上所说。
      

  5.   

    TWideStringField;//全部改成TStringField
      

  6.   

    delphi5-2006都有同样问题,一直没有更正过