Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Ozod
Зарегистрирован: 12.10.2001 Сообщения: 2 Откуда: Tashkent
|
Добавлено: Пт Окт 12 2001 10:15 Заголовок сообщения: Как создать иерархическое дерево (как в «проводнике») для отображения данных в таблице? |
|
|
Уважаемые профессионалы! Я делаю программу для Отдела кадров, там хотят, чтобы вся структура предприятия была отображена как дерево каталогов в «проводнике». И чтобы когда я укажу, например, на какой-нибудь отдел, то справа показалось его содержимое, т.е. сотрудники. Посоветуйте, если на трудно, как писать SQL-запросы и как создать таблицы (я начал на таблице MS Access, но как-то не получается...)
Заранее благодарю за ответы и советы.
Озод |
|
Вернуться к началу |
|
|
Кадровик Гость
|
Добавлено: Пт Окт 12 2001 10:31 Заголовок сообщения: Re: Как создать иерархическое дерево (как в «проводнике») для отображения данных в таблице? |
|
|
Может тебе лучше сменить работу?... |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Пт Окт 12 2001 11:10 Заголовок сообщения: Re: Как создать иерархическое дерево (как в «проводнике») для отображения данных в таблице? |
|
|
Мда... Работу надо менять. Сделай так: Создай 10 каталогов и в каждом 10 тыс файлов. И попроси кадровиков полазить "проводником" по этим каталогам. Медленно? Еще бы!!! А 10 тыс записей в базе - это так, фигня плюшевая. Реально будет еще больше.
Меняй технологию отображения данных! "Дерева" для базы данных не годятся. |
|
Вернуться к началу |
|
|
March Гость
|
Добавлено: Пт Окт 12 2001 11:21 Заголовок сообщения: Re: Как создать иерархическое дерево (как в «проводнике») для отображения данных в таблице? |
|
|
В Oracle для постороения таких запросов есть такая вещь, как connect by prior (используется в селектах). А руками такие запросы строить - кривовато это... Хотя можно через временные таблицы, но это тоже не самый лучший вариант... |
|
Вернуться к началу |
|
|
Ozod
Зарегистрирован: 12.10.2001 Сообщения: 2 Откуда: Tashkent
|
Добавлено: Пт Окт 12 2001 11:54 Заголовок сообщения: Re: Как создать иерархическое дерево (как в «проводнике») для отображения данных в таблице? |
|
|
Спасибо всем, кто так быстро ответил! Но я не шутил, такая постановка задачи есть и я ее делаю, но хотел узнать, что на это скажут профи. Так что, может, я работу менять не буду, но о технологии показа подумаю обязательно. Еще раз спасибо всем! Я все же жду новых советов. Озод |
|
Вернуться к началу |
|
|
kovs
Зарегистрирован: 12.10.2001 Сообщения: 1 Откуда: Москва
|
Добавлено: Пт Окт 12 2001 13:22 Заголовок сообщения: Re: Как создать иерархическое дерево (как в «проводнике») для отображения данных в таблице? |
|
|
Сделать это возможно и при достаточно небольшом количестве сотрудников все это сможет достаточно живо работать. Не частно же попадаются фирмы на 10000 человек. По делу: во-первых, сомневаюсь что удатстя получить дерево на MS-Access. Можно попробовать какой-нибудь Delphi/C++ Builder или MS VC++. По поводу организации таблиц для деревьев можно почитать, например, тут http://sdm.viptop.ru/articles/sqltrees.html |
|
Вернуться к началу |
|
|
sweps
Зарегистрирован: 12.10.2001 Сообщения: 4 Откуда: Москва
|
Добавлено: Пт Окт 12 2001 15:54 Заголовок сообщения: Re: Как создать иерархическое дерево (как в «проводнике») для отображения данных в таблице? |
|
|
На самом деле всё упирается в производительность самой программы. Если применять дерево только для отображения структуры компании то я думаю это будет работать довольно быстро. Даже при очень сложной структуре и сложных манипуляциях с деревом можно немножко подумать и ввести дополнительные поля, так сказать вспомогательные, которые при правильном заполнении способны очень упростить выборки. А вообще помоему в данном случае всё будет работать быстро если правильно спроектировать базу и не закладываться на дерево как основной носитель информации. |
|
Вернуться к началу |
|
|
Quaker Гость
|
Добавлено: Сб Окт 13 2001 02:28 Заголовок сообщения: Re: Как создать иерархическое дерево (как в «проводнике») для отображения данных в таблице? |
|
|
Посмотри http://www.leadersoft.ru/la2000.exe, это по моему то что тебе надо и на Access |
|
Вернуться к началу |
|
|
Quaker Гость
|
Добавлено: Сб Окт 13 2001 02:35 Заголовок сообщения: Re: Как создать иерархическое дерево (как в «проводнике») для отображения данных в таблице? |
|
|
Посмотри http://www.leadersoft.ru/la2000.exe, это по моему то что тебе надо и на Access. + Вопрос 219(06.02.2001) Как часто Вы пользуетесь элементами ActiveX, а именно FlexGrid, DataGrid и TreeView? (кстати справки по этим элементам в Офисе почему то нет) В хелпе(MSDN для VB) написано, что если использовать эти элементы мне нужно с ними будет поставлять файл mscomctl.ocx. Неужели это верно и для Аксесс, или эти элементы входят в стандартную поставку офиса
Ответ 1. Я бы сказал так, что элементы FlexGrid и DataGrid практически не применяю (справедливо для Access, а не VB). Напротив элемент TreeView имеет повышенное внимание у заказчиков. Примерно 9 из 10 хотят его куда-нибудь добавить. Например, были разговоры по применению у юридической компании (для учета договоров в формате word и excel), у производственной фирмы (для учета электронных компонентов) и в торговых компаниях. Так что советую его серьезно изучить. Надо отметить, что элемент TreeView, с моей точки зрения, достаточно капризный и имеет много "проблем" в разных операционных системах. Например, если при открытии формы в событии Open (не Load) Вы поставите загрузку узлов дерева, то получите только "каркас" (дерево без текста). Справедливо - для Windows 2000, но не Windows 98. Исправить ошибку бывает очень сложно, даже прямой ввод текста не помогает. Бывает при редактировании класса разрушается вся база данных. Есть и другие ошибки, которые предлагается исправить через api-интерфейс. Подробности смотрите в библиотеке разработчика MSDN. В файле la_activex.mdb есть пример 5 по применению TreeView. Он основан на создании нового класса MicrosoftTree и имеет большую надежность, чем создание дерева без класса. Все события дерева отображаются в форме. Для операций Drag & Drop также показано добавление узла красным цветом. Пример дан в сокращенном варианте. Коммерческая версия имеет больше возможностей. Она позволяет привязать TreeView к любой таблице, сохранить дерево после редактирования, удаления и сортировки узлов, отобразить всплывающее меню и иконки, позволяет в операциях drag & drop изменять drag-иконку и работать с подчиненными узлами. А теперь изучите класс для работы с TreeView
' Объявляем класс Tree с событиями Public WithEvents Tree As TreeView
' Объявляем собственное событие для сообщений в главной форме Public Event progress(strMsg As String)
' Переменные для сохранения узлов в операции DragDrop Private Type DropDrag idxStart As Long ' Начальный узел перемещения idxEnd As Long ' Конечный узел перемещения End Type
'События при создании/уничтожении класса. Можете добавить в них свои функции при создании или уничтожении дерева Private Sub Class_Initialize() Private Sub Class_Terminate()
' События до и после редактирования текста узла Private Sub Tree_BeforeLabelEdit(Cancel As Integer) ' Перед редактированием Private Sub Tree_AfterLabelEdit(Cancel As Integer, NewString As String) ' После редактирования
' События мышки при работе с уз ... |
|
Вернуться к началу |
|
|
Fozy Гость
|
Добавлено: Сб Окт 13 2001 15:41 Заголовок сообщения: Re: Как создать иерархическое дерево (как в «проводнике») для отображения данных в таблице? |
|
|
Смотря на каком языке ты хочешь ето сделать. Помогу если Дельфа или Билдер |
|
Вернуться к началу |
|
|
Владимир Соколов Гость
|
Добавлено: Пн Окт 15 2001 16:07 Заголовок сообщения: Re: Как создать иерархическое дерево (как в «проводнике») для отображения данных в таблице? |
|
|
Общая идея следующая: чтобы количество уровней дерева было неограниченным, нужно "вложить" дерево в одну таблицу. Все дерево можно описать множеством его узлов и связей. Т.к. связи однонаправленные, то достаточно каждому узлу знать своего предка, чтобы собрать дерево. Поэтому таблица должна иметь как минимум три поля (код узла, отображаемое в дереве название узла, код родителя - из этой же таблицы). Код узла - обычное инкриментное поле (порядковый номер). Для узлов самого верхнего уровня (корневой каталог) за код родителя можно принять 0. Имея такое представление, единственная крупная проблема - запрограммировать алгоритм построения из него дерева. Это довольно простой алгоритм при которм перебирая строки таблицы, отыскиваем по коду отца и добавляем ему сына. Для соответствия кодов узлов в дереве и таблице можно использовать какое-нибудь неважное свойство узла дерева, куда записывать этот код при добавлении узла к дереву из таблицы. Теперь при клике на узел дерева нужно делать текущей соответствующую запись таблицы по коду узла. Это можно использовать для соединения с другой таблицей, которая автоматически отфильтрует данные по этому узлу и ее можно отобразить в правом окне. Операция добавления:запрашиваем имя нового узла, вставляем его в дерево для текущего родителя (код родителя запоминаем), добавляем запись в таблицу, вводим туда имя и код родителя (код узла при этом может сформироваться автоматически). До остального додумаешься сам. Могу прислать свой компонент для Дельфи. |
|
Вернуться к началу |
|
|
|