FireDAC中System Macro Functions无法使用,报错[FireDAC][Phys]-327如何解决?
FireDAC执行系统宏函数报错[FireDAC][Phys]-327的解决办法
问题根源
FireDAC的系统宏函数并非全量适配所有数据库驱动,你使用的{Database()}、{User()}、{NEWGUID()}宏在MySQL和MSSQL的FireDAC驱动中没有内置转换支持,因此触发"Escape function [XXX] is not supported"报错。
分数据库替代方案
MySQL环境
- 获取当前数据库:使用MySQL原生函数
DATABASE()SELECT DATABASE(); - 获取当前用户:使用MySQL原生函数
USER()SELECT USER(); - 生成GUID:MySQL 8.0及以上版本用
UUID()SELECT UUID();
MSSQL环境
- 获取当前数据库:使用MSSQL原生函数
DB_NAME()SELECT DB_NAME(); - 获取当前用户:使用
SUSER_NAME()或CURRENT_USERSELECT SUSER_NAME(); -- 或者 SELECT CURRENT_USER; - 生成GUID:使用MSSQL原生函数
NEWID()SELECT NEWID();
通用适配建议
如果需要编写跨数据库的通用SQL,可通过FireDAC的TFDCommand.MacroCreate手动定义宏映射,或者在代码中根据当前连接的数据库类型,动态切换对应的SQL语句。
内容的提问来源于stack exchange,提问作者Osama Ghazal
相关产品推荐
相关产品推荐

