Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Мастера DELPHI. Новости мира компонент, FAQ, статьи...


Информационный Канал Subscribe.Ru

Ежедневная рассылка сайта Мастера DELPHI

DELPHIMASTER.ru

Выпуск от 02.06.04 09:17

Лучшее из нашего FAQ   |x|
Иерархические структуры...
Supervisor   (13.04.01 17:20)

Может у кого есть примеры или идеи как хранить иерархические структуры в базе данных. К примеру некую виртуальную файловую систему (типа вложенных папок).
Желательно чтоб использовался язык триггеров и хранимых процедур.
Структура из базы должна загружаться в компонент типа TTreeView
 Заранее благодарен!




kayaker   (13.04.01 18:11)

Наверное есть какие-нибудь компоненты, но я вручную деревья храню. У каждого объекта есть предок, номер уровня в структуре и т.п.




Polevi   (13.04.01 21:10)

Я делаю так:
Есть таблица Structure В ней три поля: Ресурс - autoInc, Владелец - intege r, Значение - string Например
1 0 Root
2 1 FirstNode
3 1 SecondNode
4 1 ThirdNode
5 2 FisrtFirstSubNode
6 2 SecondFirstSubNode
7 3 SecondSubNode
8 4 FirstThirdSubNode
9 4 SecondThirsSubNode

Для отображения структуры в TreeView я поступаю так:


type
TNodeData=record
 table:TDataset;
 resource,owner:integer;
end;

(поле Table сделано для того чтобы в TreeView можно было отображать данные из различных таблиц типа Structure)

Затем в TreeView создается ветка

var
nodeData:^TNodeData;
node:TTreeNode;

new(nodeData);

nodeData.table:=table1;
nodeData.resource:=1
nodeData.owner:=0;
node:=items.AddChild(nil,'Root');
node.data:=nodeData;

После чего достаточно перегрузить OnNodeExpanding - зная ресурс ветки которую мы распахиваем можно отфильтровать table1 - table1.Filter:='Владелец='+ресурс этой ветки
table1.Filtere d=true

while not table.EOF do
begin
и здесь дел! аем AddC hild к распахиваемой ветке (создавая для каждой структуру TNodeData)

Примерно так, ну а вообще я могу поделится своим компонентом, пиши if u wish




Алексей   (16.04.01 08:46)

Должны обязательно быть два поля предок и на кого он ссылается. Например
id  Naim   Parent
1   Область1  -1
2   Область2  -1
3   Город1     1
4   Город2     1
5   Город3     2
4   Город4     2
Следовательно - область верхний уровень ерархии. Города
нижний, то есть города1-2 относяься к первой области, города3-4 к второй. Обычно по таким принципам и строится вся ерархия. Для этого существуют компоненты типа DBTreeList. Они есть в пакетах Polaris,
ExpressQuantumGrid. Либо простенкий можно написать самому.  




Игорь   (16.04.01 09:30)

Polevi
Очень интересный вопрос.
Можно поподробнее или компонент для примера
Заранее спасибо :-)                    




SergSuper   (16.04.01 16:41)

Есть очень неплохая статья
http://sdm.viptop.ru/articles/sqltrees.html
вообщем с деревьями надо совсем не так работать




Комментарий от "Konstantin R.Beliaev" (konst@nt.ru)
На ib.demo.ru есть несколько статей на этот счет. Если вкратце, то есть 3 подхода:
1) уже упоминался: у объекта указывается родитель, недостаток в том, что если надо найти всех потомков, то приходится делать рекурсивный запрос
2) указывается не родитель, а путь (типа "/1/7/24"), недостатки - длина поля (а соответственно и пути) ограничена, и обработку строк на с ервере организовать не совсем просто
3) метод Joe Celko, ! очень по хож на вложенные множества: (a (bb) (c(dd)c) a) - здесь одинаковые буквы принадлежат одинаковым объектам, т.е. B и C потомки A, D - потомок С. Если теперь буквы заменить цифрами по порядку (1 (23) (4(56)7) 8), то у каждого объекта получится 2 свойства (left, right), по которым легко организовать выбор всех потомков. Недостаток - невозможно выбрать ближайших предков или потомков.
Видимо, оптимальной будет комбинация 1 и 3 методов. Вот реализовать это...

»»» Прислать свои комментарии

Обсуждается в конференциях   |x|
  • Сервис и GetUserName
    как будучи сервисом узнать имя текущего пользователя. GetUserName не предлагать..
  • PING
    как организовать PING средствами KOL ?
  • Игру выпустили
    Чебуратор: КМ. На Фрипаскале написана ;). http://www.cyborghome.ru/index.php?&id=cheburator Архив 20,7 мегабайт.
  • NMSMTP - ошибка 503 valid RCPT must preced DATA
    RCPT - это реципиент (приемник) или я чего-то не понимаю. Вот код: NMSMTP1.Host := 'smtp.mail.ru'; NMSMTP1.Port:=25; ...
  • Несколько полей для связи
    Есть табличка <поле_1> <поле_2> <поле_3> <поле_4> <поле_5>, есть два справочника ...
  • Экспорт таблицы в Word
    Здравствуйте! У меня есть несколько массивов. Мне нужно сделать экспорт в Word и расположить данные в виде таблицы. Как ...
  • glColor4f в OpenGL под Delphi
    Странная ботва происходит... glColor4f( 0.5, 1.0, 1.0, 0.5 ); ... и glColor4f( 0.5, 1.0, 1.0, 1.0 ); ... выводят ...
У нас большой выбор статей   |x|
DirectX (Игровой SDK) Часть 5-6
Часть 5 (Разные подходы к написанию кода восстановления поверхностей,
Рисование на поверхностям DirectDraw, Пример DDDemo4)
Часть 6 (Непригодность основной формы, Мощь Delphi: пользовательский
класс полотна (Canvas))
Новинки книжного рынка   |x|
Переход на Kylix для Delphi-программистов
Задача этой книги — познакомить программистов с мощным инструментом разработки приложений — средой Kylix, а также представить готовые решения, которые позволят созданным приложениям нормально работать. Для тех, кто не имеет опыта «общения» с Linux, изложены основы программирования в этой операционной системе. Необходимые для работы с Kylix знания в области синтаксиса языка C, подробное рассмотрение вопросов создания и подключения библиотек, управления процессами, работы с файловой системой и других ключевых для программирования вопросов, а также множество хорошо прокомментированных образцов программного кода делают эту книгу необходимым помощником любого Kylix-программиста.
Автор: Тэйлор Д., Мишель Дж., Джентри Т.
Опрос населения :)
Новый журнал для программистов "RSDN Magazine". Ваше мнение, нужен ли он вообще?
»»» Да
»»» Нет
Для души

Хокку дня
зима пришла
вода
остолбенела

Афоризмы
Человек сожалеет о потерянных деньгах, но не задумывается о прожитых днях, на которые жизнь его стала короче.......

Фраза дня
Объявление: общительная, симпатичная девушка без комплексов продаст вагон цемента

Дурацкие законы (информация предоставлена сайтом kurilka.com)
В Огайо (США) особым законом запрещено предлагать рыбам спиртные напитки.
В Германии по закону подушка может считаться "пассивным" оружием .

И на закуску коротенький анекдот
- В чем вы любите спать? В пижаме или майке?
- В валенках.
- Почему?
- Приходится часто из окон выпрыгивать...

Фотоприколы.
Начните день с хорошего настроения!
http://www.delphimaster.ru/cgi-bin/prikol.pl?id=235


На этом позвольте откланяться и пожелать вам удачного дня.
Искренне ваш, Алексей (merlin@delphimaster.ru)

Добро пожаловать на сайт -= Мастера DELPHI =- 


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное