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

FDConnection+ODBC读取Excel非英文字符显示???的解决方法问询

解决Delphi 10.4.2中FireDAC通过ODBC读取Excel非英文字符乱码问题

针对你遇到的俄文、格鲁吉亚文等非英文字符读取后显示为???的问题,核心原因是旧版Excel ODBC驱动(odbcjt32.dll)对Unicode支持不足,结合FireDAC的参数调整,可通过以下步骤解决:

1. 更换为ACE ODBC驱动

你当前使用的Microsoft Excel Driver (*.xls)是旧版ANSI驱动,建议替换为Microsoft Access Database Engine(ACE)驱动,该驱动原生支持Unicode和新版Excel格式(xlsx/xlsm等):

  • 确保已安装32位版本的Microsoft Access Database Engine 2016/2021(因你的Delphi程序是32位,驱动位数必须匹配);
  • 在FDConnection的参数中,将ODBCDriver设置为Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)。

2. 调整FireDAC连接参数

除已设置的OpenMode=CreateUTF16和StringFormat=Unicode外,需添加以下关键参数:

  • ODBCAdvanced:指定字符集和扩展ANSI SQL支持,确保Unicode字符正确传输;
  • ExtendedAnsiSQL=1:启用驱动的扩展ANSI SQL功能,提升Unicode兼容性。

修改后的完整连接代码示例:

FDConnection1.Connected := false;
FDConnection1.Params.Clear;
// 基础连接参数
FDConnection1.Params.Values['DriverID'] := 'ODBC';
FDConnection1.Params.Values['Database'] := 'D:\Delphi Projects\Excel\DB\myData.xls';
FDConnection1.Params.Values['ODBCDriver'] := 'Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)';
// Unicode相关设置
FDConnection1.Params.Values['OpenMode'] := 'CreateUTF16';
FDConnection1.Params.Values['StringFormat'] := 'Unicode';
// 扩展ODBC参数
FDConnection1.Params.Values['ODBCAdvanced'] := 'CharacterSet=UTF-8;ExtendedAnsiSQL=1';
// 建立连接
FDConnection1.Connected := true;
fdQuery1.Open;

3. 额外检查项

  • 确认Excel文件保存时使用了Unicode编码(如保存为xlsx格式,默认即为Unicode);
  • 检查FDQuery的字段类型:确保字符型字段映射为ftWideString或ftUnicodeString(Delphi 10.4中String默认是Unicode类型,字段映射需匹配);
  • 若仍有问题,可尝试在FDConnection的Params中添加LocaleCode=0x0419(俄文区域)或对应格鲁吉亚文的区域代码,强制指定字符集区域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:40:39