DoCmd.TransferText 到另一个数据库,使用 CurrentDB 中的导入规范

DoCmd.TransferText into another DB, using an Import Spec in CurrentDB

挑战在标题中。

如何使用 CurrentDB 中的导入规范,使用 <DB>.DoCmd.TransferText... 将文件导入单独的数据库?

如果您的建议是创建到目标数据库的链接 table,或者在目标数据库中创建导入规范,请不要回复。

到目前为止,这是我的代码,但显然它不起作用,因为文件规范在 CurrentDB 而不是目标数据库中。

Option Compare Database

Function job1()

    Dim sFinalDB As String, sTableName As String, sSpecName As String, sFileName As String

    sFinalDB = "path\db.mdb"
    sTableName = "tblName"
    sSpecName = "specName"
    sFileName = "path\test.csv"


    fn_ImportTxt sFinalDB, sSpecName, sTableName, sFileName, True

End Function



Function fn_ImportTxt(sDBPath As String, _
    sSpecName As String, _
    sTableName As String, _
    sFileName As String, _
    bHeaders As Boolean)

    Dim acApp As Access.Application
    Set acApp = New Access.Application

    acApp.OpenCurrentDatabase sDBPath

    acApp.DoCmd.TransferText acImportDelim, sSpecName, sTableName, sFileName, bHeaders

    acApp.CloseCurrentDatabase
    acApp.Quit acQuitSaveNone
    Set acApp = Nothing

End Function

我今天在尝试自己做同样的事情时偶然发现了这个问题。 我发现规格存储在两个系统对象 tables "MSysIMEXColumns" 和 "MSysIMEXSpecs" 中。 我所做的是每次在 运行 导入过程之前将两个系统对象 table 复制到目标数据库,这就是为什么目标数据库中也可以使用规范的原因。

    DoCmd.TransferDatabase acExport, "Microsoft Access", DBPath, acTable, "MSysIMEXColumns", "MSysIMEXColumns"
    DoCmd.TransferDatabase acExport, "Microsoft Access", DBPath, acTable, "MSysIMEXSpecs", "MSysIMEXSpecs"
    Dim NewAccessApp As Access.Application
    Set NewAccessApp = New Access.Application
    With NewAccessApp
        .OpenCurrentDatabase strDBPath, True
        .DoCmd.TransferText acImportDelim, ImportSpec, TabelName, FilePath, True
        .CloseCurrentDatabase
        .Quit
    End With

显然,这只有在您不介意覆盖目标数据库中的规范 table 时才有效。

我可以回答"why not create a linked table to the destination DB"。由于网络安全,我在 ADO、DAO、ODBC 和任何直接访问都不可能的环境中工作。我可以使用带有 DoCmd 方法的模块对远程数据库进行直接查询。如果网络安全消除了这一点,我将不得不深入研究,但我可以导入数据并使用远程查询来处理数据。