Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Помогите с TreeView и БД


Автор: SnAKEen 6.8.2007, 22:24
Всем здрям!
Проблемма такая: 

Есть БД где храниться структура TreeView:

ВнутрКод    МойКодЭл    <-КодПренадлежностиКЭлем        Наименование
1                  1                    0                                                     ГЛАВНАЯ
2                  2                    1                                                     ГРУППА 1
3                  3                    11                                                   ГРУППА 2
4                  4                    1                                                     ГРУППА 3
5                  5                    2                                                     ГРУППА 1-1
6                  6                    3                                                     321
7                  7                    6                                                     23
8                  8                    4                                                     23
9                  9                    3                                                     12
10                10                  5                                                     123
11                11                  1                                                     32132131321
12                12                  11                                                   321321321321


Далле приведу код построения TreeView:

Код

procedure TForm1.RefreshGroup(TV: TTreeView);
var
  MyTV: Array[1..200] of TTreeNode;
  I: ShortInt;
  Q: TQuery;
Begin
  Q := TQuery.Create(Application);
  Q.DatabaseName := '';
  Q.SQL.Clear;
  Q.SQL.Add('SELECT * FROM group_list.db');
  Q.Open;

  TV.Items.Clear;
  Q.First;
  For I := 1 to Q.RecordCount Do
  Begin
    with TV.Items do
    begin
      If Q.Fields.FieldByName('FOR_ID').AsInteger = 0 Then
        MyTV[Q.Fields.FieldByName('ID').AsInteger] := Add(nil, Q.Fields.FieldByName('NAME').AsString)
      Else
        MyTV[Q.Fields.FieldByName('ID').AsInteger] := AddChild(MyTV[Q.Fields.FieldByName('FOR_ID').AsInteger], Q.Fields.FieldByName('NAME').AsString); 
    End;
    Q.Next;
  End;
End;



Проблемма в том что когда мы перебераем БД по порядку... мы натыкаемся на 3й элемент и понимаем что он пренадлежит элементу с номером 11 а элемент с этим номером еще не создан. В результате получаем ошибку.
СТРОКА: MyTV[Q.Fields.FieldByName('ID').AsInteger] := AddChild(MyTV[Q.Fields.FieldByName('FOR_ID').AsInteger], Q.Fields.FieldByName('NAME').AsString); 


Помогите пожалуйста советом!! или может кто знает другой способ работы с  и БД???


Да и еще один вопросик.. Нетли у когонибудь ссылочки по литературе об TreeView Буду благодарен...

Автор: STFN 7.8.2007, 18:13
http://forum.vingrad.ru/topic-97620/view-all.html - тут про Virtual TreeView. Может поможет тебе.

Автор: SnAKEen 7.8.2007, 18:49
Спасибо... много интересного!!! smile 

Автор: pseud 8.8.2007, 16:17
Developer Express DBTreeList тебе в руки (платный правда, но если поискать...)
оч. удобная вещь
IMHO удобноее, чем Virtual TreeView, но платно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)