当使用 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. Vigil 发送多人邮件通知的处理

    Vigil 默认是只能发送单人邮件,但是我们有需要发送多个的场景. 解决方法: 大家使用一样的账户登陆 使用邮件组 修改下源码 为了学习下Vigil 的构建,以及原理,我简单通过修改源码的方式(目前支 ...

  2. SDSC2019【游记】

    目录 SDSC2019 游记 Day0 Day 1 Day2 Day3 Day4 Day5 Day6 Day 7 Day8 SDSC2019 游记 Day0 这次夏令营在日照某大学举行,我很想夸一夸喷 ...

  3. 【JZOJ6227】【20190621】ichi

    题目 $n , m ,d,x\le 10^5 , $强制在线 题解 对原树做dfs,得到原树的dfs序 对kruksal重构树做dfs,得到重构树的dfs序 那么就是一个三维数点问题 强制在线并且卡空 ...

  4. JVM内存的划分

    JVM内存的划分有五片: 1.   寄存器: 2.   本地方法区: 3.   方法区: 4.   栈内存: 5.   堆内存.

  5. Python调用win32 API绘制正弦波

    Python调用win32 API新建窗口与直接创建窗口的流程相同 流程:注册窗口→创建窗口→显示窗口→更新窗口→消息循环 代码: # -*- coding: utf-8 -*- import win ...

  6. win10 启动后会自动恢复上次关机前的应用

    转载:https://www.v2ex.com/t/425101

  7. Swift编码总结7

    1.Git 打Tag: 命令也就下面两条,看看就会了. 2.字符串转Model:JSONDecoder http://www.cocoachina.com/ios/20180612/23771.htm ...

  8. stylelint那些事儿

    一.参考文档 -   http://stylelint.cn/ -   https://stylelint.io/ -   https://stylelint.io/user-guide/exampl ...

  9. [简短问答]LODOP打印不清晰

    用什么语句输出的:使用的的是什么语句输出的,是ADD_PRINT_TEXT纯文本,还是html的超文本. 超文本不清晰:如果用的是ADD_PRINT_HTML ,换成 ADD_PRINT_HTM试试, ...

  10. [LeetCode] 242. Valid Anagram 验证变位词

    Given two strings s and t , write a function to determine if t is an anagram of s. Example 1: Input: ...