使用CurrentDB中的Import Spec将DoCmd.TransferText导入另一个DB

时间:2015-03-09 20:03:25

标签: vba ms-access ms-office etl

挑战在标题中。

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

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

到目前为止,这是我的代码,但显然它不起作用,因为文件规范是在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

2 个答案:

答案 0 :(得分:1)

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

    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

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

答案 1 :(得分:0)

我能够回答&#34;为什么不创建到目标数据库的链接表&#34;。我在一个环境中工作,因为网络安全,ADO,DAO,ODBC和任何直接访问都是不可能的。我可以使用带有DoCmd方法的模块对远程数据库进行直接查询。如果网络安全消除了这种情况,我将不得不更深入地搜索,但我可以导入数据并使用远程查询来处理数据。