сем привет, помогите пожалуйста разобраться в чем ошибки. Пишу приложение для бд, в кратце суть - небольшая система управления персоналом на предприятии, структура подразделений представлена в виде древовидной иерархии, просмотр данных о сотрудниках реализован как для отдельного подразделения, так и в виде полного списка.
Так вот есть у меня хранимая процедурка которая отвечает за формирование иерархии подразделений и процедурка в самом приложении которая выстраивает иерархию в 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;