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

