| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > ADO Query + DB Access - слишком долго |
| Автор: Viy_2007 28.2.2008, 00:52 |
| Доброго времени суток. Ситуация следующая: при помощи ADO Query добавляю большое количество записей в БД Access. Так добавление порядка 17000 записей выполняется 10-12 минут. После чего у меня возник вопрос, это нормально или всё же я что-то наплужил в коде? И сразу же вопрос: как можно ускорить этот процесс? Возможно лучше взять другой компонент? Заранее спасибо. |
| Автор: Данкинг 28.2.2008, 02:36 |
| От числа полей тоже зависит. А ADO для Access - самое оно ИМХО. |
| Автор: Rodman 28.2.2008, 13:30 |
| Аксесс не предназначен для большого кол-ва данных... вот оттуда и тормоза!!! |
| Автор: Savek 28.2.2008, 16:36 |
Согласен, но 17000 это маленький объем, даже если перед добавлением там уже было 170 000 записей Viy_2007, что и как добавляешь, давай подробнее |
| Автор: Viy_2007 28.2.2008, 16:40 | ||
| 11 полей в каждой записи. не думал что для аксесса 17000 - это большое количество данных... ну а может посоветуете какую-нибдуь локальную бд для таких объёмов? Добавлено @ 16:50 Ну вообщем вот пример цикла которым я добавляю записи в БД:
В запросе сначала использовал параметры, но потом ради эксперимента изменил на редактирование строк ("*" - это на самом деле текстовые данные), ситуация не изменилась. Кто что скажет? P.s. На момент тестирования OldNames.Count было равно 0. |
| Автор: Savek 29.2.2008, 16:58 | ||||
1. Значительного увеличения производительности можно добиться заменой цикла на запрос вида
т.е. вставка всех записей 1-м запросом (не всегда возможна) 2. Замена AdoQuery на ADOCommand даст ощутимое увеличение скорости 3. Обязательно использование параметров и "припарка" запроса:
|
| Автор: Viy_2007 1.3.2008, 01:53 |
| Спасибо Savek, пункты 2 и 3 действительно помогли. Теперь добавление свелось до 1 минуты. Но у меня возникло ещё два вопроса: 1. почему если сразу же после добавления этих записей сделать SELECT таблицы то записи не будут видны? (я конечно догадываюсь что это такая задержка на обновление, но тогда как это можно преодолеть?) 2. какими методами объекта ADOCommand можно получить результат возвращаемый запросом SELECT? (аналог ADOQuery.FieldByName('Name').AsString) |