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;