使用VBA将文本文件导入MS Access表的最快方法是什么?

时间:2018-10-11 23:22:24

标签: ms-access

我只是想知道通过VBA将文本文件中的数据导入Microsoft Access表的最快方法。

据我所知,有3种方法。

  1. 使用docmd.transfertext方法上传整个文件。如有错误,请稍后处理。

  2. 使用“行输入”语句逐行读取文本,然后使用recordset.add method逐行添加记录。

  3. 设置新的Excel.application对象,通过excel打开文件,进行所有重新格式化,然后另存为临时电子表格。使用Docmd.transferspreadsheet方法上传到表格

还有其他更好的方法可以将文本上传到MS Access吗?

最快的方法是什么?

2 个答案:

答案 0 :(得分:2)

用于传输文本文件的内置命令将是最快的。

但是,如果需要增加灵活性,则线路输入将是次佳的(也是次最快的)。

整个Excel副本的启动和自动化非常繁重。但是,公平地说,一旦加载,速度就可以了。

真正的问题不是加载速度,而是重新格式化数据所需的代码类型。

如果您使用跨文本,则速度非常快。但是,如果您现在必须重新循环和重新处理该数据,那么您将第二次放弃该数据。因此,这里的额外时间不是导入速度,而是额外的处理。

行输入的优点在于,您可以重新设置格式并处理该行,然后将其发送到表中。这意味着您只能循环并触摸一次数据的每一行。

因此,传输文本是最快的,但是现在,如果您必须重新循环并再次触摸每行数据,则需要两次触摸数据。

因此,传输速度可能不是“中心”的真正目标,而是获取数据后需要进行何种处理以及需要进行多少处理的速度。

仅当行输入从文件中拉出,处理然后发送到表时,行输入才会接触到每一行数据。

所有其他方法都涉及读取整个数据集,然后处理数据–因此您需要再次触摸数据。

答案 1 :(得分:0)

谢谢阿尔伯特·D·加拉尔。

在这里分享一些测试结果。我将508481条记录上传到Access表中。

通过Line Input方法完成上传花费了14分30秒。通过transfertext方法完成了上传并通过vba代码重新格式化后,花费了3分12秒。

docmd.transfertext方法比行输入要快得多,尽管它需要读取两次数据才能重新格式化输出。

我无法通过docmd.transfertext解决的唯一缺点是,如果源文件中不包含任何明显的排序ID,则Access表中的记录顺序不能与源文件中的记录顺序保持相同。排序逻辑。