Показать сообщение отдельно
  #5  
Старый 14.10.2011, 09:06
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,100
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Тут надо знать как организована база.
Если в соответсвии с НФ3, то это будет выглядеть как-то так:

1. Таблица справочника должностей:
Код:
ID | Position
---|-------------
1  | Водитель
2  | Кассир
...


2. Основная таблица, например, список сотрудников:
Код:
ID | Position_ID | FIO          
---+-------------+------------------
1  | 1           | Иванов Иван Иванович
2  | 1           | Пертов Петр Петрович
...

тогда нам надо:
1. Вывести в TreeView все записи из табл. Position. Значение поля ID можно "положить" в свойство Data узлов.
2. При выделении узла (OnChange, если не ошибаюсь) надо сформировать новый запрос к основной таблице с соотв. Код будет примерно такой:
Код:
ADOQuery1.Close;
ADOQuery.SQL.Text := 'SELECT * FROM Emloyee WHERE Position_ID =' + 
                                   IntToStr(Integer(TreeView1.Selected.Data));
ADOQuery1.Open;

Есть возможность сразу получить весь список и фильтровать его динамически на стороне клиента в событии OnFilter компонента доступа к данным. Но данный фокус можно использовать только в случае, когда выборка из основной таблицы ГАРАНТИРОВАННО небольшая и редко меняющаяся (например, список сотрудников в отделе кадров, если это список свободных сотрудников, то уже есть ограничения).
Ответить с цитированием