给你个例子:
procedure DataSetToTreeView(DataSet: TDataSet; var TreeView: TTreeView; NodeRoot: string);
var Nodes: array of TTreeNode;
    Strs: array of string;
    i: integer;
begin
  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  with DataSet do
  begin
    Close;
    Open;
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    SetLength(Nodes, FieldCount+1);
    SetLength(Strs, FieldCount);
    Nodes[0] := TreeView.Items.AddChild(nil, NodeRoot);
    for i:=Low(Strs) to High(Strs) do Strs[i] := #255;
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    First;
    while not Eof do
    begin
      for i:=Low(Strs) to High(Strs) do
        if Strs[i]<>Fields[i].AsString then
        begin
          Strs[i] := Fields[i].AsString;
          Nodes[i+1] := TreeView.Items.AddChild(Nodes[i],Fields[i].AsString);
        end;
      Next;
    end;
    Close;
  end;
end;

解决方案 »

  1.   

    //最简单的方法
    //字段用一个text或者blob类型//保存
    procedure TForm1.Button1Click(Sender: TObject);
    var
      vMemoryStream: TMemoryStream;
    begin
      vMemoryStream := TMemoryStream.Create;
      try
        TreeView1.SaveToStream(vMemoryStream);
        vMemoryStream.Position := 0;
        Table1.Edit;
        TBlobField(Table1.FieldByName('TreeField')).LoadFromStream(vMemoryStream);
      finally
        vMemoryStream.Free;
      end;
    end;//载入
    procedure TForm1.Button2Click(Sender: TObject);
    var
      vMemoryStream: TMemoryStream;
    begin
      vMemoryStream := TMemoryStream.Create;
      try
        TBlobField(Table1.FieldByName('TreeField')).SaveToStream(vMemoryStream);
        vMemoryStream.Position := 0;
        TreeView1.LoadFromStream(vMemoryStream);
      finally
        vMemoryStream.Free;
      end;
    end;