You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi XE10中FDTable数据库表过滤的大小写不敏感实现方法

解决FDTable过滤时大小写敏感的问题

这个问题很常见,FireDAC的过滤默认是区分大小写的,不过有几种简单的方法可以实现大小写不敏感的匹配,满足你输入emon就能筛选出Lemon这类记录的需求:

方法1:统一转换为大写/小写进行比较

利用SQL标准的UPPER()或LOWER()函数,将字段值和输入文本都转换为相同大小写后再做匹配。这种方法适用于所有数据库,兼容性最好:

// 转换为大写进行匹配
fdtable2.Filter := Format('UPPER(PRODUK) LIKE UPPER(''%s%%'')', [edit1.Text]);
fdtable2.Filtered := True;

// 或者转换为小写
// fdtable2.Filter := Format('LOWER(PRODUK) LIKE LOWER(''%s%%'')', [edit1.Text]);

原理是把PRODUK字段的内容和你输入的文本都转成大写(或小写),这样不管原数据是大写还是小写,都能匹配到目标记录。

方法2:开启FireDAC的大小写不敏感过滤选项

FireDAC提供了内置的过滤选项foCaseInsensitive,开启后会自动忽略过滤条件中的大小写差异。这种方法更简洁,适合本地过滤(即FDTable已经把数据加载到客户端内存中)的场景:

// 添加大小写不敏感选项到FilterOptions
fdtable2.FilterOptions := fdtable2.FilterOptions + [foCaseInsensitive];
// 设置过滤条件(无需额外转换大小写)
fdtable2.Filter := Format('PRODUK LIKE ''%s%%''', [edit1.Text]);
fdtable2.Filtered := True;

如果后续需要恢复大小写敏感的过滤,只需把foCaseInsensitive从FilterOptions中移除即可:

fdtable2.FilterOptions := fdtable2.FilterOptions - [foCaseInsensitive];

方法3:依赖数据库的排序规则(可选)

如果你的数据库表使用了不区分大小写的排序规则(比如SQL Server的CI排序、MySQL的utf8_general_ci),那么默认的LIKE查询就会忽略大小写,不需要修改代码。不过这种方法依赖数据库配置,灵活性不如前两种,适合数据库环境固定的场景。

内容的提问来源于stack exchange,提问作者Alfred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:52:35