Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Как создать иерархическое дерево (как в «проводнике») для отображения данных в таблице?

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
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.
Имея такое представление, единственная крупная проблема - запрограммировать алгоритм построения из него дерева. Это довольно простой алгоритм при которм перебирая строки таблицы, отыскиваем по коду отца и добавляем ему сына. Для соответствия кодов узлов в дереве и таблице можно использовать какое-нибудь неважное свойство узла дерева, куда записывать этот код при добавлении узла к дереву из таблицы.
Теперь при клике на узел дерева нужно делать текущей соответствующую запись таблицы по коду узла. Это можно использовать для соединения с другой таблицей, которая автоматически отфильтрует данные по этому узлу и ее можно отобразить в правом окне.
Операция добавления:запрашиваем имя нового узла, вставляем его в дерево для текущего родителя (код родителя запоминаем), добавляем запись в таблицу, вводим туда имя и код родителя (код узла при этом может сформироваться автоматически). До остального додумаешься сам.
Могу прислать свой компонент для Дельфи.
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...