|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
БД-> TreeView -> БД -> DBGrid
Помогите с решением.
стоит такая задача: необходимо из БД формировать дерево в виде TreeView и потом по нажатию на определенную ветку дерева отображать данные из БД, относящиеся к этой ветке. Собственно проблема заключается вот в чем: например вид дерева таков: Предприятие Отдел разработки Группа проектирования платформы Отдел тестирования в БД это вглядит так: id up nazvanie 0 0 Предприятие 1 0 Отдел разработки 2 0 Отдел тестирования 3 1 Группа проектирования платформы данные же, которые выбираются из БД дальше, ссылаються на ID выбранной ветки дерева вот таким кодом по событию OnChange: Код:
procedure Tkd_form.kd_tv_structChange(Sender: TObject; Node: TTreeNode); begin kd_form.kd_sql_struct_pers.Active := FALSE; kd_form.kd_sql_struct_pers.Parameters.ParamByName('i_department').Value := node.AbsoluteIndex; kd_form.kd_sql_struct_pers.Active := TRUE; end; в query прописан запрос: Код:
select id, full_fio, department from employers where department = :i_department; проблема же в том, что при нажатии на ветвь кода "Группа проектирования платформы" выводяться данные для отдела тестирования, т.к. для группы AbsolutIndex=2, а для отдела уже равен 3. Подскажите, пожалуйста, как поправить такую ситуацию Ниже процедура заполнения TreeView: Код:
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; |
#2
|
||||
|
||||
Если я верно понял, ты заполняешь Tree вручную ... но почему бы не взять для этой цели спец компонент. напр?
Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#3
|
|||
|
|||
а подскажите, пожалуйста, кака установиь эти компоненты в Delphi7, а то я никогда вообще не устанавливал доп компоненты
|