Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.25;
Скачать: CL | DM;

Вниз

Медленное обновление БД   Найти похожие ветки 

 
kreyl   (2006-04-26 00:01) [0]

Delphi2006 + ADO +Access. Программа производит вычисления; их результат являет собой несколько массивов по 15000 чисел в каждом. Эти массивы нужно запихнуть в таблицу БД.
Таблица простая - два столбца, Identity и результат.

Сначала очищаю таблицу запросом, потом открываю dataset к ней с параметром LockType := ltBatchOptimistic; потом отключаюсь от базы и заполняю датасет. Потом подключаюсь к базе и говорю UpdateBatch.

Этот самый апдейт работает очень медленно - минут десять. Размер результирующего mdb файла при этом - меньше 10 МБ. Подскажите, пожалуйста, как быстро внести в БД данные из массива? Может, я структурно что-то делаю неправильно?
Заранее спасибо.


 
Johnmen ©   (2006-04-26 00:47) [1]

Просто запросом INSERT INTO ...


 
MsGuns ©   (2006-04-26 13:35) [2]

>Johnmen ©   (26.04.06 00:47) [1]
>Просто запросом INSERT INTO ...

Одиночными инсертами будет не быстрее, чем TDataSet.Append
Для "бістрой закачки" эффективен выгруз в Эксель и из него средствами SQL в акцешную БД


 
Johnmen ©   (2006-04-26 13:39) [3]


> MsGuns ©   (26.04.06 13:35) [2]


Быстрее.


 
Delphi basic   (2006-04-26 13:41) [4]

Попробуй, то же самое, но приконнектиться к БД через ODBC (хотя бы ради интереса :)


 
MsGuns ©   (2006-04-26 14:10) [5]

>Johnmen ©   (26.04.06 13:39) [3]
>Быстрее.

В общем случае - нет. При правильных установках коннекта и самого датасета практически одни в один, да это и понятно - ведь дельфишный TADODataSet юзает те же самые запросы. "Тормоза" получаются лишь как следствия укправления транзакцией самим датасетом, что тоже "лечится" ;)


 
Johnmen ©   (2006-04-26 14:17) [6]


> MsGuns ©   (26.04.06 14:10) [5]


Быстрее. Ибо не надо "обслуживать" набор данных.


 
Slym ©   (2006-04-28 05:18) [7]

1. Монопольно открой базу.
2. ltBatchOptimistic - накой тебе это? памяти много?
3. Можно INSERT INTO +prepared
4. Если очень быстро надо временная аля "MemotyTable", или массив, или TMemoryStream, или тупо file of record, а уж в конце можно и в базу лить (смахивает на ltBatchOptimistic).
5. можно 2х поточно... 1 считает и пишет в буфер, 2 пишет в базу


 
Slym ©   (2006-04-28 05:34) [8]

Я бы делал связку:
Монопольный доступ+2х поточно, с буфером TMemoryStream+ INSERT INTO +prepared



Страницы: 1 вся ветка

Текущий архив: 2006.06.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
2-1149679048
Кирей
2006-06-07 15:17
2006.06.25
Работа с winexec


4-1143146463
Lucefer
2006-03-23 23:41
2006.06.25
Вопросы по обмену сообщениями между TThread ами


2-1149450252
ZV
2006-06-04 23:44
2006.06.25
???


2-1149259611
>BeRDor<
2006-06-02 18:46
2006.06.25
Таймер


2-1149319299
Рашид
2006-06-03 11:21
2006.06.25
не получается работа со строкой