Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2012, 15:12   #1
nVz
Пользователь
 
Аватар для nVz
 
Регистрация: 09.12.2009
Сообщений: 61
По умолчанию ADO(mdb)+Delphi7

Всем добрый день!
Очень нужен нужный и важный совет)
Сразу скажу что переходить на другую СУБД уже поздно, и если ничего нельзя поделать будет плохо.
Вообщем о птичках:
Есть база в которой куча таблиц с кучей данных.
в таблице одной порядком 100 тыс + строк. данные заносятся циклически перебором. т.е может сразу за один клик добавится порядком 100 строк.
Ну и происходит такое добавление с таким объемом данных около 5 минут.
Вопросы:
1. Влияет ли объем таблицы на время добавления?
2. С каким объемом данных справляется аксесс в связке с делфи?
3. Или это и есть норма для аксеса? и ничего с этим уже не поделать?

добавление происходит так:
Код:
ADOQuery1.Insert;
ADOQuery1.Fieldbyname(..).AsString := '';
...
ADOQuery1.Post;
Помогите советом!!!!
icq: 489-124-264; mail: invazia@mail.ru

Последний раз редактировалось nVz; 16.08.2012 в 15:16.
nVz вне форума Ответить с цитированием
Старый 16.08.2012, 15:21   #2
Sm1Le
Форумчанин
 
Аватар для Sm1Le
 
Регистрация: 31.10.2008
Сообщений: 500
По умолчанию

ну акцес тормоз.

А ускорит твою работу, как на меня занесение всех изменений, за один раз, в бд, и подтверждение транзакции, 1 раз. А не каждый...
А вообще тот кусок кода ничего не показывает как тебе можно помочь.
Skype : UASm1Le.
Sm1Le вне форума Ответить с цитированием
Старый 16.08.2012, 15:50   #3
nVz
Пользователь
 
Аватар для nVz
 
Регистрация: 09.12.2009
Сообщений: 61
По умолчанию

да кусок кода я скинул, потому что знаю что можно sql Запросом добавлять, а тут немного другое добавление. и где быстрее неизвестно.
А добавление в котором много строк за раз происходит обычным циклом for. сколько например накидали плюсиками в листбокс данных, столько строк и должно быть + остальные поля присваиваются.

Вообщем походу Аксесс не способен быстрее обрабатывать столько данных?
Просто дело в том что по коду можно сократить время на пару секунд при более разумном построении цикла, на правильном присваивании значениям переменным. но это все копейки. и если аксесс просто такой объем не способен обрабатывать, то эти секунды не спасают
icq: 489-124-264; mail: invazia@mail.ru
nVz вне форума Ответить с цитированием
Старый 16.08.2012, 15:54   #4
nVz
Пользователь
 
Аватар для nVz
 
Регистрация: 09.12.2009
Сообщений: 61
По умолчанию

Sm1Le а не знаешь можно ли склеить 2 базы (mdb) Т.е для статистики и прочего есть основная огромная база, а для добавления данных аналогичная копия только пустая, и при завершении работы склеивать все в главную.

Может есть исходничек?
icq: 489-124-264; mail: invazia@mail.ru
nVz вне форума Ответить с цитированием
Старый 16.08.2012, 16:22   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Sm1Le уже подсказал направление: один раз начать транзакцию, потом в цикле SQL-ским INSERT-ом вставка, по концу завершение транзакции. Как там транзакции ACCESS поведут себя в компании с ADO не могу сказать, но попробовать стоит
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.08.2012, 16:36   #6
Sm1Le
Форумчанин
 
Аватар для Sm1Le
 
Регистрация: 31.10.2008
Сообщений: 500
По умолчанию

намного быстрее будет

Код:
sql.append:='insert into ... ;'
sql.append:='insert into ... ;'
sql.append:='insert into ... ;'
sql.append:='insert into ... ;'
transaction complete
чем

Код:
for i :=0 to 1000 do 
begin 
sql.close;
sql.clear;
sql.text:='insert into ...;'
sql.execsql;
end;
2-ой способ очень медленный ВЕЗДЕ !
Skype : UASm1Le.
Sm1Le вне форума Ответить с цитированием
Старый 16.08.2012, 16:38   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
намного быстрее будет
Наврядли провайдер для ACCESS поддерживает множественные SQL-команды
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.08.2012, 16:39   #8
Sm1Le
Форумчанин
 
Аватар для Sm1Le
 
Регистрация: 31.10.2008
Сообщений: 500
По умолчанию

а клеить проще всего обычным запросом по типу

Код:
insert into table1 values (select * from table2)
На чистом сервере такое можно сделать запросом, в Делфях ... надо смотреть, можно вытянуть все данные, и анализирую перебором составить запрос.
Skype : UASm1Le.
Sm1Le вне форума Ответить с цитированием
Старый 16.08.2012, 16:43   #9
nVz
Пользователь
 
Аватар для nVz
 
Регистрация: 09.12.2009
Сообщений: 61
По умолчанию

Sm1Le, а как я добавлю без цикла например за раз 100 строк?
дело в том что построчное одноразовое добавление не нужно.
я на форме выбираю сколько и чего мне добавить, заполняю всё, потом нажимаю добавить и все данные должны разнестись, без цикла тут вообще никак не обойтись.

есть идея создать копии таблиц нужных, и в них всё вносить, а потом в один прекрасный момент, ставить чтобы все копировалось в таблицы оригиналы, а копии очищать ну и потом опять быстро все разносить.

или же еще удобней 2 одинаковых mdb пустой и заполненные, но как склеивать не знаю.
icq: 489-124-264; mail: invazia@mail.ru
nVz вне форума Ответить с цитированием
Старый 16.08.2012, 16:49   #10
nVz
Пользователь
 
Аватар для nVz
 
Регистрация: 09.12.2009
Сообщений: 61
По умолчанию

Вообще само добавление достаточно быстро все разносит и вполне устраивает, но это при пустой или малой по объему табл. а когда 100 тыс строк, то добавляет очень долго. значит Insert сначала колдует над чемто, а потом только добавляет
icq: 489-124-264; mail: invazia@mail.ru
nVz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запрос SQL через ADO - ошибка Delphi7 -Jack- БД в Delphi 3 12.07.2012 21:10
ADO .mdb и DateTimePicker Never74 БД в Delphi 5 06.12.2011 05:58
unable to rename 'C:\ProgramFiles\Borland\Delphi7\Bi n\Delphi32.$$$' to 'C:\Program Files\Borland\Delphi7\ KazBoy Помощь студентам 1 12.04.2011 18:07
mdb+ADO главная и подчиненные таблцы masal77 БД в Delphi 2 03.04.2011 09:34
как подключится к базе база mdb если в bds2006 нет вкладки ADO ? DeDoK БД в Delphi 4 15.09.2010 08:48