Oracle таблицу EMP на Treeview в delphi

Nathgul
Дата: 12.09.2019 10:37:31
Сломал голову уже... задача вывести всех сотрудников начиная с президента из таблицы emp в treeview используя delphi. логически понимаю что хотят.
есть президент (mgr=0)
у него 3 менеджера в разных городах(mgr=7839, deptno=10 20 30)
у тех еще есть свои подчиненные в тех же городах(mgr<>0, mgr<>7839, deptno=10 20 30).
то есть иерархию отследить по одной таблице emp могу.
к базе подключился, в dbgrid данные выводятся.

Вопросы:
Как в принципе внести данные в treeview?
вносить данные в treeview нужно тремя запросами? или можно ограничится одним?
есть ли какие нибудь примеры для изучения (например на основе базы типа: один город, какое-то кол-во улиц, какое-то кол-во домов на каждой улице). Заранее спасибо!!!
DesWind
Дата: 12.09.2019 10:54:37
Nathgul,

Таблицу сам формируешь? Тогда можно сделать через ID, PatrentID тогда достаточно перебора.
Nathgul
Дата: 12.09.2019 10:59:04
DesWind
Nathgul,

Таблицу сам формируешь? Тогда можно сделать через ID, PatrentID тогда достаточно перебора.

гридовскую табличку сам формирую (делал ее для проверки что данные приходят по запросу)? но суть еще в том что нужно просто создать приложение которое при запуске отобразит treeview в кором будет иерархичный список сотрудников начиная с президента.
Nathgul
Дата: 12.09.2019 11:00:09
DesWind
Nathgul,

Таблицу сам формируешь? Тогда можно сделать через ID, PatrentID тогда достаточно перебора.

с другой стороны буду я использовать или нет нигде не оговорено. табличку то можно и скрыть с глаз долой))
Nathgul
Дата: 12.09.2019 11:03:05
в целом то и нужен пример заполнения treeview из базы вида шеф-его манагеры в флиалах- сотрудники филиалов.... чтобы понять и как правильно заполняется treeview, и какая логика используется при этом.
Nathgul
Дата: 12.09.2019 11:14:12
крутится алгоритм: сначала найти из базы начальника (mgr=0) и поставить его первым, запрос обнулить. потом новым запросом найти первого из трех манагеров (mgr=7839)и поставить его в подраздел начальника, после этого запустить второй запрос на поиск его сотрудников (mgr<>0, mgr<7839>, deptno манагера = deptno сотрудника)и ставить их уже в подраздел манагера... ну тд. вопрос как его реализовать и правильный ли он вообще.
DesWind
Дата: 12.09.2019 11:28:58
Nathgul,

Если данные формируешь сам, то и формировать их нужно иерархически, сначала глава департамента(Id=1; ParentId=0); потом подчиненные (Id=x; ParentId=1) и т.д. Далее простым перебором добавляешь в TreeView, в соответсвующие ветки, согласно иерархии.
Nathgul
Дата: 12.09.2019 11:48:07
DesWind
Nathgul,

Если данные формируешь сам, то и формировать их нужно иерархически, сначала глава департамента(Id=1; ParentId=0); потом подчиненные (Id=x; ParentId=1) и т.д. Далее простым перебором добавляешь в TreeView, в соответсвующие ветки, согласно иерархии.


EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17.12.80 800 20
7499 ALLEN SALESMAN 7698 20.02.81 1600 300 30
7521 WARD SALESMAN 7698 22.02.81 1250 500 30
7566 JONES MANAGER 7839 02.04.81 2975 20
7654 MARTIN SALESMAN 7698 28.09.81 1250 1400 30
7698 BLAKE MANAGER 7839 01.05.81 2850 30
7782 CLARK MANAGER 7839 09.06.81 2450 10
7839 KING PRESIDENT 0 17.11.81 5000 10
7844 TURNER SALESMAN 7698 08.09.81 1500 0 30
7900 JAMES CLERK 7698 03.12.81 950 30
7902 FORD ANALYST 7566 03.12.81 3000 20
7934 MILLER CLERK 7782 23.01.82 1300 10

это исходная таблица в Oracle... ее я получаю запросом select * from emp;... не совсем тебя понимаю как я могу сформировать иерархические данные и потом использовать их? извини если туплю... но реально перечитав массу воды про тривью уже голова закипает.
Dimitry Sibiryakov
Дата: 12.09.2019 12:33:44

Nathgul
вопрос как его реализовать и правильный ли он вообще.

Именно так его и реализовать: добавляешь в TTreeView начальника из одного запроса, а потом
всех его прямых подчинённых из второго запроса. В OnExpanding повторяешь процесс
добавления подчинённых для каждого Child из разворачиваемой ноды.

Posted via ActualForum NNTP Server 1.5

Gator
Дата: 12.09.2019 13:21:55
Dimitry Sibiryakov
Nathgul
вопрос как его реализовать и правильный ли он вообще.

Именно так его и реализовать: добавляешь в TTreeView начальника из одного запроса, а потом
всех его прямых подчинённых из второго запроса. В OnExpanding повторяешь процесс
добавления подчинённых для каждого Child из разворачиваемой ноды.
Будет работать, пока кто-то из города bobo не купит жильё в городе coco и не совместит работу манагера в разных подразделениях этих городов. А если он гражданство расширит? Тем самым будет лес (два президента - два дерева).
Так не строят отношения (реляции).
Генеалогия нагляднее подчинённости сотрудников, а реальные топологии сложнее генеалогических лесов.
Простыми отношениями ID-ParentID в одной таблице тут не обойтись. Надо таблицы и связи плодить.
Хотя задание Автора ваша рекомендация решает, но...
Больно смотреть на широкие нермализованные таблицы. Картинка с другого сайта.