Поиск:

Ответ в темуСоздание новой темы Создание опроса
> оптимизация изменения данных в БД Access 2002, слишком нерациональный запрос... 
:(
    Опции темы
Lunatikus
Дата 29.6.2007, 16:15 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



Вот общий вид проблемной части кода:
var
ost:double;
begin
while not ADOQuery.eof do
begin
ADOQuery.edit;
ost:="блабла и прочие вычисления"
ADOQuery.fields[1].asfloat=ost;
ADOQuery.next;
end;
end;

Изза кол-ва строк в запросе порядка 500 тысяч данная весч выполняется ОЧЕНЬ долго...что я делаю неправильно и как оптимизировать изменение данных в таблице?Возможная замена ADOQuery на ADOTable но получается тоже самое.Помогите,ветераны программирования БД!Спасибо за уделенное время.



--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Burka
Дата 29.6.2007, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.5.2007

Репутация: 1
Всего: 2



Я пихал вычисления в события AdoTable(Query), там перебор строк идет гораздо быстрее. Тока событие надо подобрать. Например OnCalcFields
или что нить такое, где автоматически перебираются все строки таблицы.
---
Еще, кстати, перебор идет быстрее когда таблицу не видно(но это помогает когда делаешь твоим способом). То есть там время больше тратится на перерисовку, чем на перебор.

Это сообщение отредактировал(а) Burka - 29.6.2007, 17:09


--------------------
Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей.
PM MAIL   Вверх
Данкинг
Дата 29.6.2007, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



А вместо перебора почему запросом сразу нельзя внести инфу? Или я чего-то не понимаю?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Vas
Дата 29.6.2007, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



В вычислениях участвуют только данных из таблицы или как то еще считается?
Вообще самый быстрый способ использовать SQL:
Код

update Table set field1=Field1*field2*45 where field1=.......



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Lunatikus
Дата 3.7.2007, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



to all:
Чтобы было понятнее,опишу еще более подробно:
Есть таблица DEAL в которой есть все поля из данного запроса. Однако сам он формируется из других таблиц.Мне надо его результаты обработать:
ost:=ost-ADOQuery.fields[1]+ADOQuery.fields[2]+ADOQuery.fields[3];
ADOQuery.fields[4]=ost;
после чего сохраняю эти данные в DEAL и сдвигаюсь вниз в ADOQuery и в DEAL(таблицы различаются только тем,что в DEAL нет запросных и расчетных данных,а по ключу и кол-ву строк все совпадает).Соответственно приходится одновременно работать с запросом на 500тыщ строк и таблицей на теже 500 тыщ строк =(

to Vas,Данкинг:
Как тут вставить апдейт я не представляю,мне же надо сдвигаться по строкам.И что,делать еще один ADOQuery,которому с каждым сдвигом менять параметры?

to Burka:
вычисления мне,Как видишь,надо делать по данным запроса.Как мне их запихнуть в ADOT?Поясни,Если не сложно,подробнее.
Если уберу отображение таблицы,все равно очень долго,я бы даже сказал,что мало что меняется...


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.