|  | 
| 
Ускорение работы запроса 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: | 10ms | 
| get forum list: | 13ms | 
| check forum access: | 3ms | 
| check topic access: | 3ms | 
| track hit: | 34ms | 
| get topic data: | 9ms | 
| get forum data: | 2ms | 
| get page messages: | 42ms | 
| get tp. blocked users: | 2ms | 
| others: | 235ms | 
| total: | 353ms | 

| 0 / 0 | 
