有没有办法将查询结果“切片”成可报告的块?

时间:2013-12-08 15:41:29

标签: ms-access ms-access-2010

我在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中没有任何记录。

有更简单的方法吗?

1 个答案:

答案 0 :(得分:2)

将自动编号字段 pkey 添加为tblImport临时表的主键。然后,您可以一次打开tblImport作为记录集和rs.Move 10000行,以获得每个块边界的pkey值。使用INSERT子句中的边界值为每个块执行WHERE

一次移动1100万行表,每次10K行只花了不到10秒,因此对于750K行表,我猜测性能影响是可以容忍的。