Creo que es más sencillo...
Con este código puedes recorrer el treeview y almacenar en la tabla ls items:
Código Delphi
[-]
var
i:integer;
tv:TTreeNode;
begin
tblOpcMenu.Open; for i := 0 to (TreeView1.Items.Count -1) do begin tv := TreeView1.Items[i]; tblOpcMenu.Append;
tblOpcMenu.FieldByName('NODO_PADRE').AsString := ifThen(Assigned(tv.Parent), tv.Parent.Index.ToString, '-1');
tblOpcMenu.FieldByName('NODO').AsInteger := tv.Index;
tblOpcMenu.FieldByName('OPC_DESCRIPCION').AsString := tv.Text;
tblOpcMenu.FieldByName('OPC_TAG').AsInteger := tv.AbsoluteIndex;
tblOpcMenu.Post;
end;
tblOpcMenu.Close;
Y con este otro recuperrarlos y añadirlos a un Treeview vacío:
Código Delphi
[-]
var
i, iParent:integer;
tv, tvParent:TTreeNode;
begin
tblOpcMenu.Open; while not tblOpcMenu.Eof do begin iParent := tblOpcMenu.FieldByName('NODO_PADRE').AsInteger; if (iParent = -1) then begin tv := TreeView1.Items.Add(nil, tblOpcMenu.FieldByName('OPC_DESCRIPCION').AsString); tvParent := tv; end
else tv := TreeView1.Items.AddChild(tvParent, tblOpcMenu.FieldByName('OPC_DESCRIPCION').AsString);
tblOpcMenu.Next;
end;
tblOpcMenu.Close;