Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Фильтры в виде дерева [D6, IB6.x]


Страницы:   1 2

sokoloff ©   (2002-07-22 13:07:00) 

Встала задача организовать фильтры к базе в виде дерева, причем с наследованием, т.е. например дерево выглядит так:

\__
|
|- Москва(city like "Moscow") -
| |
| |- Ивановы(name like "Ivanov")
| |
| |- Петровы(name like "Petrov")
|
|- Питер
. . .


При выборе узла "Москва" фильтр должен выглядеть как-
SELECT * FROM MAIN WHERE CITY LIKE "Moscow",
а при выборе "Ивановы" как-
SELECT * FROM MAIN WHERE CITY LIKE "Moscow" and NAME LIKE "Ivanov", т.е. добавляются все значения выше лежащих узлов.
(SQL запросы не реальные, приведены только для примера)

Как это сделать я вобщем представляю, даже вчерне работает.

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


kalliopiy   (2002-07-22 16:35:00) [21]

Короче, я чего-то понял, чего-то - нет.

Откуда у тебя это дерево берется, вообще? Из таблицы? Или все забито в программе?

Ситуация такая - проще всего процесс фильтрации автоматизировать используя рекурсию. Пишешь, например, функцию NodeFilter с параметром Node - выбранный узел дерева, например. Она возвращает результат (string): NodeFilter(Node.parent)+<фильтр для узла Node>. Обычная рекурсия. Но для этого нужно, конечно, некоторые штучки предварительно проделать. Т.е. при построении дерева определить что это за узел (кто он - city или ЗАО или ...), а потом уже эту информацию использовать в своей рекурсивной функции.

Честно говоря, сомневаюсь, что я сам бы во всем этом разобрался по своим словам. Но если надо - спрашивай дальше.


Sokoloff   (2002-07-22 16:06:00) [22]


> Откуда такая любовь к деревьям?

От пользователей+начальство. Вообще IMHO требование логично.
Прога - морда к базе данных, есть возможность создавать и сохранять фильтры, в первой версии был просто комбобокс с названиями фильтров, но количество последних растет, управлять ими стало неудобно. Попросили сделать иеерархию фильтров, чтоб проще с ними работать. Теперь интерфейс программы становиться похожим на почтового клиента, слева-вверху дерево фильтров (почтовые ящики), справа-вверху dbtable с краткими сведениями(спсок писем в ящике), внизу по всей ширине подробные сведения о выбранной записи(текст письма), для пользователей привычно, а это есть гуд.


> Если это тебе еще интересно, то можно было бы обсудить,
> но только хочется узнать побольше из того, что тебе требуется
> на выходе. Ну, например, насколько глубокое твое дерево,

Жосткого ограничения нет, сколько на создают - столько и будет

> и при каких условиях, вообще, ты собираешься фильтровать
> таблицу ( т.е. я так понимаю, что пользователь из TreeView
> выбирает узелок, а тут бац и табличка отфильтровалась...

Да, именно так.

Фильтры хочу хранить в самой базе, необходимо добавление/удаление/перемещение фильтра, изменение его значения.
Главное, что фильтры должны наследоваться, т.е. если родительский узел хранит "city like "Moscow" and firmtype like "ЗАО"", а дочерний по которому кликнули "name like "Pupkin""то запрс к базе буде типа
"SELECT * from main where city like "Moscow" and firmtype like "ЗАО" and name like "Pupkin"".
Соответственно если у родительского узла есть свой родитель, то к этому запросу должно прибавляться значение дедушки.
Значение может переопределяться детьми.
Отец - "city like "Moscow" and firmtype like "ЗАО""
Сын - "firmtype like "ООО"",
запрос - "SELECT * from main where city like "Moscow" and firmtype like "ООО"".






kalliopiy   (2002-07-22 15:38:00) [23]

Если это тебе еще интересно, то можно было бы обсудить, но только хочется узнать побольше из того, что тебе требуется на выходе. Ну, например, насколько глубокое твое дерево, и при каких условиях, вообще, ты собираешься фильтровать таблицу ( т.е. я так понимаю, что пользователь из TreeView выбирает узелок, а тут бац и табличка отфильтровалась... Илил еще как?).
Поподробнее, плз.


kaif   (2002-07-22 14:39:00) [24]

Откуда такая любовь к деревьям?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо