С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
vectorrr2007

БД в виде дерева Treeview, Как привязать таблицу Понятия к веткам в дереве бд

04.03.2011, 14:07. Показов 4056. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте уважаемые гуру delphi! Не могли бы вы мне помочь с вот такой программкой:
Мне нужно отобразить содержимое базы данных Access виде дерева. Я взял для этого компонент Treeview. Подключаюсь к базе с помощью компонентов ADO. В приложенном файле скрин связей БД. Проблема - как мне привязать Понятия к Разделам в дереве - то есть чтобы дерево строилось корректно. В моем варианте это не получается - Понятия подключаются не к тем Разделам которые на самом деле фигурируют.


Фрагмент кода:

Delphi
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
procedure TForm1.RzToolButton1Click(Sender: TObject);
var
  kol1, kol2, kol3, i, j, n, q: integer;
  Nod, Nod1, Nodn: TTreeNode;
  st4, st1, st2, st3: string;
begin
  Screen.Cursor := crSQLWait;
  // очистить адресное пространство
  TreeView1.Items.Clear;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Text := 'select * from [Темы]';
  ADOQuery1.Open;
 
 
  kol1 := ADOQuery1.RecordCount;
  ADOQuery1.first;
  // ADOquery2.first;
  // Adoquery3.first;
  for n := 1 to kol1 do
  begin
    st1 := trim(ADOQuery1.FieldValues['Название темы']);
    Nod := TreeView1.Items.add(nil, st1);
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Text :=
      'SELECT Темы.[Название темы], Темы.[Номер Темы], Разделы.[Название раздела] FROM Темы INNER JOIN Разделы ON Темы.[Номер Темы] = Разделы.[Номер темы] where [Темы].[Номер темы] like ' + '"' + inttostr(n) + '"';
    ADOQuery2.Open;
    kol2 := ADOQuery2.RecordCount; // кол-во
    for j := 1 to kol2 do // perebor razdelov
    begin
      st2 := trim(ADOQuery2.FieldValues['Название раздела']);
      Nod1 := TreeView1.Items.Addchild(Nod, st2);
      ADOQuery3.SQL.Clear;
      st4:= 'SELECT Темы.[Номер Темы], Разделы.[Название раздела], Разделы.[Номер раздела], Понятия.[Понятие] FROM Темы INNER JOIN (Разделы INNER JOIN Понятия ON';
      Adoquery3.sql.text:=st4 +
      ' Разделы.[Номер раздела] = Понятия.[№ раздела]) ON Темы.[Номер Темы] = Разделы.[Номер темы] where [Темы].[Номер темы] like ' + '"' + inttostr(n) + '" and [Понятия].[№ раздела] like ' + '"' + inttostr(j) + '"';
      ADOQuery3.Open;
      kol3 := ADOQuery3.RecordCount; // кол-во
      for i := 1 to kol3 do
      begin                                              //
        st3 := trim(ADOQuery3.FieldValues['Понятие']);
        TreeView1.Items.Addchild(Nod1, st3);
        ADOQuery3.next;
      end;
 
      ADOQuery2.next;
 
    end;
 
    ADOQuery1.next;
  end;
 
  ADOQuery1.Close;
  ADoquery2.close;
  Adoquery3.close;
  Screen.Cursor := crArrow;
end;
Миниатюры
БД в виде дерева Treeview, Как привязать таблицу Понятия к веткам в дереве бд   БД в виде дерева Treeview, Как привязать таблицу Понятия к веткам в дереве бд   БД в виде дерева Treeview, Как привязать таблицу Понятия к веткам в дереве бд  

IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.03.2011, 14:07
Ответы с готовыми решениями:

Как привязать узлы заранее составленного дерева TreeView с определенными компонентами?
Как привязать узлы заранее составленного дерева TreeView с определенными компонентами (RichEdit, Webbrowser), чтобы при нажатии на узел...

Как пройти по всем веткам дерева?
задача на логику: есть некий обьект, внутренняя структура которого представлена как дерево, примерно тоже самое, что и файловая система....

Как пройтись по всем веткам TreeView циклом?
Цикл проходит только по узлам, а до конечных веток не доходит. Подскажите, пожалуйста, как сделать чтобы цикл доходил до веток? Код: ...

3
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
04.03.2011, 18:02
Недавно обсуждалось на форуме. Поищи!
Буквально десяток полтора постов вниз по списку!
1
vectorrr2007
04.03.2011, 21:33
Просмотрел пример с интуита, что там упоминался - принцип там тот же что и у меня в коде...
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
05.03.2011, 18:05
Цитата Сообщение от vectorrr2007 Посмотреть сообщение
принцип там тот же что и у меня в коде...
1. На этом принципе строил деревья много раз. Никаких проблем не было. Покопайся в своих текстах запросов. Они где-то некорректны (мое мнение).
Не надо в приводимых строках кода использовать такие длинные строки. Очень неудобно просматривать.
3. По какой высокой идее текст SQL заносите на этапе исполнения. Для чего это надо. Во сто крат удобнее заносить(прописывать) текст SQL в соответствующем свойстве объекта на этапе разработки и использовать запросы с параметрами. Это уменьшает количество ошибок и непоняток.
4. При построении циклов по наборам данных удобнее (мое мнение) вместо
Delphi
1
2
for n := 1 to kol1 do
......
использовать
Delphi
1
2
3
4
5
ADOQuery1.first;
while not ADOQuery1.Eof do begin
  <тело цикла>
  ADOQuery1.Next;
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.03.2011, 18:05
Помогаю со студенческими работами здесь

Отображение состава изделия в виде дерева TreeView
Приветствую форумчане! Вникаю в работу с TreeView есть несколько вопросов: В файле &quot;Структура Изделия Дерево&quot; в форме...

Опросник. Создание дерева зависимостей в treeView, сохранение дерева в XML, построение дерева в treeView из XML
Всем доброго времени суток. Тема является продолжением вот этой темы. Создаю 2ю, так как там был другой вопрос, который скорее...

Построение дерева - нужно вывести формулу хождения по веткам
Я не знаю в какой раздел написать эту задачку, так как она вообще из раздела программирования Программисты не догоняют тему, видимо...

Как отключить в treeView развёртывание дерева при двойном клике по элементу дерева
Как отключить в treeView развёртывание дерева, при двойном клике по элементу дерева. нужно чтобы разворачивалось и сворачивалась только...

Как привязать данные к TreeView
Нужно сделать так у меня две переменные которые ныжно привязать к дереву, когда на водят в дереве на надпись и кликают чтобы в текст...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru