FireDAC 中文字段过滤问题
当使用 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 中文字段过滤问题的更多相关文章
- Thinkphp5 PDO操作mysql预处理中文字段出错问题
Thinkphp5手册上建议不用中文表明和中文字段名 今天发现中文字出问题的地方了 $pdo = new PDO('mysql:host=localhost;dbname=xsfm_master', ...
- ThinkPHP中文字段问题
转自: https://www.baidu.com/link?url=Ohc9epgQgkNYLwnHqP-jZ9RfIQWW50-iz8-ZMIPLdtCIJHnUpYwQnDLmXzi7Fa110 ...
- 使用Expression实现数据的任意字段过滤(1)
在项目常常要和数据表格打交道. 现在BS的通常做法都是前端用一个js的Grid控件, 然后通过ajax的方式从后台加载数据, 然后将数据和Grid绑定. 数据往往不是一页可以显示完的, 所以要加分页: ...
- 使用Expression实现数据的任意字段过滤(2)
上一篇<使用Expression实现数据的任意字段过滤(1)>, 我们实现了通过CriteriaCollectionHandler对象来处理集合数据过滤.通过适当的扩展, 应该可以满足一般 ...
- 在英文版操作系统中安装的MS SQL server,中文字段无法匹配
在英文版的操作系统中安装的MS SQL server,会出现中文字段无法被匹配到.其原因在于英文环境下安装的MS SQL server的排序规则不包括中文. 所以解决办法就是更改MS SQL serv ...
- 01:Geoserver发布shapfile,中文字段乱码问题
软件环境:Geoserver 2.1.0 UDig 1.2.1 shapfile文件结构:FID 地物名称 变化图斑 ...
- mysql中文字段转拼音首字母,以及中文拼音模糊查询
创建存储过程,将中文字段转拼音首字母 CREATE DEFINER=`root`@`%` FUNCTION `fristPinyin`(P_NAME VARCHAR(255)) RETURNS var ...
- 表单同时有中文字段和文件上传,加上enctype="multipart/form-data"后导致的中文乱码问题
因为一个表单需要同时上传字段和文件,所以加上enctype="multipart/form-data",但是上传后的中文字段变成了乱码. 把enctype="multip ...
- Mysql使用中文字段排序的实现--order by
在处理排序规则的时候,有时候我们会需要选择用一些中文字段来排序,实现我们在工作中的需求,下面是在处理排序的时候,适用的方式展示. SELECT t.lawcheckcolumnid AS id,t.c ...
随机推荐
- WinDbg常用命令系列---单步执行p*
p (Step) p命令执行单个指令或源代码行,并可选地显示所有寄存器和标志的结果值.当子例程调用或中断发生时,它们被视为单个步骤. 用户模式: [~Thread] p[r] [= StartAddr ...
- 多项式总结&多项式板子
多项式总结&多项式板子 三角/反三角是不可能放的(也不可能真香的 多项式乘法(DFT,FFT,NTT,MTT) 背板子 前置知识:泰勒展开 如果\(f(x)\)在\(x_0\)处存在\(n\) ...
- vscode快捷键,让你脱离鼠标,敲代码嗖嗖的
蓝色为本人需要经常用到的,可忽略 vsCode软件相关 显示资源管理器:Ctrl + Shift + E 显示搜索: Ctrl + Shift + F 显示git:Ctrl + Shift + G 显 ...
- Java运算符和类型转换
以下代码输出结果是: public class Test { public static void main(String[] args) { int a = 5; System.out.printl ...
- fastq 转换为 fasta
使用 awk awk '{if(NR%4 == 1){print ">" substr($0, 2)}}{if(NR%4 == 2){print}}' XXX.fastq & ...
- D3.js的v5版本入门教程(第七章)—— 比例尺的使用
D3.js的v5版本入门教程(第七章) 比例尺在D3.js中是一个很重要的东西,我们可以这样理解d3.js中的比例尺——一种映射关系,从domain映射到range域(为什么会是domain和rang ...
- K8S组件
Master 组件 Master组件提供集群的管理控制中心.Master组件可以在集群中任何节点上运行.但是为了简单起见,通常在一台VM/机器上启动所有Master组件,并且不会在此VM/机器上运行用 ...
- 2019暑假Java学习笔记(一)
目录 基础语法(上) HelloWorld 变量 常量 数据类型 整数 浮点数 char类型 boolean类型 String 计算字符串长度 字符串比较 字符串连接 charAt()方法 字符串常用 ...
- OpenSSL的证书, 私钥和签名请求(CSRs)
概述 OpenSSL是一个多用途的工具, 适用于涉及Public Key Infrastructure(PKI), HTTPS(HTTP over TLS)的用途. 这份文档提供关于OpenSSL命令 ...
- python问题集
1.selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in P ...