2
您好我一直在開發一個vba項目,這裏有很多來自示例的幫助。我試圖從Excel VBA訪問一個MS Access數據庫,併爲每個請求導入大型數據集(500-100 +行)。將ADODB循環轉換爲DAO
目前,以下循環使用ADODB,但Range(「」)。Copyfromrecordset行每個請求需要大約7秒的時間。
Public Sub BC_Data()
Dim cn As New ADODB.Connection, rs As New ADODB.Recordset
Dim strCon, SQL As String
Dim ID As Integer
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=...\Database.accdb;"
cn.Open strCon
For i = 0 To n
ID = Range("A2").Offset(i, 0).Value
SQL = "SELECT [Sales] WHERE [ID] = " & ID & _
" AND [Date] >= #" & [A1].Text & "# AND [Date] <= #" & _
[B1].Text & "#;"
rs.Open SQL, cn
Range("C2").Offset(0, i).CopyFromRecordset rs
rs.Close
Next
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub
SQL工作正常,只是爲給定的產品ID和時間段選擇每個事務。
我使用這種循環的原因是,我們只需要一次爲〜20的產品的數據,他們不一定在一個序列中,所以ID可能是1,2,4 ,7,200,205,654等
ID存儲在列A中,然後請求循環並粘貼列C中的每個新列。
我有2個問題:
將使用DAO連接,而不是ADODB加速這一進程?如果是這樣,我將如何去複製這個DAO?
我正在使用的方法循環通過ID,然後請求一個有效的?有沒有更快的方法,也許使用「For each」循環?
謝謝!
很好用!花了7s到1的時間,謝謝! –