【发布时间】:2020-02-24 21:32:27
【问题描述】:
我正在尝试将我的所有表从我的访问数据库中导出到单独的 .csv 文件中。我有一个遍历所有表的循环,通过使用 TransferText 我想为每个表创建一个 .csv 文件。
我可以通过编写 TransferText 方法来创建单个文件。
DoCmd.TransferText acExportDelim, "ExportCsv", [Table name], filePath + "Test.csv", True
但是当我试图创建一个循环来为每个表生成一个文件时,我遇到了麻烦。 (文件路径设置为桌面)
' Loops through all tables and extracts them as .csv-files
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Set db = CurrentDb
For Each tdf In db.TableDefs
' ignore system and temporary tables
If Not (tdf.Name Like "MSys*" Or tdf.Name Like "~*") Then
' Export table as CSV
'MsgBox (tdf.Name)
fileName = tdf.Name & ".csv"
DoCmd.TransferText acExportDelim, "ExportCsv", tdf.Name, filePath + fileName, True
End If
Next
Set tdf = Nothing
Set db = Nothing
这样做会给我错误“3011”,说它找不到对象。然后它给了我对象名称:[表名]#csv。所以由于某种原因,它将“.csv”更改为“#csv”。
如果我从文件名中删除文件扩展名,我得到的只是错误 3027,表示对象或数据库是只读的。
有谁知道我的问题是否有解决方案或其他方法来做同样的事情?还是我必须走完全不同的路线?
编辑:
其他经过测试的变体
DoCmd.TransferText acExportDelim, "ExportCsv", tdf.Name, "C:/tempFile.csv", True
DoCmd.TransferText acExportDelim, "ExportCsv", tdf.Name, "C:/" & tdf.Name & ".csv", True
:给出“#csv”错误。
DoCmd.TransferText acExportDelim, "ExportCsv", tdf.Name, "C:/tempFile", True
DoCmd.TransferText acExportDelim, "ExportCsv", tdf.Name, "C:/" & tdf.Name, True
:给出只读错误
【问题讨论】: