
27.03.2010, 15:59
|
 |
Новичок
|
|
Регистрация: 08.02.2009
Сообщения: 97
Репутация: 10
|
|
Вообщем я реализовал следующим образом
Код:
procedure TForm1.FormCreate(Sender: TObject);
var i1,i2,i3,i4,i5:integer;
j1,j2,j3,j4:integer;
k2,k3,k4,k5:integer;
rc1,rc2,rc3,rc4:integer;
s:string;
begin //построение дерева
TreeView1.Items.BeginUpdate;//запрет обновления
TreeView1.Items.Clear; //очистка списка
k2:=0;k3:=0;k4:=0;k5:=0;
Query1.Active:=true; //подключение баз
Query1.First;
//--------------Первый уровень-------------
Query1.Filtered:=true;
rc1:=Query1.RecordCount;
for i1:=1 to rc1 do
begin // ++i1
s:=Query1PREDPRIATIE.AsString;
TreeView1.Items.Add(nil,s);
j1:=i1+k2+k3+k4+k5;
//--------------Второй уровень-------------
rc2:=Query2.RecordCount;
if rc2>0 then
begin // ++rc2
Query2.First;
for i2:=1 to rc2 do
begin // ++i2
s:=Query2CEX.AsString;
TreeView1.Items.AddChild(TreeView1.Items.Item[j1-1],s);
k2:=k2+1;
j2:=i1+k2+k3+k4+k5;Query2.Next;
end;
//--------------Третий уровень-------------
rc3:=Query3.RecordCount;
if rc3>0 then
begin // ++rc3
Query3.First;
for i3:=1 to rc3 do
begin // ++i3
s:=Query3OTDEL.AsString;
// if QuStrName.AsString<>'' then s:=s+' ('+QuStrName.AsString+')';
TreeView1.Items.AddChild(TreeView1.Items.Item[j2-1],s);
k3:=k3+1;
j3:=i1+k2+k3+k4+k5;Query3.Next;
End;
//--------------Четвертый уровень-------------
rc4:=Query4.RecordCount;
if rc4>0 then
begin // ++rc4
Query4.First;
for i4:=1 to rc4 do
begin // ++i4
s:=Query4FAMILIA.AsString;
TreeView1.Items.AddChild(TreeView1.Items.Item[j3-1],s);
k4:=k4+1;
j4:=i1+k2+k3+k4+k5;Query4.Next;
// Query1.Next; Query2.Next;Query3.Next;
end;
end;
end;
End;
end;
TreeView1.Items.EndUpdate;//разрешение обновления
Только выводит он не все( цех раскрывается только 1 (последний) ) отдел от последнего цеза нормально выводит сотрудников
подскажите где ошибся 
|