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

FireDac连接Access长路径超128字符报错,如何执行查询?

Access数据库超长路径(超过128字符)的FireDac连接解决方案

问题描述

当Access数据库路径长度超过128字符时,使用FireDac连接会触发报错:
[FireDac][DatS]-32. Column overflow [CATALOG_NAME] variable length. Value Length- [219], Maximum column length - [128]
需实现超长路径下正常执行查询。

环境信息

  • 操作系统:Windows 10 64位
  • 开发工具:Delphi 10.4
  • 数据库:Access(Office 365)
  • Access数据库引擎:AccessDatabaseEngine_2016_X64

示例代码

路径超长时无法运行的代码

try
    Connection := TFDConnection.Create(Application);
    Connection.Params.Add('DriverID=MSAcc');
    Connection.Params.Add('Database=D:\donnees\TEST\GV\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\DC26.021248.PGOC.23.10.18_projCC45_dgn_topo.mdb');
    Connection.Name        := 'Test';
    Connection.Connected    := True;
    FDQuery := TFDQuery.Create(Application);
    FDQuery.Connection := Connection;
    FDQuery.SQL.Text := 'SELECT * FROM PointTopo';
    FDQuery.Active:= True;

finally
    FDQuery.Active:= False;
    Connection.Connected := False;
    FreeAndNil(Connection);
    FreeAndNil(FDQuery);
end;

路径长度小于128字符时可正常运行的代码

try
    Connection := TFDConnection.Create(Application);
    Connection.Params.Add('DriverID=MSAcc');
    Connection.Params.Add('Database=D:\donnees\TEST\GV\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\DC26.021248.PGOC.23.10.18_projCC45_dgn_topo.mdb');
    Connection.Name        := 'Test';
    Connection.Connected    := True;
    FDQuery := TFDQuery.Create(Application);
    FDQuery.Connection := Connection;
    FDQuery.SQL.Text := 'SELECT * FROM PointTopo';
    FDQuery.Active:= True;
finally
    FDQuery.Active:= False;
    Connection.Connected := False;
    FreeAndNil(Connection);
    FreeAndNil(FDQuery);
end;

解决方案

方法1:使用Windows短路径(8.3格式)

通过dir /x命令获取目标数据库文件的短路径,替换连接参数中的长路径。例如:
假设长路径对应的短路径为D:\donnees\TEST\GV\FIREDA~1\FIREDA~1\DC26~1.MDB,则修改连接参数:

Connection.Params.Add('Database=D:\donnees\TEST\GV\FIREDA~1\FIREDA~1\DC26~1.MDB');

方法2:使用完整OLE DB连接字符串

绕过FireDac的Database参数限制,直接使用OLE DB连接字符串配置:

Connection.Params.Clear;
Connection.Params.Add('DriverID=MSAcc');
Connection.Params.Add('ConnectionString=Provider=Microsoft.ACE.OLEDB.12.0;Data Source="D:\donnees\TEST\GV\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\FireDacCheminLong\DC26.021248.PGOC.23.10.18_projCC45_dgn_topo.mdb";Persist Security Info=False;');

方法3:启用Windows系统长路径支持

  1. 打开组策略编辑器(运行gpedit.msc)
  2. 导航至计算机配置 > 管理模板 > 系统 > 文件系统
  3. 启用启用长路径选项
  4. 重启系统后,FireDac可直接识别超长路径(需确保Access引擎版本兼容)

方法4:调整FireDac元数据字段长度

修改FireDac的元数据配置,扩大CATALOG_NAME字段的最大长度:
在连接参数中添加:

Connection.Params.Add('MetaDefSchema=CATALOG_NAME=255');

或修改FireDac配置文件fdconfig.ini中对应元数据定义,将CATALOG_NAME长度设为255或更大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:52:39