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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.10.2008, 15:10
yura_ac_dev yura_ac_dev вне форума
Прохожий
 
Регистрация: 08.10.2008
Сообщения: 2
Репутация: 10
По умолчанию Treeview и база данных

Доброго времени суток, уважаемые. У меня возник небольшой вопросик. Уже несколько дней меня мучает один вопрос. Вот есть заполненный компонент TTreeView. Как мне узнать структуру компонента и записать эту структуру в базу данных чтобы потом можно было опять ее считать?
Ответить с цитированием
  #2  
Старый 08.10.2008, 15:13
mik mik вне форума
Прохожий
 
Регистрация: 17.09.2008
Сообщения: 33
Репутация: 10
По умолчанию

А как заполняется компонент?
Ответить с цитированием
  #3  
Старый 08.10.2008, 15:20
yura_ac_dev yura_ac_dev вне форума
Прохожий
 
Регистрация: 08.10.2008
Сообщения: 2
Репутация: 10
По умолчанию

Есть база данных собранная вручную после прочтения статей по древовидным базам данных:
id name_test id_id
0 Склады -1
1 Мой склад 0
2 Новый склад 0
3 Подсклад 1 1
4 Подсклад 2 1
5 Подсклад 3 1
6 Подсклад 4 1
7 Подсклад 1 2
8 Подсклад 2 2
9 Подсклад 3 2
10 1 3
11 1 3
12 1 3


Есть функция (взятая из интернета) :
Код:
procedure FillTree(Tree: TTreeView; Query: TDataSet; idNode, idParent,
  cNodeName: string);
var
  i: integer;
begin
  // Корневой узел, должен быть первым в выборке Query
  Query.First;
  Tree.Items.Clear;
  Tree.Items.AddObject(nil, Query.FieldByName(cNodeName).AsString,
    Pointer(Query.FieldByName(idNode).asInteger));
  Query.Next;
  while not Query.Eof do
  begin
    i := 0;
    while i < Tree.Items.Count do
      if Tree.Items.Item[i].Data = Pointer(Query.FieldByName(idParent).asInteger)
        then
      begin
        Tree.Items.AddChildObject(Tree.Items.Item[i],
          Query.FieldByName(cNodeName).AsString,
          Pointer(Query.FieldByName(idNode).asInteger));
        break;
      end
      else
        Inc(i);
    Query.Next;
  end;
end;
Admin: Пользуемся тегами!

Само заполнение:
FillTree(TreeView1, ADOQuery1, 'id', 'id_id', 'name_test');


В итоге мне нужно чтобы можно было создать любой item в любом "месте" компонента и все это записать в базу с последующим чтением из базы в компонент.
P.S. Если не правильно выражаюсь - прошу прощения. Я новичек

Последний раз редактировалось Admin, 08.10.2008 в 15:24.
Ответить с цитированием
  #4  
Старый 08.10.2008, 18:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Фактически, тебе надо вставить новую запись в БД, использовав в качестве внешнего ключа ID родительской ветки в дереве. Если получилось вставить, то добавляешь соответсвующий Item в дерево с помощью метода AddChild. Тут вопрос только в том, что при этом ты должен иметь ID записи, т.е. вставка в БД будет идти в 2 шага:
1. получить новый ID
2. вставить запись ID, ParentID, данные
как уже сказал, ParentID - Id из родительской ветки.

Вообще, задача для новичка не совсем тривиальная. Если ты не понимаешь код, который загружает дерево, то наврядли сможешь сам написать добавление, т.к. там используется несколько трюков, которые не совсем корректны, но вообще работают.
Ответить с цитированием
  #5  
Старый 27.10.2008, 21:01
Директор ВЭБ Директор ВЭБ вне форума
Прохожий
 
Регистрация: 15.07.2008
Сообщения: 19
Репутация: 10
По умолчанию

Привет?
меня тоже интересует данный вопрос.

Нужно чтобы при добавлении нового клиента он добовлялся в дереве.
как это совместить?
Ответить с цитированием
  #6  
Старый 28.10.2008, 09:31
dmdx dmdx вне форума
Начинающий
 
Регистрация: 24.05.2008
Адрес: Москва
Сообщения: 133
Репутация: 15
По умолчанию

Самый лучшее в этом деле использовать cx-овы компоненты. Там на cxTreeVew есть такие поля как KeyField, ParentField, DisplayField. очень удобно работать с ними. создаешь Кверик типа
Код:
select id,parent,name
from treeview
start with id=0
connect by parent=prior id
подключаешь датасет к кверику а в компоненте используешь датасет.
__________________
Програмист приходит на стрельбище. Стреляет. Прапор смотрит на мешень и говорит
Прапор: вы не попали ни один раз.
Программист: Пули вылетели, проблемы у вас.
Ответить с цитированием
  #7  
Старый 28.10.2008, 09:38
dmdx dmdx вне форума
Начинающий
 
Регистрация: 24.05.2008
Адрес: Москва
Сообщения: 133
Репутация: 15
По умолчанию

при добавлении, изменении и удалении можно использовате такой механизм. Ведь при добавлении ты вибираешь кокретную ветку с конкретном id.
Добавление
Код:
insert into treeview (parent,name) values(:parent,:name)
:parent = cxTreeView.editValue;
:name = cxEdit1.text;

Изменение
Код:
update treeview 
 set name =:name
where id = :id
:id = cxTreeView.editValue;
:name = cxEdit1.text;

удаление
Код:
delete treeview
where id = :id
:id = cxTreeView.editValue;

что то в этом духе. поищи на торренте ру cx-вые компоненты. для D7 там есть.
__________________
Програмист приходит на стрельбище. Стреляет. Прапор смотрит на мешень и говорит
Прапор: вы не попали ни один раз.
Программист: Пули вылетели, проблемы у вас.
Ответить с цитированием
  #8  
Старый 28.10.2008, 09:42
dmdx dmdx вне форума
Начинающий
 
Регистрация: 24.05.2008
Адрес: Москва
Сообщения: 133
Репутация: 15
По умолчанию

Если очень надо могу выложить пример работы. Но надо будет скачать cx-вые компоненты. и на чем делаем ADO или DOA
__________________
Програмист приходит на стрельбище. Стреляет. Прапор смотрит на мешень и говорит
Прапор: вы не попали ни один раз.
Программист: Пули вылетели, проблемы у вас.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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