Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.03.2010, 14:22
Аватар для segas
segas segas вне форума
Новичок
 
Регистрация: 08.02.2009
Сообщения: 97
Репутация: 10
Восклицание treeView

Доброго времени суток уважаемые форумчани
Подскажите пожалуйста как вывести парадоксавскую таблицу при помощи treeView уже очень долго парюсь над этой задачей и разными способами проповал, но все что то никак не выходит
Вот сама таблица пользователь.rar
Состоит из полей(ИД, ФАМИЛИЯ, ПРЕДПРИЯТИЕ, ЦЕХ, ОТДЕЛ, Должность)
1 уровень ПРЕДПРИЯТИЕ
2 уровень ЦЕХ
3 уровень ОТДЕЛ
4 уровень ФАМИЛИЯ (Должность)
Подскажите пожалуйста как быть
Ответить с цитированием
  #2  
Старый 26.03.2010, 14:29
Аватар для segas
segas segas вне форума
Новичок
 
Регистрация: 08.02.2009
Сообщения: 97
Репутация: 10
Подмигивание

Если можно то желательно с коментариями
Заранее благодарен.
Ответить с цитированием
  #3  
Старый 26.03.2010, 16:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, для начала, неплохо было бы почитать о том, как проектировать БД. Т.е. твою одну таблицу надо привести к 3й НФ. Т.е. это должно быть 5 таблиц.

А выводить просто - тебе надо написать процку, которая будет находить нужный родительский узел, а потом просто добалять в него потомков. Для внутренней идентификации можно попробовать использовать свойство Data для указания типа узла (предприятие, отдел и т.д.).

Если по простому, то где-то так:
Код:
function TForm1.FindTypedNode(AType : Integer; ACaption : String) : TTreeNode;
var
  I : Integer;
begin
  Result := Nil;
  For I := 0 To TreeView1.Items.Count-1 Do
    If (Integer(TreeView1.Items[i].Data) =  AType) And 
       (ACaption = TreeView1.Items[i].Caption) Then
      Begin
        Result := TreeView1.Items[i];
        Break;
      End;
end;

function TForm1.CreateTypedNode(AParent : TTreeNode; AType : Integer; ACaption  :String) : TTreeNode;
begin
  Result := TreeView1.Items.AddChild(AParent,ACaption);
  Result.Data := Pointer(AType);
end;

procedure TForm1.AddNode(APredpr, ACeh, AOtdel, AFIO);
var
  APNode : TTreeNode;
  ACNode : TTreeNode;
  AONode : TTreeNode;
  AFNode : TTreeNode;
begin
  APNode := FindTypedNode(1,APredpr);
  If APNode = Nil Then APNode := CreateTypedNode(Nil,1,APredpr);

  ACNode := FindTypedNode(2,ACeh);
  If ACNode = Nil Then ACNode := CreateTypedNode(APNode,2,ACeh);

  AONode := FindTypedNode(3,AOtdel);
  If AONode = Nil Then AONode := CreateTypedNode(ACNode,3,AOtdel);

  AFNode := FindTypedNode(4,AFIO);
  If AFNode = Nil Then AFNode := CreateTypedNode(AONode,4,AFIO);
end;

Код довольно "грязный" и не оптимальный, но идея должна быть понятна.
Ответить с цитированием
  #4  
Старый 26.03.2010, 17:11
Аватар для segas
segas segas вне форума
Новичок
 
Регистрация: 08.02.2009
Сообщения: 97
Репутация: 10
Вопрос

А можно как нибудь на весь модуль глянуть?
и желательно с комментариями , если конечно же не трудно...
Просто я новичек в этом деле и не все еще понимаю

И еще вопросик, а без нормализации никак?
прост в дальнейшем у каждого сотрудника необходимо будет вывести оборудование закрепленное за ним, а там уйма таблиц
Ответить с цитированием
  #5  
Старый 26.03.2010, 22:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да я только этот код то и написал. Даже не в дельфе, так что проверь именя свойств.

Без нормализации можно, но посуди сам. У тебя, например, 100 сотрудников. Так вот, у тебя будет повторено 100 раз название предприятия... А то, что будет еще 4 таблички - так это фигня, на самом деле. Вообще, уходи ты с этого парадокса... на FireBird, например.

Но пример написан под существующую таблицу. Это просто отдельная фкнуция, так что ее просто надо вызвать в нужном месте. Из обязательности, только то, что дерево называется TreeView1, и то, можно переделать на параметр...
Ответить с цитированием
  #6  
Старый 27.03.2010, 04:55
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Я люблю TreeView, очень хороший контрол.
А топикстартеру советую почитать вот эту 03088 статью в DRKB
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:36.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025