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

Firebird数据库SELECT语句含&返回空数据集的解决方法咨询

Firebird含&字符字符串查询问题解决方法

问题核心在于FireDAC的默认行为:它会把&当作宏变量占位符解析,而非直接将该字符传递给Firebird数据库,导致实际发给数据库的SQL中&被特殊处理,无法匹配原数据。而FB Maestro是直接将SQL原封不动发送给数据库,所以能正常查询;当&后带空格时,FireDAC判定后面不是有效宏标识符,不会解析,因此也能正常执行。

针对该场景,有两种可行的解决方式:

1. 关闭FireDAC的宏解析功能

直接修改TFDQuery或TFDConnection的MacroCreate属性为mcNo,这样FireDAC就不会解析SQL中的&符号,语句会原样发送给Firebird。

代码示例:

FDQuery1.MacroCreate := mcNo;
FDQuery1.SQL.Text := 'select * from Table1 where Field1 = ''M&T1234''';
FDQuery1.Open;

也可以在Delphi设计期的属性面板里直接修改该属性,无需编写代码。

2. 用双&转义单个&

如果不想全局关闭宏解析,可将SQL中的单个&替换为&&,FireDAC会自动把&&解析成单个&后再传递给数据库,以此匹配目标数据。

修改后的SQL语句:

select * from Table1 where Field1 = 'M&&T1234'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:42:06