|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Иерархия и treeview
сем привет, помогите пожалуйста разобраться в чем ошибки. Пишу приложение для бд, в кратце суть - небольшая система управления персоналом на предприятии, структура подразделений представлена в виде древовидной иерархии, просмотр данных о сотрудниках реализован как для отдельного подразделения, так и в виде полного списка.
Так вот есть у меня хранимая процедурка которая отвечает за формирование иерархии подразделений и процедурка в самом приложении которая выстраивает иерархию в TreeView, но чето гдето косячит, и выстраиваются потомки только 1го подкорневого элемента, остальных дельф не видит. Вот хранимая процедура(список подразделений хранится в таблице DEPS): Код:
begin FOR SELECT DeptFullName FROM DEPS WHERE ParentDeptID =:pDeptID INTO :rDeptFullName DO SUSPEND; end Вот процедура в приложении: Код:
procedure TForm1.SetSelection; begin Screen.Cursor := crSQLWait; //Изменяем форму указателя мыши //на "песочные часы" with datamodule1, sidsStaff, treeview1.Selected do begin Close; //Закрываем набор данных sidsStaff //Выбираем все столбцы из представления FullList DataSet.CommandText := 'select * from FullList'; if AbsoluteIndex > 0 then begin //Если выбран НЕ корневой элемент структуры, то ... //Находим соответствующую запись в таблице DEPS datamodule1.sidsDeps.Locate('DeptFullName', Text,[]); //Добавляем условие в запрос - //выбор сотрудников из всех подразделений, для которых //содержимое поля Parents начинается с соответствующего //списка идентификаторов DataSet.CommandText := DataSet.CommandText+' WHERE DepID = '+IntToStr(sidsDepsDeptID.AsInteger)+' or Parents starting with '+#39; if Parent.AbsoluteIndex > 0 then DataSet.CommandText := DataSet.CommandText + sidsDepsParents.AsString; //Добавляем к списку Parents идентификатор //текущего подразделения DataSet.CommandText := DataSet.CommandText + IntToStr(sidsDepsDeptID.AsInteger)+#39; end; if ckByPoss.Checked then begin //Если есть сортировка по уровню должностей, то... DataSet.CommandText := DataSet.CommandText+' order by PosLevel, LastName, FirstName, FatherName' end else //в противном случае сортируем строки по именам DataSet.CommandText := DataSet.CommandText+' order by LastName, FirstName, FatherName'; Open; //Выбираем данные из представления FullList Screen.Cursor := crDefault; //Восстанвливаем указатель мыши, //выбранный по умолчанию end; end; |