MS Access VBA:编程链接文本文件时数据库引擎报错
解决Access编程链接文本文件的独占访问错误
先看你代码里的几个核心问题:
- 连接字符串里的
Link Specification是手动创建链接时生成的专属标识,编程链接时完全不需要,反而会导致引擎识别异常。 ACCDB=YES是针对Access数据库的参数,文本文件不需要这个,直接删掉。TABLE=Results_File#txt写法错误,#属于无效字符,而且文件名应该通过SourceTableName指定,不是塞进连接字符串里。- 编程链接前最好先删除已存在的同名链接表,避免重复链接引发冲突。
修正后的代码示例:
Dim fso As Object Dim FileLocation As String Dim tsfilename As String Dim db As DAO.Database Dim td As DAO.TableDef Set fso = CreateObject("Scripting.FileSystemObject") FileLocation = "C:\Results\Results_File.txt" ' 替换为你的文本文件完整路径 tsfilename = "Results_File" ' 自定义链接表的名称,可与文件名不同 Set db = CurrentDb ' 先清理已存在的同名链接表 On Error Resume Next db.TableDefs.Delete tsfilename On Error GoTo 0 If fso.FileExists(FileLocation) Then Set td = db.CreateTableDef(tsfilename) ' 仅保留文本链接必要参数,动态获取文件夹路径 td.Connect = "Text;FMT=Delimited;HDR=NO;IMEX=2;CharacterSet=437;DATABASE=" & fso.GetParentFolderName(FileLocation) ' SourceTableName指定文本文件的文件名(不含路径) td.SourceTableName = fso.GetFileName(FileLocation) db.TableDefs.Append td db.TableDefs.Refresh End If Set td = Nothing Set db = Nothing Set fso = Nothing
额外注意点:
IMEX=2设置为只读模式,避免尝试写入文本文件引发权限问题,适配你仅读取的需求。- 用
fso的方法动态获取路径和文件名,能自动适配不同部署位置的文件路径,不用硬编码。 - 如果还是出现独占错误,可以检查外部程序更新文本文件时是否有锁定行为(不过你手动链接正常,大概率是连接字符串的问题)。
内容的提问来源于stack exchange,提问作者user2059972
相关产品推荐
相关产品推荐

