Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.005 c
3-90457
kserg@ukr.net
2002-02-01 10:08
2002.02.28
Как переименовать таблицу SQL-командой?


7-90681
viksoft
2001-11-04 14:17
2002.02.28
Как отформатировать винт (HDD) ?


3-90519
Barmen
2002-02-05 12:20
2002.02.28
У меня, господа программеры, вот такой вот вопросик...


4-90717
Delphimun
2001-12-20 12:55
2002.02.28
Как #0 сообщение от клавы о нажатии клавиши?


3-90445
Ser_Grey
2002-02-01 09:08
2002.02.28
Вроде простой вопрос, а ответа никто не знает!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский