|
|
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
Сломал голову уже... задача вывести всех сотрудников начиная с президента из таблицы emp в treeview используя delphi. логически понимаю что хотят. есть президент (mgr=0) у него 3 менеджера в разных городах(mgr=7839, deptno=10 20 30) у тех еще есть свои подчиненные в тех же городах(mgr<>0, mgr<>7839, deptno=10 20 30). то есть иерархию отследить по одной таблице emp могу. к базе подключился, в dbgrid данные выводятся. Вопросы: Как в принципе внести данные в treeview? вносить данные в treeview нужно тремя запросами? или можно ограничится одним? есть ли какие нибудь примеры для изучения (например на основе базы типа: один город, какое-то кол-во улиц, какое-то кол-во домов на каждой улице). Заранее спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 10:37 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
Nathgul, Таблицу сам формируешь? Тогда можно сделать через ID, PatrentID тогда достаточно перебора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 10:54 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
DesWindNathgul, Таблицу сам формируешь? Тогда можно сделать через ID, PatrentID тогда достаточно перебора. гридовскую табличку сам формирую (делал ее для проверки что данные приходят по запросу)? но суть еще в том что нужно просто создать приложение которое при запуске отобразит treeview в кором будет иерархичный список сотрудников начиная с президента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 10:59 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
DesWindNathgul, Таблицу сам формируешь? Тогда можно сделать через ID, PatrentID тогда достаточно перебора. с другой стороны буду я использовать или нет нигде не оговорено. табличку то можно и скрыть с глаз долой)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 11:00 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
в целом то и нужен пример заполнения treeview из базы вида шеф-его манагеры в флиалах- сотрудники филиалов.... чтобы понять и как правильно заполняется treeview, и какая логика используется при этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 11:03 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
крутится алгоритм: сначала найти из базы начальника (mgr=0) и поставить его первым, запрос обнулить. потом новым запросом найти первого из трех манагеров (mgr=7839)и поставить его в подраздел начальника, после этого запустить второй запрос на поиск его сотрудников (mgr<>0, mgr<7839>, deptno манагера = deptno сотрудника)и ставить их уже в подраздел манагера... ну тд. вопрос как его реализовать и правильный ли он вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 11:14 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
Nathgul, Если данные формируешь сам, то и формировать их нужно иерархически, сначала глава департамента(Id=1; ParentId=0); потом подчиненные (Id=x; ParentId=1) и т.д. Далее простым перебором добавляешь в TreeView, в соответсвующие ветки, согласно иерархии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 11:28 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
DesWindNathgul, Если данные формируешь сам, то и формировать их нужно иерархически, сначала глава департамента(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;... не совсем тебя понимаю как я могу сформировать иерархические данные и потом использовать их? извини если туплю... но реально перечитав массу воды про тривью уже голова закипает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 11:48 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
Nathgulвопрос как его реализовать и правильный ли он вообще. Именно так его и реализовать: добавляешь в TTreeView начальника из одного запроса, а потом всех его прямых подчинённых из второго запроса. В OnExpanding повторяешь процесс добавления подчинённых для каждого Child из разворачиваемой ноды. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 12:33 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovNathgulвопрос как его реализовать и правильный ли он вообще. Именно так его и реализовать: добавляешь в TTreeView начальника из одного запроса, а потом всех его прямых подчинённых из второго запроса. В OnExpanding повторяешь процесс добавления подчинённых для каждого Child из разворачиваемой ноды.Будет работать, пока кто-то из города bobo не купит жильё в городе coco и не совместит работу манагера в разных подразделениях этих городов. А если он гражданство расширит? Тем самым будет лес (два президента - два дерева). Так не строят отношения (реляции). Генеалогия нагляднее подчинённости сотрудников, а реальные топологии сложнее генеалогических лесов. Простыми отношениями ID-ParentID в одной таблице тут не обойтись. Надо таблицы и связи плодить. Хотя задание Автора ваша рекомендация решает, но... Больно смотреть на широкие нермализованные таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 13:21 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
Nathgulкрутится алгоритм: сначала найти из базы начальника (mgr=0) и поставить его первым, запрос обнулить. потом новым запросом найти первого из трех манагеров (mgr=7839)и поставить его в подраздел начальника, после этого запустить второй запрос на поиск его сотрудников (mgr<>0, mgr<7839>, deptno манагера = deptno сотрудника)и ставить их уже в подраздел манагера... ну тд. вопрос как его реализовать и правильный ли он вообще. А кто знает, что mgr=0 - это президент, а mgr=7839 - подчинённые президента, а mgr=7698 уже ниже по иерархии? Если никто, кроме вас, то построить дерево можно, но это вы гвоздями прибьёте такую иерархию. Обычно для дерева должна быть таблица, в которой у каждой записи есть поле родителя. О чём вам DesWind говорил. Типа такого: IdParentId1null21314254 И тогда первым запросом вы получаете записи, у которых ParentId = null. И это будут корни дерева. А следующими запросами получаете детей для конкретных корней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 13:32 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
сформировал таблицу иерархическую, проставил поля id и parent_id. подскажите как на ее основании теперь построить дерево в treeview. заранее спасибо) прошу прощения за воду выше) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. слева id людей, потом имена и id руководителей на ними. level это столбец показывающий уровень родства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 13:39 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
goldmi45И тогда первым запросом вы получаете записи, у которых ParentId = null. И это будут корни дерева. А следующими запросами получаете детей для конкретных корней.Несусветная глупость!!! NULL суть неизвестно, что означает. Почему mgr=0 не может утонуть, а mgr=7839 стать президентом? Ключ менять/удалять? Не проще ли ключ президента хранить отдельно? Иди флажок поднять - мол этот 123 - Президент теперь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 13:46 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
Gatorgoldmi45И тогда первым запросом вы получаете записи, у которых ParentId = null. И это будут корни дерева. А следующими запросами получаете детей для конкретных корней.Несусветная глупость!!! NULL суть неизвестно, что означает. Почему mgr=0 не может утонуть, а mgr=7839 стать президентом? Ключ менять/удалять? Не проще ли ключ президента хранить отдельно? Иди флажок поднять - мол этот 123 - Президент теперь? Не скажите. )) NULL означает, что нет родителя. Это один из самых распространённых способов построения дерева. А для того, чтобы менеджер с ид=7839 стал президентом, нужно должности хранить отдельно от людей(менеджеров), потому как это разные сущности. И должна быть процедура назначения на должность, которая хранится в отдельной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 14:03 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
Nathgulсформировал таблицу иерархическую, проставил поля id и parent_id. подскажите как на ее основании теперь построить дерево в treeview. заранее спасибо) прошу прощения за воду выше) слева id людей, потом имена и id руководителей на ними. level это столбец показывающий уровень родства. Не надо LEVEL Бери как Дмитрий написал в 21969325 select id, name, parentid ... where parentid is null а дальше разворачивай дерево по текущему id родителя (как будто ты - начальник) select id, name, parentid ... where parentid = preid ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 14:04 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
goldmi45Не скажите. )) NULL означает, что нет родителя. Это один из самых распространённых способов построения дерева. А для того, чтобы менеджер с ид=7839 стал президентом, нужно должности хранить отдельно от людей(менеджеров), потому как это разные сущности. И должна быть процедура назначения на должность, которая хранится в отдельной таблице.Каша в голове. Нет родителя, т.е. он в воздухе болтается? Должности связаны бизнес иерархией. Люди никак не связаны, они сами по себе: Петя, Вася, Юля, Стеша, Яша, Фаня... Когда их ставят на должность, у них появляется иерархия. А когда Юля уйдёт в декрет, и её работу разделят Стеша с Яшей, твоя иерархия ломается. Ибо "отдельная таблица" это не предусматривает. А в реале, начальник просто звякнет Васе: мол, Юлькины дела сделайте, Стеша тебе поможет. А Вася работает под Яшей, а Стеша у Фани ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 14:21 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
GatorNathgulсформировал таблицу иерархическую, проставил поля id и parent_id. подскажите как на ее основании теперь построить дерево в treeview. заранее спасибо) прошу прощения за воду выше) слева id людей, потом имена и id руководителей на ними. level это столбец показывающий уровень родства. Не надо LEVEL Бери как Дмитрий написал в 21969325 select id, name, parentid ... where parentid is null а дальше разворачивай дерево по текущему id родителя (как будто ты - начальник) select id, name, parentid ... where parentid = preid ну это я и из новой таблички сделать смогу)) Пасип)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 14:27 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
Gatorgoldmi45Не скажите. )) NULL означает, что нет родителя. Это один из самых распространённых способов построения дерева. А для того, чтобы менеджер с ид=7839 стал президентом, нужно должности хранить отдельно от людей(менеджеров), потому как это разные сущности. И должна быть процедура назначения на должность, которая хранится в отдельной таблице.Каша в голове. Нет родителя, т.е. он в воздухе болтается? Зачем же вы в 21969476 советуете по null искать корень, если "он в воздухе болтается". )) GatorДолжности связаны бизнес иерархией. Люди никак не связаны, они сами по себе: Петя, Вася, Юля, Стеша, Яша, Фаня... Когда их ставят на должность, у них появляется иерархия. Ну дак и я про это же. Должности и штатное расписание - отдельные от людей сущности. GatorА когда Юля уйдёт в декрет, и её работу разделят Стеша с Яшей, твоя иерархия ломается. Ибо "отдельная таблица" это не предусматривает. По штатному расписанию она останется на той же должности. GatorА в реале, начальник просто звякнет Васе: мол, Юлькины дела сделайте, Стеша тебе поможет. А Вася работает под Яшей, а Стеша у Фани Лирика, к построению дерева не относится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 14:40 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
Nathgul, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 15:00 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
goldmi45Лирика, к построению дерева не относится.Дерево к работе тоже не относится. Надо представить бизнес процесс и попытаться облегчить его эта(чик) своей софтинкой. > Ну дак и я про это же. Должности и штатное расписание - отдельные от людей сущности. Наконец! Поздравляю с началом понимания откуда берётся иерархия заранее несвязанных людей. > По штатному расписанию она останется на той же должности. Ясен пень. Это кто бухам и налоговой объяснит, почему у сотрудницы детсад оплатить нет хватило, когда она исполняла пожелания руководства, пока оно отпускное пузо грело? > Зачем же вы в 21969476 советуете по null искать корень, если "он в воздухе болтается". )) Ты же сам Президента в воздух подвесил, не указав ID его родителя (начальника). Вот я и написал where ParentID is null Кроме этого, всё меняется в жизни, на месте ничего не стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 19:05 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
Gatorgoldmi45Лирика, к построению дерева не относится.Дерево к работе тоже не относится. Надо представить бизнес процесс и попытаться облегчить его эта(чик) своей софтинкой. > Ну дак и я про это же. Должности и штатное расписание - отдельные от людей сущности. Наконец! Поздравляю с началом понимания откуда берётся иерархия заранее несвязанных людей. > ... все круто... единственное что не понятно... как отделять вносимые tree-поля друг от друга используя CurrentNode := TreeView1.Items.AddChild Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. пока пишу ручками каждую строчку просто для того, чтобы понять как родителя отделить он потомка или наеборот)) в чем смысл оператора Parent? какая разница если мы пишем TreeView1.Items.Add или TreeView1.Items.AddChild что будет происходить если например между двумя строками поставить CurrentNode :=CurrentNode.Parent;? код ниже. Код: pascal 1. 2. 3. 4. 5. 6. смотрю на все это визуально пробуя разные компановки, но пока что-то не вижу закономерностей. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2019, 20:20 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
Nathgulв чем смысл оператора Parent? какая разница если мы пишем TreeView1.Items.Add или TreeView1.Items.AddChild что будет происходить если например между двумя строками поставить CurrentNode :=CurrentNode.Parent;? код ниже. Код: pascal 1. 2. 3. 4. 5. 6. смотрю на все это визуально пробуя разные компановки, но пока что-то не вижу закономерностей. Заранее спасибо. Parent нужен, чтобы указать, кто будет родителем узла. Кроме этого, у типа TTreeNode, к которому относится ваш CurrentNode, есть свойство Data: Pointer. В нём можно хранить указатель на данные, характеризующие ноду. Там можно хранить к примеру идентификатор ноды. И не только. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2019, 08:30 |
|
||
|
Oracle таблицу EMP на Treeview в delphi
|
|||
|---|---|---|---|
|
#18+
Nathgulв чем смысл оператора Parent? какая разница если мы пишем TreeView1.Items.Add или TreeView1.Items.AddChild что будет происходить если например между двумя строками поставить CurrentNode :=CurrentNode.Parent;? После CurrentNode :=CurrentNode.Parent у вас в переменной CurrentNode ссылка на родителя того узла, что был в этой переменной до этого кода. TreeView1.Items.Add вы можете добавить соседей (на тот же уровень дерева) к указанной в параметре ноде. TreeView1.Items.AddChild вы добавляете потомка к указанной в параметре ноде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2019, 08:36 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39860903&tid=2039054]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 449ms |

| 0 / 0 |
