使用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'。
似乎LIKE'%b%'和foCaseInsensitive不能一起工作?我该怎么做才能让它发挥作用?我阅读了文档,但我找不到我的错误(如果有的话)。 TIA。
答案 0 :(得分:1)
一切正常,直到我尝试扩展过滤以允许不区分大小写的搜索(我尝试使用现有的FilterOption foCaseInsensitive),现在突然我有一个错误?不,这对我没有意义。我决定以另一种方式实现所需的不区分大小写的过滤,并保持我的自我完整。
这是经过修改的代码(完美运行)
cdDocs.DisableControls;
try
cdDocs.Filtered := False;
cdDocs.FilterOptions := [];
if (cbCaseSensitive.Checked) then
cdDocs.Filter := 'Product LIKE ''%' + txtFilter.Text + '%'''
else
cdDocs.Filter := 'UPPER(Product) LIKE ''%' + UPPERCASE(txtFilter.Text) + '%''';
cdDocs.Filtered := True;
finally
cdDocs.EnableControls;
end;
顺便说一句,这是使用Delphi XE附带的Interbase DB Access组件连接到Interbase / Firebird数据库。如果连接到另一个DB,可能需要将“UPPER”函数替换为所选RDBMS的等效函数(无论您在等效的SQL WHERE子句中使用什么)