【发布时间】:2013-07-22 06:09:20
【问题描述】:
使用 Delphi XE,我正在尝试对 TClientDataSet 进行一些过滤,但我无法让不区分大小写的过滤与 LIKE 运算符一起正常工作
考虑执行过滤的代码
cdsDocs.DisableControls;
try
cdsDocs.Filtered := False;
cdsDocs.FilterOptions := [foCaseInsensitive];
cdsDocs.Filter := 'Product LIKE ''%' + txtFilter.Text + '%''';
cdsDocs.Filtered := True;
finally
cdsDocs.EnableControls;
end;
并认为此数据集的 Product 字段仅包含值“b”和“B”。
- 当 (txtFilter.Text = 'b') 我只得到 'b's(我期待 'b's 和 'B's)
- 当 (txtFilter.Text = 'B') 我只得到 'B'(同样,我期待 'b's 和 'B's)
好像 LIKE '%b%' 和 foCaseInsensitive 不能一起工作?我应该怎么做才能让它工作?我阅读了文档,但找不到我的错误(如果有的话)。 TIA。
【问题讨论】:
-
对我来说看起来不错。否则你也可以使用 TClientDataSet 事件 OnFilterRecords,在这里你可以设置某些记录是否可见。
-
这很有趣,只有当要搜索的文本(不区分大小写)与字段内容相似时,过滤器才会应用。解决方法可能是
.Filter := 'Text LIKE ''%' + TextFilter.Text + '%'' or Text=' + QuotedStr(textFilter.Text); -
@bummi 谢谢。你是说你能够重现我的问题吗?
-
是的,显示的解决方法可以为我解决这个问题。
-
@bummi 我怀疑如果我使用真实的产品名称(超过 1 个字符)它会起作用。我担心 XE 中存在错误,或者我的代码中更糟(quelle horreur!)
标签: delphi delphi-xe tclientdataset