当使用 FireDAC Filter  过滤数据的时候,通常这样写:

FDMemTable.Filtered := False;
FDMemTable1.Filter := '姓名=' + string(edtFilter.Text).QuotedString;
FDMemTable.Filtered := True;

将会报错:
[FireDAC][Stan][Eval]-107. Invalid character found [ 姓名 = '张三' ]

解决方法一:字段名称加上方括号[]

FDMemTable1.Filter := '[姓名]=' + string(edtFilter.Text).QuotedString;

解决方法二:通过 OnFilterRecord 事件处理

procedure TForm1.OnMyFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept := DataSet.FieldByName('姓名').AsString = edtFilter.Text;
end;

附上完整代码,如下:

unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error,
FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client,
FireDAC.Stan.StorageBin, Vcl.StdCtrls, Vcl.Grids, Vcl.DBGrids; type
TForm1 = class(TForm)
grd1: TDBGrid;
ds1: TDataSource;
btnFiltered: TButton;
edtFilter: TEdit;
procedure btnFilteredClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
Filter: string;
FDMemTable: TFDMemTable;
procedure OnMyFilterRecord(DataSet: TDataSet; var Accept: Boolean);
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.OnMyFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
Accept := Filter.IsEmpty or (DataSet.FieldByName('姓名').AsString = Filter);
end; procedure TForm1.btnFilteredClick(Sender: TObject);
begin
Filter := edtFilter.Text; FDMemTable.Filtered := False;
// 方法一
FDMemTable.Filter := '[姓名]=' + Filter.QuotedString;
FDMemTable.Filtered := True;
end; procedure TForm1.FormCreate(Sender: TObject);
begin
FDMemTable := TFDMemTable.Create(Self); with FDMemTable do
begin
with FieldDefs do
begin
Clear;
Add('姓名', ftWideString, );
Add('年龄', ftInteger);
end;
CreateDataSet;
AppendRecord(['张三', ]);
AppendRecord(['李四', ]);
AppendRecord(['王五', ]);
// 方法二
// OnFilterRecord := OnMyFilterRecord;
end;
ds1.DataSet := FDMemTable;
end; end.

由于开发工具都是洋大人的,对中文支持不是太友好,防止出现不可预料的BUG,建议尽量不要使用中文字段名。

FireDAC 中文字段过滤问题的更多相关文章

  1. Thinkphp5 PDO操作mysql预处理中文字段出错问题

    Thinkphp5手册上建议不用中文表明和中文字段名 今天发现中文字出问题的地方了 $pdo = new PDO('mysql:host=localhost;dbname=xsfm_master', ...

  2. ThinkPHP中文字段问题

    转自: https://www.baidu.com/link?url=Ohc9epgQgkNYLwnHqP-jZ9RfIQWW50-iz8-ZMIPLdtCIJHnUpYwQnDLmXzi7Fa110 ...

  3. 使用Expression实现数据的任意字段过滤(1)

    在项目常常要和数据表格打交道. 现在BS的通常做法都是前端用一个js的Grid控件, 然后通过ajax的方式从后台加载数据, 然后将数据和Grid绑定. 数据往往不是一页可以显示完的, 所以要加分页: ...

  4. 使用Expression实现数据的任意字段过滤(2)

    上一篇<使用Expression实现数据的任意字段过滤(1)>, 我们实现了通过CriteriaCollectionHandler对象来处理集合数据过滤.通过适当的扩展, 应该可以满足一般 ...

  5. 在英文版操作系统中安装的MS SQL server,中文字段无法匹配

    在英文版的操作系统中安装的MS SQL server,会出现中文字段无法被匹配到.其原因在于英文环境下安装的MS SQL server的排序规则不包括中文. 所以解决办法就是更改MS SQL serv ...

  6. 01:Geoserver发布shapfile,中文字段乱码问题

    软件环境:Geoserver 2.1.0 UDig 1.2.1 shapfile文件结构:FID                  地物名称      变化图斑                     ...

  7. mysql中文字段转拼音首字母,以及中文拼音模糊查询

    创建存储过程,将中文字段转拼音首字母 CREATE DEFINER=`root`@`%` FUNCTION `fristPinyin`(P_NAME VARCHAR(255)) RETURNS var ...

  8. 表单同时有中文字段和文件上传,加上enctype="multipart/form-data"后导致的中文乱码问题

    因为一个表单需要同时上传字段和文件,所以加上enctype="multipart/form-data",但是上传后的中文字段变成了乱码. 把enctype="multip ...

  9. Mysql使用中文字段排序的实现--order by

    在处理排序规则的时候,有时候我们会需要选择用一些中文字段来排序,实现我们在工作中的需求,下面是在处理排序的时候,适用的方式展示. SELECT t.lawcheckcolumnid AS id,t.c ...

随机推荐

  1. shell脚本sed的基本用法

    sed 我们首先准备了一个测试文件 1. s 替换  将文件中的This替换cyy 在替换的时候如果加入了 -i 选项就会真的替换,但是只会替换每一行的第一个 -n 和 -p 一起使用表示的是打印那些 ...

  2. Redis的通用key操作

    这些操作跟具体的类型没有关系,而是跟key相关. 1.查询Redis中的key的名称: 所有key: 以my开头: 2.删除键: 3.判断某一个键是否存在: 4.重命名: 5.设置过期时间: 如果未设 ...

  3. NVIDIA vGPU License服务器搭建详解

    当配置有vGPU虚拟机发起License授权请求,授权服务器会根据License中所包含的GRID License版本,加载不同的vGPU驱动(普通驱动和专业Quodra卡驱动).目前vPC和vApp ...

  4. C++之Lambda研究

    目录 目录 1 1. 前言 1 2. 示例1 1 3. 示例2 2 4. 示例3 3 5. 示例4 3 6. 示例5 6 7. 匿名类规则 6 8. 参考资料 7 1. 前言 本文代码测试环境为“GC ...

  5. 洛谷P1265 公路修建题解

    题目描述 某国有n个城市,它们互相之间没有公路相通,因此交通十分不便.为解决这一“行路难”的问题,政府决定修建公路.修建公路的任务由各城市共同完成. 修建工程分若干轮完成.在每一轮中,每个城市选择一个 ...

  6. javascript之反柯里化uncurrying

    使用方法: // 使用 var push=Array.prototype.push.uncurrying(); var obj={ "length": 1, "0&quo ...

  7. Python各种扩展名(py, pyc, pyw, pyo, pyd)区别

    扩展名 在写Python程序时我们常见的扩展名是py, pyc,其实还有其他几种扩展名.下面是几种扩展名的用法. py py就是最基本的源码扩展名 pyw pyw是另一种源码扩展名,跟py唯一的区别是 ...

  8. 【算法编程 C++ Python】二维数组查找

    题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路: 最简单:每一行都 ...

  9. ·分布式文件系统HDFS 练习

    作业要求来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3292 1.目录操作 在HDFS中为hadoop用户创建一个用户目录( ...

  10. 2019年java全栈工程师学习大全

    技术更新日新月异,对于初入职场的同学来说,经常会困惑该往那个方向发展,这一点我是深有体会的. 我刚开始学习 Java 那会,最大的问题就是不知道该学什么,以及学习的顺序,我相信这也是很多初学者经常面临 ...