powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Ускорение работы запроса ADO из Excel к Access
9 сообщений из 9, страница 1 из 1
Ускорение работы запроса ADO из Excel к Access
    #38623941
akanti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, прошу совета.
Только начинаю разбираться с VBA в Excel, сделал макрос, который подключается к базе данных Access и заполняет второй столбец на основании данных из первого столбца. Т.е. по референсу (переменная "ref") находит в базе наименование. Все работает правильно, но на мой взгляд, я написал очень неэффективный код, в цикле открывается соединение, затем создается рекордсет, затем закрывается рекордсет и соединение. 20 строк заполняются примерно за полторы секунды. Можно ли как-то ускорить работу запроса? Т.к. может быть и 400 строк в первом столбце, тогда придется ждать минуты.


Код следующий:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Sub Connection()
   Dim conn As ADODB.connection
   Dim rs As ADODB.Recordset
   Dim src As String
   Dim ref As String
   Dim i As Integer
    
   For i = 6 To 24
   ref = Range("A" & i).Value
   Set conn = New ADODB.connection
   Set rs = New ADODB.Recordset
   With conn
     .Provider = "Microsoft.ACE.OLEDB.12.0;"
     .connectionString = "Data Source=C:\db.accde"
   End With
    conn.Open
   With rs
   src = "select table1.field2, table1.field3 from table1 where field1 = '" & ref & "'"
   .Open Source:=src, ActiveConnection:=conn
      Range("A" & i).Offset(0, 1).CopyFromRecordset rs
   End With
   Set rs = Nothing
   conn.Close
   Set conn = Nothing
  Next
      
End Sub
...
Рейтинг: 0 / 0
Ускорение работы запроса ADO из Excel к Access
    #38623949
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
400 строк будут заполняться те же полторы секунды. Они тратятся в основном на подготовку объектов, а не перекачку данных. Счет пойдет на минуты при сотнях тысяч строк.
...
Рейтинг: 0 / 0
Ускорение работы запроса ADO из Excel к Access
    #38623965
akanti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy, только что я провел эксперимент, 400 строк заполняются около 15 секунд, что очень долго. Excel на это время зависает.
Значит, нет способа сделать код эффективнее? Правильно ли столько раз открывать/закрывать соединение, или можно его открыть вначале и закрыть в конце?
...
Рейтинг: 0 / 0
Ускорение работы запроса ADO из Excel к Access
    #38623970
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akantiПравильно ли столько раз открывать/закрывать соединение, или можно его открыть вначале и закрыть в конце?неправильно. надо открыть один раз, кроме того, постараться изыскать способ открыть рекордсет только один раз.
...
Рейтинг: 0 / 0
Ускорение работы запроса ADO из Excel к Access
    #38623972
_Дмит_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно попробовать вынести из цикла строки:

Set conn = New ADODB.connection
With conn
.Provider = "Microsoft.ACE.OLEDB.12.0;"
.connectionString = "Data Source=C:\db.accde"
End With
conn.Open
-----------------
conn.Close
Set conn = Nothing

поскольку подключение не изменяется.

И, судя по описанию, идёт соответствие - один запрос одно значение.
Не плохо было бы вызвать один запрос - все значения, но надо смотреть возможно ли это
получить сразу от базы данных.
...
Рейтинг: 0 / 0
Ускорение работы запроса ADO из Excel к Access
    #38623981
akanti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Дмит_, гениально! Запрос на 400 строк обрабатывается полсекунды! Благодарю!
...
Рейтинг: 0 / 0
Ускорение работы запроса ADO из Excel к Access
    #38624000
akanti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое спасибо за помощь!
...
Рейтинг: 0 / 0
Ускорение работы запроса ADO из Excel к Access
    #38624363
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akantiAntonariy, только что я провел эксперимент, 400 строк заполняются около 15 секунд, что очень долго. Excel на это время зависает.
Значит, нет способа сделать код эффективнее? Правильно ли столько раз открывать/закрывать соединение, или можно его открыть вначале и закрыть в конце?Я не заметил, что открытие и закрытие соединения и т.п. находится внутри цикла.
...
Рейтинг: 0 / 0
Ускорение работы запроса ADO из Excel к Access
    #38624386
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyЯ не заметил, что открытие и закрытие соединения и т.п. находится внутри цикла.да, автору следовало бы использовать отступы, для улучшения читабельности кода...
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Ускорение работы запроса ADO из Excel к Access
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]