![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброго времени суток, уважаемые. У меня возник небольшой вопросик. Уже несколько дней меня мучает один вопрос. Вот есть заполненный компонент TTreeView. Как мне узнать структуру компонента и записать эту структуру в базу данных чтобы потом можно было опять ее считать?
|
#2
|
|||
|
|||
![]() А как заполняется компонент?
|
#3
|
|||
|
|||
![]() Есть база данных собранная вручную после прочтения статей по древовидным базам данных:
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; Само заполнение: FillTree(TreeView1, ADOQuery1, 'id', 'id_id', 'name_test'); В итоге мне нужно чтобы можно было создать любой item в любом "месте" компонента и все это записать в базу с последующим чтением из базы в компонент. P.S. Если не правильно выражаюсь - прошу прощения. Я новичек Последний раз редактировалось Admin, 08.10.2008 в 15:24. |
#4
|
|||
|
|||
![]() Фактически, тебе надо вставить новую запись в БД, использовав в качестве внешнего ключа ID родительской ветки в дереве. Если получилось вставить, то добавляешь соответсвующий Item в дерево с помощью метода AddChild. Тут вопрос только в том, что при этом ты должен иметь ID записи, т.е. вставка в БД будет идти в 2 шага:
1. получить новый ID 2. вставить запись ID, ParentID, данные как уже сказал, ParentID - Id из родительской ветки. Вообще, задача для новичка не совсем тривиальная. Если ты не понимаешь код, который загружает дерево, то наврядли сможешь сам написать добавление, т.к. там используется несколько трюков, которые не совсем корректны, но вообще работают. |
#5
|
|||
|
|||
![]() Привет?
меня тоже интересует данный вопрос. Нужно чтобы при добавлении нового клиента он добовлялся в дереве. как это совместить? |
#6
|
|||
|
|||
![]() Самый лучшее в этом деле использовать cx-овы компоненты. Там на cxTreeVew есть такие поля как KeyField, ParentField, DisplayField. очень удобно работать с ними. создаешь Кверик типа
Код:
select id,parent,name from treeview start with id=0 connect by parent=prior id Програмист приходит на стрельбище. Стреляет. Прапор смотрит на мешень и говорит Прапор: вы не попали ни один раз. Программист: Пули вылетели, проблемы у вас. |
#7
|
|||
|
|||
![]() при добавлении, изменении и удалении можно использовате такой механизм. Ведь при добавлении ты вибираешь кокретную ветку с конкретном 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
|
|||
|
|||
![]() Если очень надо могу выложить пример работы. Но надо будет скачать cx-вые компоненты. и на чем делаем ADO или DOA
Програмист приходит на стрельбище. Стреляет. Прапор смотрит на мешень и говорит Прапор: вы не попали ни один раз. Программист: Пули вылетели, проблемы у вас. |