clientDataSet过滤问题,求老司机指导

22222bbb 2017-03-02 02:26:46
self.Qry_Data.Filtered:=false;
self.Qry_Data.FilterOptions:=[foCaseInsensitive];
self.Qry_Data.Filter:=FFilter.Condiction; //这里条件如果太长就会报一个内存错误,不知道怎么回事
self.Qry_Data.Filtered:=true;

我的条件是动态的,用户可以编辑的,一定数量的条件是没有问题的,如果条件组合成很长的组合的话,就报错了,哪怕是很简单的条件也会。哪位遇到过,或者有什么办法解决
条件类似:Fname like '%孙%' or Sex='男' or ......or ......or
...全文
386 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
22222bbb 2017-03-08
  • 打赏
  • 举报
回复
引用 5 楼 lyhoo163 的回复:
[quote=引用 4 楼 santiaodahan 的回复:] [quote=引用 3 楼 santiaodahan 的回复:] [quote=引用 2 楼 mrwangfei 的回复:] clientData里面的数据并不是链接数据库查询得来的,所以第一种方法行不通的。 我现在用的也是第二种,因为条件是可以自定义的,达到一定长度后就报一个地址错误,这个不知道是不是clientdata本身的问题, 到现在还没解决,不知道有没有其他方法去过滤,是多字段过滤的。
Fname like '%孙%',这种写法你确定能查询出你要的结果?此写法似乎对中文支持不好。[/quote] 也可以在ClientDataSet的FilterRecord事件中实现过滤,例如: Accept:=Pos('孙', DataSet.FieldByName('Fname').AsString)>0;[/quote] Fname like '孙%', 可用 Fname like '%孙%',不能用 汉字过滤不支持。 [/quote] 我用的xe8这样过滤可以的哦
santiaodahan 2017-03-08
  • 打赏
  • 举报
回复
引用 6 楼 mrwangfei 的回复:
[quote=引用 5 楼 lyhoo163 的回复:] [quote=引用 4 楼 santiaodahan 的回复:] [quote=引用 3 楼 santiaodahan 的回复:] [quote=引用 2 楼 mrwangfei 的回复:] clientData里面的数据并不是链接数据库查询得来的,所以第一种方法行不通的。 我现在用的也是第二种,因为条件是可以自定义的,达到一定长度后就报一个地址错误,这个不知道是不是clientdata本身的问题, 到现在还没解决,不知道有没有其他方法去过滤,是多字段过滤的。
Fname like '%孙%',这种写法你确定能查询出你要的结果?此写法似乎对中文支持不好。[/quote] 也可以在ClientDataSet的FilterRecord事件中实现过滤,例如: Accept:=Pos('孙', DataSet.FieldByName('Fname').AsString)>0;[/quote] Fname like '孙%', 可用 Fname like '%孙%',不能用 汉字过滤不支持。 [/quote] 我用的xe8这样过滤可以的哦[/quote] 至少Delphi7有这个问题,新版本应该是修复了。
lyhoo163 2017-03-07
  • 打赏
  • 举报
回复
引用 4 楼 santiaodahan 的回复:
[quote=引用 3 楼 santiaodahan 的回复:] [quote=引用 2 楼 mrwangfei 的回复:] clientData里面的数据并不是链接数据库查询得来的,所以第一种方法行不通的。 我现在用的也是第二种,因为条件是可以自定义的,达到一定长度后就报一个地址错误,这个不知道是不是clientdata本身的问题, 到现在还没解决,不知道有没有其他方法去过滤,是多字段过滤的。
Fname like '%孙%',这种写法你确定能查询出你要的结果?此写法似乎对中文支持不好。[/quote] 也可以在ClientDataSet的FilterRecord事件中实现过滤,例如: Accept:=Pos('孙', DataSet.FieldByName('Fname').AsString)>0;[/quote] Fname like '孙%', 可用 Fname like '%孙%',不能用 汉字过滤不支持。
santiaodahan 2017-03-07
  • 打赏
  • 举报
回复
引用 3 楼 santiaodahan 的回复:
[quote=引用 2 楼 mrwangfei 的回复:] clientData里面的数据并不是链接数据库查询得来的,所以第一种方法行不通的。 我现在用的也是第二种,因为条件是可以自定义的,达到一定长度后就报一个地址错误,这个不知道是不是clientdata本身的问题, 到现在还没解决,不知道有没有其他方法去过滤,是多字段过滤的。
Fname like '%孙%',这种写法你确定能查询出你要的结果?此写法似乎对中文支持不好。[/quote] 也可以在ClientDataSet的FilterRecord事件中实现过滤,例如: Accept:=Pos('孙', DataSet.FieldByName('Fname').AsString)>0;
santiaodahan 2017-03-07
  • 打赏
  • 举报
回复
引用 2 楼 mrwangfei 的回复:
clientData里面的数据并不是链接数据库查询得来的,所以第一种方法行不通的。 我现在用的也是第二种,因为条件是可以自定义的,达到一定长度后就报一个地址错误,这个不知道是不是clientdata本身的问题, 到现在还没解决,不知道有没有其他方法去过滤,是多字段过滤的。
Fname like '%孙%',这种写法你确定能查询出你要的结果?此写法似乎对中文支持不好。
22222bbb 2017-03-07
  • 打赏
  • 举报
回复
clientData里面的数据并不是链接数据库查询得来的,所以第一种方法行不通的。 我现在用的也是第二种,因为条件是可以自定义的,达到一定长度后就报一个地址错误,这个不知道是不是clientdata本身的问题, 到现在还没解决,不知道有没有其他方法去过滤,是多字段过滤的。
lyhoo163 2017-03-02
  • 打赏
  • 举报
回复
clientDataSet 的过滤,通常二种方式: 1、SQL读取数据时,通过条件语句过滤。 2、读取数据后,在clientDataSet数据集中,再通过Filter,过滤。 推荐第一种方式,直接明确。通过Filter过滤只能简单过滤。条件过多效果就不尽人意了。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧