У меня есть файл Excel, в котором я установил соединение с базой данных Access. В файле Excel у меня есть список имен в столбце A, и я хочу искать эти имена в базе данных Access и возвращать два поля из этой базы данных. Мне нужно сделать это примерно для 200-300 имен.Извлечение данных из более чем миллиона записей
Вот мой код:
N = Cells(Rows.Count, "A").End(xlUp).Row
Application.DisplayAlerts = False
strDB = ThisWorkbook.Path & "file.accdb"
Set objConnection = New ADODB.Connection
objConnection.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & strDB
For i = 2 To N
Dim rstTable As ADODB.Recordset
Set rstTable = New ADODB.Recordset
lookup = Range("A" & i).Value
strSQL = "SELECT NAME1,NAME2 FROM DATA WHERE [Field2]= """ & lookup & """;"
'Store query output
rstTable.Open Source:=strSQL, ActiveConnection:=objConnection
'Paste results to Transactions sheet
Worksheets("Sheet1").Range("B" & i).CopyFromRecordset rstTable
'Close the record set & connection
rstTable.Close
objConnection.Close
Next i
Это работает (kindof), но это занимает очень много времени и случайно падает. Любые идеи, как улучшить это?
Вопросы, требующие помощи по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См. [Минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve). – Igor
«Случайно падает», я полагаю, вы имеете в виду «случайные тайм-ауты»? У вас есть указатель на '[Field2]'? –
Когда вы говорите, что это «сбой», вы имеете в виду, что он не отвечает на какое-то время? Это не то же самое. Если ваш код работает, но занимает много времени (не отвечает), это не то же самое, если оно не происходит и сбой. Если нет реальной проблемы для исправления, но вы ищете повышение эффективности, задайте свой вопрос в [CodeReview] (http://codereview.stackexchange.com/questions) –