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
相关产品推荐
相关产品推荐

