通过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
相关产品推荐
相关产品推荐

