Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Добавление записей (ADO) [D6, Access]


Павел Николаевич ©   (2002-08-12 05:13:00) 

Программа из внешнего источника должна заносить в БД Access данные.
Используется ADO.
Проблема заключается в маленькой скорости добавления записей.

Тестировал несколько метотодов добавлления записей.
1. С помощью ADOCommand выполняется запрос на добавление записи:
"INSERT INTO table4 VALUES (1,2,3)"
2. Добавление с помощью метода
TADODataSet.AppendRecord([1,2,3])
3. Добавление с помощью метода
TADODataSet.AppendRecord([1,2,3])
в "пакетном" режиме ( TADODataSet.LockType:=ltBatchOptimistic;)
и с вызовом TADODataSet.UpdateBatch в конце.

Наиболее быстрый метод №1, потом №3 и №2. Причем №2 и №3 почти
одинаковые и где-то на 25% медленее метода 1.
Получается скорость порядка 300 записей в секунду (900 МГц Duron).
Access копирует из таблицы в таблицу 10000 записей за доли секунды.

Есть ли возможность ускорить процесс (возможно другим методом, через
внешний файл...)?


Soft(Unpowered Kiborg)   (2002-08-12 11:45:00) [1]

Советую использовать ADOQuery и придварительно при этом подключится через ADOConnection(это экономит время на создании подключения к базе). А далее

ADOQuery.Sql.Clear;
ADOQuery.Sql.Add("insert into table4(ваши поля) values(ваши данные)");
ADOQuery.Prepare;
ADOQuery.ExecSql;
ADOQuery.Unprepare;


Shaman_Naydak   (2002-08-12 11:25:00) [2]

Для попозиционной вставке: можно ускорить 1-ый способ
INSERT INTO table4 VALUES (:Value1,:Value2, :Value3)
Выставь Prepared:=True

и в цикле загоняй значения через параметры, не изменяя текста запроса


sniknik   (2002-08-12 11:15:00) [3]

Из таблици в таблицу в родном формате самая быстрая скорость, из внешнего источника будет помедленней но не так медленно как в вашем случае добавления попозиционно.

Пользуйтесь пакетными SQL коммандами типа (INSERT INTO table4 (Fields) SELECT Fields FROM ...)
скорость будет около сек за 13052 зап. (селерон 1000)


Наверх

Титульная страница Поиск, карта сайта Написать письмо