Главная страница
    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.46 MB
Время: 0.01 c
10-1121090816
kostik78ua
2005-07-11 18:06
2006.06.25
CORBA через интернет


2-1149355680
Ford
2006-06-03 21:28
2006.06.25
Sin


2-1149663739
kapral
2006-06-07 11:02
2006.06.25
MessageBox без запуска Application.Run()


2-1149476015
kolbasa
2006-06-05 06:53
2006.06.25
Выборка из таблицы


3-1146041888
Delphi basic
2006-04-26 12:58
2006.06.25
Crystal Peports из Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский