ClinetDataSet 模糊过滤中文的bug(5分)

  • 主题发起人 主题发起人 青云
  • 开始时间 开始时间

青云

Unregistered / Unconfirmed
GUEST, unregistred user!
如果 用
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://community.csdn.net/Expert/topic/4815/4815790.xml?temp=.6462213
 
这种智能过滤词组,单字的用另外一种方式。
另外在有indexfieldname时候,子表情况下,我是采用过滤设置主子表,没有用masterdatasource的那种
 
即使是
ClinetDataSet.Filter:='name=''江南制造总局''';
这样的,它的过滤也不一定是正确的,如果name是unicode的一定给出错误结果。
 
楼上 yeskert1 兄弟,您说的对。这种情况我也遇到过。
ClinetDataSet的这个bug 害得我没有办法用它了。
我觉得数据集控件最关键的地方就两点:
1、方便强大的过滤功能;
2、灵活的数据维护功能;
AdoDataSet的过滤还行,速度很快,没有特别明显的bug.
ClinetDataSet在过滤上,处理中文的时候,有莫名其妙的问题,不敢用它;
AdoDataSet.UpdateBatch不能处理多表查询单表关联问题。
哎,delphi7下面就没有一个用的顺手的DataSet .
 
用ClinetDataSet就用SQL来模拟过滤,那个.Filter是个垃圾,它就这个能耐,硬说是BUG。
 
用下面的这个不行:
ClinetDataSet.Filter:='name like ''%江南制造总局%''';
但是如果右模糊查询就是可以的:
ClinetDataSet.Filter:='name like ''江南制造总局%''';
真奇怪,为什么李维的书上就没有介绍过ClinetDataSet的一些缺陷呢。
 
本来ClientDataSet的Filter只支持右模查询的
 
什么人写的书都没有用,一切以实际为准
 
谁说clientdataset不支持模糊过滤?支持的么,只是不要用filter就行了
 
楼上有道理,你别用filder了,直接在sql里面like呗,delphi的控件有bug的很多,只要大家清楚就尽量避免了。


-------------------------------------------------------
www.coderpub.com
 
人在昆明 朋友,很早就看到您的名字,多谢您的帮助。
clientdataset 确实支持模糊过滤,只是对于中文,有点bug而已;
希望大家能提供方法避免这个问题。
 
不知道delphi2006的 ClinetDataSet 是否能解决这个问题,如果能解决。
我把delphi2006的 ClinetDataSet 的关键代码提出来,改写delphi7下的ClientDataSet.
 
中午给你结果
 
明天吧,嗬嗬,今天太忙了
 
http://liwei.csdn.net/Forum/topic.aspx?topicid=415
 
后退
顶部