Показать сообщение отдельно
  #9  
Старый 23.09.2012, 16:09
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от thxu2
procedure TForm1.FormActivate(Sender: TObject);
var
NodeDetails: PNodeDetails;
TreeViewIndex: LongInt;
begin
adoquery1.Open;
while not adoquery1.Eof do
begin
New(NodeDetails);
NodeDetails^.Id:= adoquery1.FieldByName('Id').AsInteger;
NodeDetails^.ParentId:= adoquery1.FieldByName('id_parent').AsInteger;
NodeDetails^.Name:= adoquery1.FieldByName('Class_name').AsString;

adoquery1.Next;
end;
adoquery1.Close;
end;

end.



Допустим я так записал в рекорд данные. Они где-то хранятся ???как мне пройтись по ним чтобы построить дерево???????
Данные хранятся в памяти, но пройтись по ним не получится, так как ты потерял все ссылки на них. Ссылки (указатели) на эти данные нужно куда-то сохранять, например в массив, в TList, в TStringList и т.п.

Пример с использованием TList:
Код:
var
  NodeDetails: PNodeDetails;
  TreeViewIndex: LongInt;
  List: TList;
  i: Integer;
begin
  List := TList.Create;
  try
    ADOQuery1.Open;
    ADOQuery1.First;
    while not ADOQuery1.Eof do
    begin
      New(NodeDetails);
      List.Add(NodeDetails); // Добавляем в список новую запись
      NodeDetails^.Id :=       ADOQuery1.FieldByName('Id').AsInteger;
      NodeDetails^.ParentId := ADOQuery1.FieldByName('id_parent').AsInteger;
      NodeDetails^.Name :=     ADOQuery1.FieldByName('Class_name').AsString;
      ADOQuery1.Next;
    end;
    ADOQuery1.Close;

    // Теперь можно пройтись по всем сохранённым записям и что-то с ними сделать
    for i := 0 to List.Count - 1 do
    begin
      NodeDetails := List[i];
      // Что-то делаем с очередной записью
    end;

  finally
    // В конце главное не забыть освободить память занятую под данные:
    for i := 0 to List.Count - 1 do Dispose(PNodeDetails(List[i]));
    List.Free; // И освободить сам список
  end;
end;
Ответить с цитированием