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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:12:48