更快的制表符分隔导入大文件访问vba

时间:2017-08-22 23:14:52

标签: vba csv ms-access import

我有一个.mb文件是176mb,有780k记录,我必须每天加载到Access并删除旧数据。我也希望将ImportDate放在同一个表中。

我尝试过不同的导入方法,而且速度非常慢。使用DAO导入和插入日期大约需要14分钟。我尝试使用DoCmd,但它的速度一样慢,如果不是更多的话。我无法删除表但需要插入表,因为访问不会准确地设置字段的属性。我还发现每次都需要压缩数据库,或者它变得越来越大。

如何更快地导入文件?手动完成并不需要那么长时间。

以下是我尝试的内容:

compactfile = accdbfilepath
srcfile = "filepath\filename2017_be.accdb"
moaqdate = "8/22/2017"

Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile srcfile, compactfile
Set db = OpenDatabase(compactfile)
db.Execute "DELETE * FROM [MOAQ]"
db.Execute ("insert INTO [MOAQ] select * FROM 
[Text;HDR=YES,FMT=TabDelimited;Database=" & accesspath & "].[" & 
filenametotab & "]"), dbFailOnError
db.Execute "update [MOAQ] set importdate =(""" & moaqdate & """)"
db.Close

destinationfile = "filepath\filename2017_be.accdb"
Application.CompactRepair compactfile, destinationfile


fso.CopyFile destinationfile, srcfile
Kill destinationfile
Set fso = Nothing

1 个答案:

答案 0 :(得分:1)

我会做这样的事情:

compactfile = accdbfilepath
srcfile = "filepath\empty_MOAQ_table_only_be.accdb"
destinationfile = "filepath\MOAQ_table_be.accdb"
moaqdate = "8/22/2017"

Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFile srcfile, destinationfile, True
Set db = OpenDatabase(destinationfile)
db.Execute ("insert INTO [MOAQ] select #" & moaqdate & "# as importdate, * " & _
    "FROM [Text;HDR=YES,FMT=TabDelimited;Database=" & accesspath & "].[" & filenametotab & "]"), dbFailOnError
db.Close
Set FSO = Nothing

在这种情况下,您不需要复制包含数据的文件两次,删除数据,执行压缩& amp;修复并更新日期。

将您的大表分成只有一个表的专用后端,使用空表(empty_MOAQ_table_only_be.accdb)创建此文件的副本,并将其复制到现有的专用后端,而不是双重处理大文件,删除和c&amp; r。< / p>

您可以与文件数据同时插入更新日期,无需更新。

它应该更快。