Цитата:
Сообщение от 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;