我只是想知道通过VBA将文本文件中的数据导入Microsoft Access表的最快方法。
据我所知,有3种方法。
使用docmd.transfertext
方法上传整个文件。如有错误,请稍后处理。
使用“行输入”语句逐行读取文本,然后使用recordset.add method
逐行添加记录。
设置新的Excel.application
对象,通过excel打开文件,进行所有重新格式化,然后另存为临时电子表格。使用Docmd.transferspreadsheet
方法上传到表格
还有其他更好的方法可以将文本上传到MS Access吗?
最快的方法是什么?
答案 0 :(得分:2)
用于传输文本文件的内置命令将是最快的。
但是,如果需要增加灵活性,则线路输入将是次佳的(也是次最快的)。
整个Excel副本的启动和自动化非常繁重。但是,公平地说,一旦加载,速度就可以了。
真正的问题不是加载速度,而是重新格式化数据所需的代码类型。
如果您使用跨文本,则速度非常快。但是,如果您现在必须重新循环和重新处理该数据,那么您将第二次放弃该数据。因此,这里的额外时间不是导入速度,而是额外的处理。
行输入的优点在于,您可以重新设置格式并处理该行,然后将其发送到表中。这意味着您只能循环并触摸一次数据的每一行。
因此,传输文本是最快的,但是现在,如果您必须重新循环并再次触摸每行数据,则需要两次触摸数据。
因此,传输速度可能不是“中心”的真正目标,而是获取数据后需要进行何种处理以及需要进行多少处理的速度。
仅当行输入从文件中拉出,处理然后发送到表时,行输入才会接触到每一行数据。
所有其他方法都涉及读取整个数据集,然后处理数据–因此您需要再次触摸数据。
答案 1 :(得分:0)
谢谢阿尔伯特·D·加拉尔。
在这里分享一些测试结果。我将508481条记录上传到Access表中。
通过Line Input
方法完成上传花费了14分30秒。通过transfertext
方法完成了上传并通过vba代码重新格式化后,花费了3分12秒。
docmd.transfertext
方法比行输入要快得多,尽管它需要读取两次数据才能重新格式化输出。
我无法通过docmd.transfertext解决的唯一缺点是,如果源文件中不包含任何明显的排序ID,则Access表中的记录顺序不能与源文件中的记录顺序保持相同。排序逻辑。