![]() |
|
![]() ![]() ![]() |
|
Viy_2007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
Доброго времени суток.
Ситуация следующая: при помощи ADO Query добавляю большое количество записей в БД Access. Так добавление порядка 17000 записей выполняется 10-12 минут. После чего у меня возник вопрос, это нормально или всё же я что-то наплужил в коде? И сразу же вопрос: как можно ускорить этот процесс? Возможно лучше взять другой компонент? Заранее спасибо. |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
От числа полей тоже зависит. А ADO для Access - самое оно ИМХО.
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
Rodman |
|
|||
CIO ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 6144 Регистрация: 7.5.2006 Где: Ukraine ⇛ Kyiv ci ty Репутация: 22 Всего: 122 |
Аксесс не предназначен для большого кол-ва данных...
вот оттуда и тормоза!!! |
|||
|
||||
Savek |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 10.4.2006 Где: Воронеж Репутация: 7 Всего: 7 |
||||
|
||||
Viy_2007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
11 полей в каждой записи. не думал что для аксесса 17000 - это большое количество данных... ну а может посоветуете какую-нибдуь локальную бд для таких объёмов?
Добавлено @ 16:50 Ну вообщем вот пример цикла которым я добавляю записи в БД:
В запросе сначала использовал параметры, но потом ради эксперимента изменил на редактирование строк ("*" - это на самом деле текстовые данные), ситуация не изменилась. Кто что скажет? P.s. На момент тестирования OldNames.Count было равно 0. Это сообщение отредактировал(а) Viy_2007 - 28.2.2008, 17:05 |
|||
|
||||
Savek |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 10.4.2006 Где: Воронеж Репутация: 7 Всего: 7 |
1. Значительного увеличения производительности можно добиться заменой цикла на запрос вида
т.е. вставка всех записей 1-м запросом (не всегда возможна) 2. Замена AdoQuery на ADOCommand даст ощутимое увеличение скорости 3. Обязательно использование параметров и "припарка" запроса:
|
||||
|
|||||
Viy_2007 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 27.11.2007 Репутация: нет Всего: нет |
Спасибо Savek, пункты 2 и 3 действительно помогли. Теперь добавление свелось до 1 минуты. Но у меня возникло ещё два вопроса:
1. почему если сразу же после добавления этих записей сделать SELECT таблицы то записи не будут видны? (я конечно догадываюсь что это такая задержка на обновление, но тогда как это можно преодолеть?) 2. какими методами объекта ADOCommand можно получить результат возвращаемый запросом SELECT? (аналог ADOQuery.FieldByName('Name').AsString) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |