mySQL数据库中,所有的DataBase及其对应的Tables;最终效果:

 

先在设计窗口,新建根结点

 再添加层级为Level1级的数据库名DataBases;

var
 RootNode : TTreeNode; //先建立一个TREEVIEW使用的结点对象
begin
      FDQuery1.Active:=false ;
      FDQuery1.SQL.Text:= 'SHOW DATABASES';
      DBGrid1.DataSource:= DataSource1;
      FDQuery1.Active:=true;

 RootNode:=TreeView1.Items.GetFirstNode();   //根结点
 RootNode.DeleteChildren;                          //删除 以前 子结点

    while NOT FDQuery1.EOF do       Begin  
TreeView1.Items.AddChild(RootNode,FDQuery1.FieldByName('database').AsString) ; FDQuery1.Next; End; RootNode.Expand(false); //展开子结点 end;

  再添加层级为Level2级的数据    表名Tables;

 var
 RootNode ,DBNodes: TTreeNode; //   TREEVIEW1使用的  结点 对象
 aDBLists:tstringList;
 i:integer;
begin
 DBNodes:=RootNode.getFirstChild;              //第一个 database名
   aDBLists:= tstringList.Create;
TreeView1.Items.BeginUpdate;      //使 显示 更快
//========================层级为Level2级的数据 表名Tables;====================== while (DBNodes<>nil) do begin if DBNodes.HasChildren then DBNodes.DeleteChildren; FDConnection1.Connected:= false; FDConnection1.Params.Database:=DBNodes.Text; FDConnection1.Connected:=true; FDConnection1.ExecSQL('set names ''gb2312'';'); FDConnection1.GetTableNames('', '', '', aDBLists); for I := 0 to aDBLists.Count-1 do TreeView1.Items.AddChild(DBNodes,aDBLists.Strings[i]) ; DBNodes.Expand(false); DBNodes:=RootNode.GetNextChild(DBNodes); // 下一个 database名 end; treeview1.TopItem:= RootNode;// //定位到 根结点 显示 aDBLists.Free ;
  TreeView1.Items.EndUpdate;   //使 显示 更快
//======================================================================== end;

双击获得 结点,修改 结点 名称,TreeView1的ReadOnly要设为True;

procedure TForm8.TreeView1DblClick(Sender: TObject);
var
  P: TPoint;
  R: TRect;
var aTreenode:tTreeNode;
begin
  GetCursorPos(P);
  P := treeView1.ScreenToClient(P);
  aTreenode := treeView1.GetNodeAt(P.X, P.Y);//获得结点 

   if (aTreenode<>nil)  then  begin
      R := aTreenode.DisplayRect(true);
      if edit2.CanFocus then  edit2.SetFocus;
        case aTreenode.Level of
           1:{databse} begin
             edit2.Tag:=1;

           end ;
           2: {tables} begin
             edit2.Tag:=2;
             edit2.Text:= aTreenode.Text;
             edit2.SetBounds(r.Left +treeview1.Left, r.Top+ treeview1.Top, r.Width -1,r.Height-1 )   ;
             edit2.Visible:=true;
           end;
        end;
   end;
end;