Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.21;
Скачать: [xml.tar.bz2];




Вниз

Тормозит Locate в FIBPlus 


Fareader   (2002-01-29 11:16) [0]

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



Alexandr   (2002-01-29 11:24) [1]

через какой еще фильтр ты пробовал?



Praco   (2002-01-29 11:31) [2]

Locate предварительно делает FetchAll для загрузки всей выборки в локальный кэш. Ускорить его нельзя. Можно ограничить объем выборки Select"а.
Если использовал локальный фильтр - то он тоже делает FetchAll - ускорения не будет.
Подробности http://ib.demo.ru/devinfo/bde.htm.



Desdechado   (2002-01-29 11:42) [3]

2 Praco
Не путай человека, он без БДЕ работает.

А вот использовать FIBQuery и ограничить выборку в SELECT явно быстрее, чем шарить по таблице Locate"ом



Alexandr   (2002-01-29 11:51) [4]

люди!
1)он с FIBPlus работает
2) Иногда все-таки нужно использовать именно Locate, а не через Select



Fareader   (2002-01-29 11:52) [5]

Через такой

Accept := DataSet["num_yar"]=strtoint(Out_Yar.edit1.text);



Alexandr   (2002-01-29 11:57) [6]

и это быстрее чем Locate????
А зачем тебе это? Это для интерфейса программы (ну типа это поиск для юзера) или для чего?



Fareader   (2002-01-29 12:05) [7]

Есть выборка:

select nak.num_nak, nak.kod_pl, nak.kod_gr, nak.num_yar, nak.date_smena, nak.date_in, nak.date_out,
nak.vozvrat, nak.state_nak, nak.all_sht, nak.cls_smen, nak.cls_month, nak.num_nak_u,
yar.graf, yar.ezd, yar.drive_y, yar.id, yar.kod_cx,
yar.date_print as yar_print

from (nak left join yar on nak.num_yar=yar.id)
where
(nak.state_nak between -1 and 3 and nak.state_nak<>0)
or (nak.B_Smena_F= :b_period and nak.E_Smena_F= :e_period)

order by nak.num_yar, nak.num_nak

туда уходит до 100 записей, а юзеру надо найти конкретный ярлык
(nak.num_yar), а как его найти как не через локейт. И еще: изменяю nak.state_nak, переоткрываю Dataset и эта запись уходит ниже, хотя по order by nak.num_yar, nak.num_nak она не должна никуда двигаться ???



Fareader   (2002-01-29 12:16) [8]

кажется нашел грабли по второй части вопроса (нарушение сортировки) в Datase.AllowedUpdateKinds в свойстве AutoCalcFields поставил false и записи не прыгают. А локейт значит дохлое дело?



Alexandr   (2002-01-29 12:34) [9]

1) ну можно в where дописать еще условие по nak.num_yar и каждый раз при поиске ярлыка переоткрывать запрос.
2) А после открытия FetchAll делаешь? Тогда все записи будут на клиенте и с сервера ничего тянуться при locate не будет
3) А detail у этого master нет?
4) Можно поставить таймер на locate, чтобы locate не вызывался пока пользователь не введет полностью номер ярлыка - будет только один locate вместо нескольких.
5) А какие типы полей у этого запроса? Может запрос, по которому идет поиск упростить, а остальные поля вывести в detail
6) А сам запрос сколько выполняется? А его FetchAll? А какой план запроса?



Fareader   (2002-01-29 12:49) [10]

1) дописывать в where - нецелесообразно, потому что нужна вся выборка, а при необходимости переход на нужный ярлык.
2)fetchall - помог - спасибо.
3) detail -нет
4)локейт идет после ввода всего номера
5)поиск идет по integer
6) запрос отрабатывается быстро

Спасибо за помощь!

А есть идеи по поводу Datase.AllowedUpdateKinds свойство AutoCalcFields
Чего это такое было?




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.21;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.033 c
1-66530           Tadeush               2002-02-04 12:52  2002.02.21  
16->10


1-66551           Dimedrol              2002-02-05 11:21  2002.02.21  
Не находится UNIT, прописанный в PATH


1-66561           maks_f                2002-02-05 14:40  2002.02.21  
Как получить процедуру из DLL


1-66536           SemFLY                2002-02-04 22:02  2002.02.21  
Как передать значение переменной из одного модуля в другой ?


3-66494           DeNNiss               2002-01-29 15:52  2002.02.21  
уважаемые программисты!