在Delphi中使用FireDAC/UniDAC合并Access数据库两列失败求助
问题解决:FireDAC/UniDAC查询Access时字符串连接不显示分隔符
原因分析
ADOQuery直接遵循Access原生SQL语法,能正确识别&为字符串连接运算符;但FireDAC和UniDAC默认可能采用通用SQL方言(如ANSI SQL),导致&未被解析为字符串连接逻辑,进而丢失了分隔符。
解决方案
1. 强制组件使用Access SQL方言
FireDAC设置
确保FDConnection配置匹配Access语法:
- 将
DriverID设为MSAcc - 在Connection的
Params中添加SQLDialect=5(对应Access的SQL方言版本) - 或者在FDQuery的SQL开头声明方言:
SET SQL DIALECT 5; select asset &" - "& asset_n as nooot from t_komp
UniDAC设置
配置UniConnection适配Access语法:
- 将
ProviderName设为Access - 在
SpecificOptions中添加键值对SQLDialect=Access(可通过对象编辑器找到该选项)
2. 改用兼容的字符串连接写法
如果不想修改组件配置,可换用Access支持的其他连接方式:
方式一:使用CONCAT函数(Access 2010及以上版本支持)
select CONCAT(asset, ' - ', asset_n) as nooot from t_komp
方式二:用+配合Nz函数处理空值
若字段可能为NULL,用Nz将空值转为空字符串,避免结果直接为NULL:
select Nz(asset, '') + ' - ' + Nz(asset_n, '') as nooot from t_komp
内容的提问来源于stack exchange,提问作者user578332
相关产品推荐
相关产品推荐

