|
Ускорение работы запроса ADO из Excel к Access
|
|||
---|---|---|---|
#18+
Добрый день, прошу совета. Только начинаю разбираться с 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2014, 08:31 |
|
Ускорение работы запроса ADO из Excel к Access
|
|||
---|---|---|---|
#18+
400 строк будут заполняться те же полторы секунды. Они тратятся в основном на подготовку объектов, а не перекачку данных. Счет пойдет на минуты при сотнях тысяч строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2014, 08:48 |
|
Ускорение работы запроса ADO из Excel к Access
|
|||
---|---|---|---|
#18+
Antonariy, только что я провел эксперимент, 400 строк заполняются около 15 секунд, что очень долго. Excel на это время зависает. Значит, нет способа сделать код эффективнее? Правильно ли столько раз открывать/закрывать соединение, или можно его открыть вначале и закрыть в конце? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2014, 09:07 |
|
Ускорение работы запроса ADO из Excel к Access
|
|||
---|---|---|---|
#18+
akantiПравильно ли столько раз открывать/закрывать соединение, или можно его открыть вначале и закрыть в конце?неправильно. надо открыть один раз, кроме того, постараться изыскать способ открыть рекордсет только один раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2014, 09:11 |
|
Ускорение работы запроса ADO из Excel к Access
|
|||
---|---|---|---|
#18+
Можно попробовать вынести из цикла строки: 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 поскольку подключение не изменяется. И, судя по описанию, идёт соответствие - один запрос одно значение. Не плохо было бы вызвать один запрос - все значения, но надо смотреть возможно ли это получить сразу от базы данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2014, 09:12 |
|
Ускорение работы запроса ADO из Excel к Access
|
|||
---|---|---|---|
#18+
_Дмит_, гениально! Запрос на 400 строк обрабатывается полсекунды! Благодарю! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2014, 09:19 |
|
Ускорение работы запроса ADO из Excel к Access
|
|||
---|---|---|---|
#18+
Всем большое спасибо за помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2014, 09:29 |
|
Ускорение работы запроса ADO из Excel к Access
|
|||
---|---|---|---|
#18+
akantiAntonariy, только что я провел эксперимент, 400 строк заполняются около 15 секунд, что очень долго. Excel на это время зависает. Значит, нет способа сделать код эффективнее? Правильно ли столько раз открывать/закрывать соединение, или можно его открыть вначале и закрыть в конце?Я не заметил, что открытие и закрытие соединения и т.п. находится внутри цикла. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2014, 12:28 |
|
|
start [/forum/topic.php?fid=60&fpage=43&tid=2156396]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 146ms |
0 / 0 |