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

通过Access将FoxPro .dbf转Excel时出现找不到.mdb文件的错误

问题原因与解决方法:Access导出DBF数据到Excel时找不到PartMast.mdb错误

原因分析

你创建的临时查询tmpQueryforExport是Access本地的查询对象,它不会复用你之前ADO连接的ODBC配置。当你把SELECT * from PartMast.dbf order by partno;直接赋值给QueryDef时,Access会默认在本地文件系统(当前Access库路径或代码指定的临时目录)查找表,并且错误地将.dbf后缀识别为Access的.mdb格式,所以抛出找不到PartMast.mdb的错误。

另外,你之前用ADO打开的Recordset和这个本地查询完全独立,两者没有关联,所以Recordset能正常读取数据,但查询执行时会走Access本地的数据源逻辑。

解决方法

方法一:绕开本地查询,直接用ADO Recordset导出到Excel

不需要创建临时查询,直接将ADO获取的Recordset数据写入Excel,避免Access本地查询的路径解析问题。修改后的代码如下:

Private Sub Command1_Click()
    Dim strconnect As String
    Dim cn As ADODB.Connection
    Dim dbfFolder As String
    Dim rs As ADODB.Recordset
    Dim SQL As String
    Dim xlApp As Object
    Dim xlBook As Object
    Dim xlSheet As Object
    Dim i As Integer
    
    dbfFolder = "C:\Users\temp\PC MRP"
    strconnect = "DSN=pcMRPVFP;SourceDB=u:\PC MRP;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;"
    filename = "PARTMAST.dbf"
    
    Set cn = New ADODB.Connection
    cn.Open strconnect
    cn.Execute "SET REPROCESS TO 10 SECONDS"
    
    SQL = "SELECT * from PartMast.dbf order by partno;"
    Set rs = New ADODB.Recordset
    rs.Open SQL, cn
    
    ' 创建Excel对象并写入数据
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Worksheets(1)
    
    ' 写入表头
    For i = 0 To rs.Fields.Count - 1
        xlSheet.Cells(1, i + 1).Value = rs.Fields(i).Name
    Next i
    
    ' 写入数据
    xlSheet.Range("A2").CopyFromRecordset rs
    
    ' 保存并关闭Excel
    xlBook.SaveAs dbfFolder & "\" & Left(filename, 8) & ".xls"
    xlBook.Close False
    xlApp.Quit
    
    ' 释放对象
    rs.Close
    Set rs = Nothing
    Set cn = Nothing
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
End Sub

方法二:让本地查询使用ODBC数据源

修改临时查询的SQL语句,明确指定从ODBC数据源读取表,这样Access就不会在本地找文件。修改代码中创建QueryDef的部分:

' 替换原来的qdf.SQL = SQL这一行
qdf.SQL = "SELECT * FROM [ODBC;DSN=pcMRPVFP;SourceDB=u:\PC MRP;SourceType=DBF;].PartMast ORDER BY partno;"

这样修改后,Access会通过指定的ODBC连接读取DBF表,不会再报错找不到本地的.mdb文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:15:08