Форум: "Базы";
Текущий архив: 2002.02.28;
Скачать: [xml.tar.bz2];
ВнизФильтрация НД Найти похожие ветки
← →
Johnmen (2002-01-31 12:24) [0]Такой вот глюк при работе с IBDataSet : ставлю фильтр Filtered:=True; Filter:=<....>; и ничего не происходит ! Это я глючу или IBDataSet ? Кто сталкивался - отзовитесь !!!
← →
Fareader (2002-01-31 12:37) [1]У них фильтры ставятся в событии OnFilterRecord таким макаром:
Accept := DataSet["апап"]=2;
т.те, ставиш фильтр Filtered:=True, а в Filter ничего не пишешь
← →
Alexandr (2002-01-31 12:44) [2]свойство Filter это просто так, для совместимости (????), туда можно хоть чего писать (хоть Джефф Оверкэш дурак)
← →
Johnmen (2002-01-31 13:40) [3]>Alexandr : я так и предполагал...спасибо
а кто это - Джефф Оверкэш ?
>Fareader : так тоже делал, но там свои проблемы...спасибо
← →
Alexandr (2002-01-31 13:51) [4]так, как тебе Fareader и надо фильтрацию делать.
Если тебе конечно нужна фильтрация на клиенте, а не на сервере.
Это универсальный способ и он везде работает.
А Джефф Оверкэш это разработчик IBX - это как раз те компонеты, которыми ты пользуешься.
А вообще, мой тебе совет- используй лучше IBObjects или FIBPlus, чтобы потом не пожалеть
← →
Johnmen (2002-01-31 14:00) [5]>Alexander : обязательно перейду (давно хочу) на FIBPlus,
просто сейчас совсем нет времени - добиваю проект, где используется IBX [Джефф Оверкэш >:((( ]...
еще раз попробую OnFilterRecord...еще раз спасибо.
← →
Fareader (2002-01-31 14:53) [6]Можешь в этом событии сделать кучу возможных фильтров через кейс.
Я так сделал
case state_nak of
1:dataset.filtered:=false;
2:Accept := (DataSet["пап"]=-1) or (DataSet["ап"]=1);
3:Accept := DataSet["апа"]=2;
4:Accept := DataSet["апа"]=3;
5:Accept := DataSet["апа"]=4;
6:Accept := (DataSet["апа"]=4) or (DataSet["апа"]=5);
7:Accept := DataSet["апа"]=s_drv_query.fieldbyname("рр").asinteger;
8:Accept := DataSet["рр"]=strtoint(F_G_Form.edit1.text);
9:Accept := DataSet["апарп"]=strtoint(F_G_Form.edit2.text);
10:Accept := (DataSet["апрп"]=strtoint(F_G_Form.edit1.text)) and (DataSet["парп"]=strtoint(F_G_Form.edit2.text));
end;
сделал глобальную переменную state_nak и перед установкой фильтра ставлю ее в нужное значение
может некрасиво, но работает ;)
← →
Johnmen (2002-01-31 15:27) [7]>Fareader © : спасибо, что не поленился столько нашлепать, но как пользоваться OnFilterRecord я знаю :)))))
просто надо иметь в виду, что внутренний механизм фильтрации НД в случае Filter:=<...> и OnFilterRecord несколько разный,
в связи с чем OnFilterRecord намного тормознутей Filter:=<...> ;o)
но раз в TIBDataSet облом с Filter:=<...>, то придется OnFilterRecord...
← →
Fareader (2002-01-31 16:45) [8]Видишь ли в чем дело, я сам порбовал перейти с BDE на IBX, но скорость работы, в том числе фильтра и локейт ну никак, поэтому пришлось переходиь на FIBPlus, там побыстрее, но все равно до скорости BDE не дотягивает :(
← →
Johnmen (2002-01-31 17:03) [9]>Fareader © : не сравнивал, но знаю, что в BDE фильтрация - самая сильная сторона.
А если со скоростями, как ты говоришь, то это удручает 8o(
← →
Fareader (2002-01-31 18:43) [10]Я имел ввиду скорость фильтра и локейта, а все остальное в FIBPlus на высоте. И я заметил такой глюк BDE - если обновлять большое (6000 и более записей), то где-то после 3000 записи начинают обновляться очень тупо, а если делать Commit - то вообще мрак...
← →
Mikhail (2002-01-31 19:47) [11]А не можно ли по-подробнее про FIBPlus начинающему?
Где он есть? Премного влагодарен.
← →
Alexandr (2002-02-01 07:08) [12]2Mikhail: fibplus.com.ua
← →
Fareader (2002-02-01 11:27) [13]2 Alexandr
Туговато фильтры работают, не в пример BDE, есть идеи по повышению скорости их работы?
← →
Alexandr (2002-02-01 12:54) [14]должно быть одинаково.
Для корректной проверки перед наложением фильтра сделай fetchAll.
А какая у тебя версия FIBPlus?
← →
Fareader (2002-02-01 13:27) [15]VER 4.5
FetchAll - помог, но локейт даже после FetchAll - отрабатывает дольше фильтра, приходится накладывать фильтр, а потом снимать. Но даже так скорость локейт у BDE - выше. В общем терпимо, но юзера ропщут - дескать на старой версии проги - быстрее было :(
← →
Johnmen (2002-02-01 13:31) [16]>Fareader © : м.б. изменить идеологию - напр. не работать с большими НД ?
← →
Fareader (2002-02-01 13:34) [17]Я думаю, что НД в 100-200 записей - это не так уж много, к тому же вариантов нет - они нужны все.
← →
Alexandr (2002-02-01 13:39) [18]200 записей и locate долго проходит после fetchall?
странно... У них что-за компьютеры?
А версия FIBPlus 4.4.12? Или более старая? Они там улучшали работу с памятью.
у меня вообще pos(substr,str) часто вместо locate применяется и то скорость нормальная.
← →
Fareader (2002-02-01 13:48) [19]433 Celeron 32 RAM Win 98
у меня 800 Celeron 256 RAM Win 2000
в install.txt написано WELCOME TO DEVRACE FIBPLUS 4.5
← →
}{unter (2002-02-01 13:49) [20]Не знаю по аналогии с BDE сначала назначается фильтр, а потом применяется т.е.
Filter :=".....";
Filtered := True
как может, что-то произойти если к моменту запуска фильтра он не задан ?
И ещё по аналогии с BDE средства хуже Filter просто не существует! Медленнее средства просто нет если только не самому пробегать в цикле по рекордам скидывая маркеры в какой нибудь стринг лист.
SetRange - хорошая альтернатива фильтру !
← →
Alexandr (2002-02-01 13:56) [21]1) SetRange только для файловых баз данных.
2) А может фильтр проще на сервере делать в запросе в условии where
3) У меня примерно такие-же компы, и скорость нормальная
4) а detail у этого DataSet нету?
← →
Johnmen (2002-02-01 13:56) [22]К слову :
Посмотрел старые проги (с использованием BDE) :
на 1000 записей НД поиск типа <найти вхождение>[pos(substr,str)]
работает прибл. 1 сек. на P-100 c 48MB !!!!!!
← →
Alexandr (2002-02-01 14:02) [23]во-во.
Короче так.
2fareader: Пиши тестовый проект, где у тебя тормозит, что бы в нем все было, и было понятно!!! И зашли мне по мылу. База если большая, то шли не всю, а только то, что надо. Я там посмотрю чего ты понаписал... Delphi 5, база в GBK-в бакупе и сожми Zip.
← →
Johnmen (2002-02-01 14:05) [24]>}{unter © : кто сказал, что не создан ?!
извини, но ты слегка не в тему...посмотри предыдущий диалог :)
А фильтры в BDE работают исключительно быстро
...И ещё по аналогии с BDE средства хуже Filter просто не существует!...
Не надо быть таким категоричным !!!!
← →
Fareader (2002-02-01 14:18) [25]Ок. зашлю. Только базу надо порезать, а то бекап на 100 мб не пролезет
← →
Alexandr (2002-02-01 14:22) [26]давай. В понедельник посмотрю.
Кстати проект делай под Delphi5.
← →
Fareader (2002-02-01 14:40) [27]2Alexandr. Так и так с ним работаю. Только гнилыми помидорами и тухлыми яйцами не кидаться и больно не бить за качество кода. Там комментариев нету ;)
← →
Mikhail (2002-02-01 14:41) [28]>>Alexandr Спасибо
← →
}{unter (2002-02-01 15:33) [29]>>Johnmen
Почему именно так могу объяснить. При работе с Filter не используются индексы. Если файл большой в длинну работа с Filter разительно отличается от работы с SetRange.
Да я писал и знал, что не в тему просто обратил анимание на постановку вопроса особенно на алгоритм
Filtered := True;
Filter := "<>";
это меня и смутило. Я провёл анологию (если не понял) с таблицами Paradox по применению фильтра если он назначается позже, чем даётся указание на его применение.
И менно по аналогии я заподозрил, что у автора топика именно в этом проблема. Конечно же я не в курске приминима эта шняга к интербейсу или нет, я с ним не работал.
← →
Johnmen (2002-02-01 16:32) [30]>}{unter © : я тебя понял, но пременительно к IB через BDE
1. последовательность Filtered Filter не важна
2. фильтрация НД работает исключитель быстро, независимо от индексов
← →
}{unter (2002-02-01 18:14) [31]>>Johnmen
Сорри ! Я подозреваю, что могу чего-то и не знать !
Извини !
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.02.28;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.006 c