使用ADODB连接查询CSV文件时出现Access引擎打开/写入错误
问题分析与解决
核心结论
打开ACE OLEDB连接处理CSV不需要管理员权限,你遇到的错误是连接字符串配置错误导致的,而非权限问题。
问题根源
你的连接字符串使用了针对Excel文件的Excel 12.0扩展属性,但处理CSV文件需要使用Text类型的属性配置,这是导致引擎无法正确识别文件格式、抛出权限/独占错误的主要原因。
修正方案
1. 修正连接字符串
将连接字符串中的Extended Properties改为CSV专用配置:
cN.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""" & currentDir & """;Extended Properties='Text;HDR=YES;FMT=Delimited;IMEX=1;';"
各参数说明:
Text:指定数据源为文本文件(CSV属于此类)HDR=YES:表示第一行是表头FMT=Delimited:指定文件为分隔格式(CSV默认逗号分隔)IMEX=1:将混合数据类型列视为文本,避免数据丢失
2. 修正SQL查询的表名
查询CSV时,需要将文件名用方括号括起来,确保引擎正确识别:
RS.Source = "SELECT * FROM [" & currentFile & "]"
3. 额外注意事项
- 确保所有目标CSV文件未被其他程序(如Excel、记事本)打开,否则会触发独占锁定错误
- 检查
currentDir的路径是否正确,你的代码中currentDir = VBAProject.ThisWorkbook.Path + "\""多了一个引号,应改为currentDir = ThisWorkbook.Path & "\"
修正后的完整代码
Sub generateStudentOfficeVisitsReport() Dim currentDir As String currentDir = ThisWorkbook.Path & "\" Debug.Print "Current Dir: '" & currentDir & "'" Dim filter As String filter = "SHARRSDiagnostic*.csv" Dim currentFile As String currentFile = Dir(currentDir & filter) Dim cN As ADODB.Connection Dim RS As ADODB.Recordset Set cN = New ADODB.Connection Set RS = New ADODB.Recordset ' 修正后的CSV专用连接字符串 cN.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""" & currentDir & """;Extended Properties='Text;HDR=YES;FMT=Delimited;IMEX=1;';" RS.ActiveConnection = cN Do Until currentFile = "" Debug.Print currentFile ' 用方括号包裹CSV文件名 RS.Source = "SELECT * FROM [" & currentFile & "]" RS.Open ' 需添加Open方法执行查询 ' TODO: 处理记录集数据 RS.Close currentFile = Dir Loop ' 关闭连接 cN.Close Set RS = Nothing Set cN = Nothing End Sub
内容的提问来源于stack exchange,提问作者John Christie
相关产品推荐
相关产品推荐

