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系统长路径支持
- 打开组策略编辑器(运行
gpedit.msc) - 导航至
计算机配置 > 管理模板 > 系统 > 文件系统 - 启用
启用长路径选项 - 重启系统后,FireDac可直接识别超长路径(需确保Access引擎版本兼容)
方法4:调整FireDac元数据字段长度
修改FireDac的元数据配置,扩大CATALOG_NAME字段的最大长度:
在连接参数中添加:
Connection.Params.Add('MetaDefSchema=CATALOG_NAME=255');
或修改FireDac配置文件fdconfig.ini中对应元数据定义,将CATALOG_NAME长度设为255或更大。
内容的提问来源于stack exchange,提问作者Cyril
相关产品推荐
相关产品推荐

