2013-12-08 77 views
1

我使用下面的VBA Access 2010中的一組進口記錄從一個臨時表(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 

對於大型數據集(絕對750000項紀錄但可能小於該閾值 - 要確定的閾值) - 我想爲導入提供進度指示器,以便用戶不會失去希望並進入終端拒絕狀態(或終止應用程序,因爲它們可以沒有看到任何進展。)導入這樣的大文件應該是不經常的,導入時間和進度報告之間的權衡應該是可以接受的。

我正在考慮的一個選擇是將數據集分成(比如說)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

'tblImport.FHID'是數字主鍵嗎? – HansUp

+0

@HansUp不,它是我無法控制的50個字符的文本字段。 – ColeValleyGirl

+0

你可以添加一個自動編號字段到'tblImport'臨時表嗎? – HansUp

回答

2

添加一個自動編號字段,pkey,作爲tblImport臨時表的主鍵。然後,您可以一次打開tblImport作爲記錄集和rs.Move 10000行,以獲取每個組塊邊界的pkey值。使用WHERE子句中的邊界值爲每個塊執行INSERT

在1100萬行的表中,每次移動10K行花了不到10秒,所以對於你的750K行表,我估計性能的影響是可以忍受的。

相關問題