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 方法的模块对远程数据库进行直接查询。如果网络安全消除了这一点,我将不得不深入研究,但我可以导入数据并使用远程查询来处理数据。
挑战在标题中。
如何使用 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 方法的模块对远程数据库进行直接查询。如果网络安全消除了这一点,我将不得不深入研究,但我可以导入数据并使用远程查询来处理数据。