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

Вниз

Как ускорить Locate?   Найти похожие ветки 

 
Evg12345 ©   (2003-04-28 09:02) [0]

Здравствуйте!
Столкнулся с очень неприятной загвозкой. Работаю с таблицой, в которой около 25 000 записей (пока). Locate в ней происходит около 1сек. В принципе быстро, но я на основе обработки строю оперативный отчет продаж (который должен строится максимально быстро). И вызываю Locate в среднем 150 раз. Попробовал сделать тот же отчет в Foxpro - отрабатывает за 5 сек (но Foxpro ведь не выход!?). Дак вот, в связи с этим, вопрос: можно ли чем нибудь заменить Locate (аналог SEEK)?
Для связи с таблицей использую BDE.TQuery (osn).
Osn.Locate("key_nom;date",VarArrayOf([key_nom,d]),[])


 
Zacho ©   (2003-04-28 09:10) [1]

Создай индексы на поля, по которым делаешь поиск.


 
Yuri   (2003-04-28 09:19) [2]

Очевидно, что дело не в LOCATE, a в неправильном построении оперативного отчета продаж. Используя зопросы и критерии отбора в самом генераторе отчетов - Crystal Reports посторишь все что угодно душе и предостаточно быстро.
Рекомендую.
Yuri.


 
Evg12345 ©   (2003-04-28 09:47) [3]

Насчет индексов пробовал, быстрее не становится!
Еще попробовал использовать TTable с указанием конкретного индекса. Вообще ищет около 3 с. :(


 
Lika   (2003-04-28 10:00) [4]

Используй запрос, а не Locate.


 
Anatoly Podgoretsky ©   (2003-04-28 10:02) [5]

Можно попробовать поостроить составной индекс по key_nom + date и отказаться от LOCATE в пользу GotoKey, возможно увеличение скорости на порядки или около.

Можно и нужно пересмотреть алгоритм, это как правило основной резерв. Может удастся перейти к линейной последовательной обработки. Правильно построенный индекс и запрос тоже чрезвычайно сильно могут ускорить обработку.

Ты писал, что попробовал индексы, вот бы и привел какие индексы ты сделал и как то неверится, что у тебя одновременно и dBase, FoxPro.

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


 
AlexSerp ©   (2003-04-28 11:45) [6]

Когда я писал на dBase, мой шеф научил меня такому методу.
Сортируешь все файлы, которые нужны для отчета, по необходимым ключевым полям и за один проход по основному файлу, подбираешь инфу из дополнительных, отслеживая изменения значений ключевых полей.


 
Evg12345 ©   (2003-04-28 12:12) [7]

Попробовал написать следующую функцию вместо Locate (из хелпа):
With Table1 Do
Begin
EditKey;
FieldByName("key_nom").AsInteger:=n;
FieldByName("date").Value:=d;
Result:=GotoKey
End
срабатывает влет! Вот только не находит ничего :( скажите что не так?


 
Anatoly Podgoretsky ©   (2003-04-28 12:14) [8]

Да все не так, подземный стук.


 
Evg12345 ©   (2003-04-28 12:26) [9]

спасибо и на том


 
Jeca57   (2003-04-28 14:18) [10]

А почему нельзя сразу построить запрос на весь отчет?
Тогда вообще не нужен никакой locate.



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

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

Наверх




Память: 0.49 MB
Время: 0.016 c
6-59820
ИгорьОК
2003-03-20 03:07
2003.05.19
Net send


3-59605
Анатолий
2003-04-28 14:38
2003.05.19
Копировать поле типа


4-60003
Step[B.M.]
2003-03-01 12:42
2003.05.19
Как из моей проги запустить другой exe-шник, да еще с параметрами


3-59588
Дмитрий Баранов
2003-04-25 18:15
2003.05.19
Ограничение длины идентификатора в Ora при создании таблиц


6-59840
MortalScorpion
2003-03-20 17:06
2003.05.19
Немогу описать событие в ядре