我在Access 2010中使用以下VBA将一组导入的记录从临时表(tblImport)添加到现有链接表(tblPerson):
Dim dbs As Database
Set dbs = CurrentDb
dim StrSQl as String
strSQL = strSQL & "INSERT INTO tblPerson (GenID, Surname, GivenNames, OtherInfo, GroupID) "
strSQL = strSQL & "SELECT FHID, Surname, GivenNames, OtherInfo, Group FROM tblImport;"
dbs.Execute strSQL
对于大型数据集(肯定是750,000条记录,但可能小于该数据 - 要确定的阈值) - 我想为导入提供进度指示器,以便用户不会失去希望并进入终端拒绝(或终止申请,因为他们看不到任何进展。)导入如此大的文件应该很少,以至于进口时间和进度报告之间的权衡应该是可以接受的。
我正在考虑的一个选项是将数据集拆分为(例如)10,000个记录块并在每个记录块之后更新进度。
要实现这一点,我可以使用:
SELECT TOP 10000 FHID, Surname, GivenNames, OtherInfo, Group FROM tblImport ORDER BY FHID;
接着是
DELETE FROM tblImport
WHERE FHID IN
SELECT TOP 10000 FHID, Surname, GivenNames, OtherInfo, Group FROM tblImport ORDER BY FHID;
每次确定要导入的数据然后将其删除(此时我会报告进度)并迭代直到tblImport中没有任何记录。
有更简单的方法吗?
答案 0 :(得分:2)
将自动编号字段 pkey 添加为tblImport
临时表的主键。然后,您可以一次打开tblImport
作为记录集和rs.Move 10000
行,以获得每个块边界的pkey
值。使用INSERT
子句中的边界值为每个块执行WHERE
。
一次移动1100万行表,每次10K行只花了不到10秒,因此对于750K行表,我猜测性能影响是可以容忍的。