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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.05.2010, 13:49
ilsen_diaz ilsen_diaz вне форума
Прохожий
 
Регистрация: 18.05.2010
Сообщения: 6
Репутация: 10
По умолчанию База данных в виде дерева

Здравствуйте!!!!!
Немного опишу мою проблему… Дело в том, что необходимо связать БД MSSQL с компонентами Delphi TreeView, ListView.
Цель программы создать виртуальный проводник, то есть считывается дерево каталогов с Бд и в ListView заполняются файлы(которые тоже хранятся в БД).
Помогите связать TreeView с таблицей Folder, и при нажатии на строку в этом компоненте отобразить список дочерних каталогов с файлами в ListView. Заранее благодарю!!!
P.S: нужно использовать стандартные компоненты Delphi 2007 (от RAD Studio), и использовать TADOQuery (не ADOTable).
Ответить с цитированием
  #2  
Старый 18.05.2010, 14:41
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

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

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 18.05.2010, 21:42
ilsen_diaz ilsen_diaz вне форума
Прохожий
 
Регистрация: 18.05.2010
Сообщения: 6
Репутация: 10
По умолчанию

а где именно, не могу разобраться что за статья с кодом 03088?
Ответить с цитированием
  #4  
Старый 18.05.2010, 22:03
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Читал я ту статью. Автрор Америки не открыл.
За 30 минут все это делается руками без особых проблем.
Вопрос в том, как у тебя организованна БД.
Я бы все положил в одну табличку:
Код:
CREATE TABLE DIRECTORY
(
ID INTEGER PRIMARY KEY AUTOINCREMENT, -- тут надо синтаксис проверить
PARENT_ID INTEGER REFERENCES ON DIRECTORY(ID), -- тут тоже
NAME VARCHAR(255),
REC_TYPE INTEGER CHECK REC_TYPE IN (0,1) -- forlder (0) or file (1)
);

ну и далее запросами получаем все, что нужно:
Код:
SELECT * FROM DIRECTORY WHERE PARENT_ID = :ID

В параметр ID помещаешь ID родительского узла.
Ответить с цитированием
  #5  
Старый 19.05.2010, 18:52
ilsen_diaz ilsen_diaz вне форума
Прохожий
 
Регистрация: 18.05.2010
Сообщения: 6
Репутация: 10
По умолчанию

У меня 2 таблицы. Folder и Files.
Folder для хранения папок, поля:
IDfolder numeric
IDParent int
NameF nvarchar
DTCR datetime //дата создания
DTMOD datetime //дата изменения

Files для хранения файлов, поля:
IDFile numeric
IDFolder numeric
NameFile nvarchar
SizeFile float
DTCR datetime
DTMOD datetime

Как связать TreeView с таблицей Folder, и при нажатии на строку в этом компоненте отобразить список дочерних каталогов с файлами в ListView?
Ответить с цитированием
  #6  
Старый 19.05.2010, 23:07
Аватар для Djenya
Djenya Djenya вне форума
Прохожий
 
Регистрация: 19.05.2010
Адрес: Я жижу в AlchevskCity
Сообщения: 4
Репутация: 10
По умолчанию

У меня такая же проблема, помогите пожалуйста)))
Ответить с цитированием
  #7  
Старый 06.08.2010, 18:50
Rose_Tyler Rose_Tyler вне форума
Прохожий
 
Регистрация: 06.08.2010
Сообщения: 1
Репутация: 10
По умолчанию

Та же проблема.
Из процедуры:
Код:
Select -g.GroupID,
          null as Parent,
          g.GroupCode,
          g.GroupName
From   Group g  -- группа
UNION ALL
Select sg.SubGroupID as GroupID,
         -wg.GroupID as Parent,
         sg.SubGroupCode as GroupCode,
         sg.SubGroupName as GroupName
From   SubGroup sg  -- подгруппа
нужно построить дерево в TreeView.
Я использую следующий код:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
begin
  try 
    // получение набора данных ADOStoredProc
  except
    // 
  end;
   // строим дерево
  ADOStoredProc.First;
  TreeView.Items.AddObject(nil, ADOStoredProc['GroupName'],
     Pointer(Integer(ADOStoredProc['GroupID'])));
  ADOStoredProc.Next;
  while  not ADOStoredProc.Eof do
  begin
    i:=0;
    while i < TreeView.Items.Count do
    begin
      if TreeView.Items.Item[i].Data = 
        Pointer(Integer(ADOStoredProc['Parent'])) then
        TreeView.Items.AddChildObject(TreeView.Items.Item[i],
           ADOStoredProc['GroupName']),
           Pointer(Integer(ADOStoredProc['GroupID'])))
      else
        Inc(i);
      ADOStoredProc.Next;
    end;
  end;
end;

Все бы ничего, но дерево почему-то состоит из одной веточки.


Помогите найти ошибку.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter