怎么把数据库(SQLSERVER)里的数据用TreeView显示出来, ( 积分: 100 )

  • 主题发起人 主题发起人 fhuibo
  • 开始时间 开始时间
F

fhuibo

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是递归,代码如下,但是如果节点太多的话很慢,怎么用其他发放实现:<br>type<br>&nbsp;&nbsp;PWARMRecord&nbsp;=&nbsp;^TWarmRecord;&nbsp;&nbsp;&nbsp;&nbsp;//数据结构<br>&nbsp;&nbsp;TWarmRecord&nbsp;=&nbsp;record<br>&nbsp;&nbsp;&nbsp;&nbsp;bmid:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;&nbsp;bmdm:&nbsp;string;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//部门代码<br>&nbsp;&nbsp;&nbsp;&nbsp;bmmc:&nbsp;string;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//部门名称<br>&nbsp;&nbsp;&nbsp;&nbsp;Code:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;&nbsp;sjbm:&nbsp;string;<br>&nbsp;&nbsp;end;<br><br>procedure&nbsp;TForm_BmjgSz.NewDataToTreenode;<br>var<br>&nbsp;&nbsp;MySQL:&nbsp;string;<br>&nbsp;&nbsp;MyNode:&nbsp;TTreeNode;<br>&nbsp;&nbsp;MyRecord:&nbsp;PWARMRecord;<br>begin<br>&nbsp;&nbsp;TreeVbm.Items.Clear;<br>&nbsp;&nbsp;MySQL&nbsp;:=&nbsp;'SELECT&nbsp;*&nbsp;FROM&nbsp;TBM&nbsp;WHERE&nbsp;SJBM=''UN''&nbsp;ORDER&nbsp;BY&nbsp;XSSX';<br>&nbsp;&nbsp;with&nbsp;ADOQBm&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;SQL.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;SQL.Text&nbsp;:=&nbsp;MySQL;<br>&nbsp;&nbsp;&nbsp;&nbsp;Open;<br>&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;not&nbsp;eof&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;New(MyRecord);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyRecord.bmid&nbsp;:=&nbsp;trim(FieldByName('BMID').AsString);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyRecord.bmdm&nbsp;:=&nbsp;trim(FieldByName('BMDM').AsString);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyRecord.bmmc&nbsp;:=&nbsp;trim(FieldByName('BMMC').AsString);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyRecord.Code&nbsp;:=&nbsp;Trim(FieldByName('CODE').AsString);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyRecord.sjbm&nbsp;:=&nbsp;Trim(FieldByName('SJBM').AsString);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyNode&nbsp;:=&nbsp;TreeVbm.Items.AddObject(nil,FieldByName('BMMC').AsString,&nbsp;nil);&nbsp;&nbsp;//增加第一层<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReadNode(MyNode,FieldByName('BMDM').AsString);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyNode.ImageIndex&nbsp;:=&nbsp;0;&nbsp;//<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyNode.SelectedIndex&nbsp;:=&nbsp;3;&nbsp;//<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;<br>end;<br><br>//遍历树结构<br>procedure&nbsp;TForm_BmjgSz.ReadNode(FNode:&nbsp;TTreeNode;&nbsp;FSJBM:&nbsp;string);<br>var<br>&nbsp;&nbsp;MySQL:&nbsp;string;<br>&nbsp;&nbsp;MyNode:&nbsp;TTreeNode;<br>&nbsp;&nbsp;MyRecord:&nbsp;PWARMRecord;<br>&nbsp;&nbsp;ADOQNode:&nbsp;TADOQuery;<br>begin<br>&nbsp;&nbsp;MySQL&nbsp;:=&nbsp;'SELECT&nbsp;*&nbsp;FROM&nbsp;TBM&nbsp;WHERE&nbsp;SJBM='''+FSJBM+'''&nbsp;&nbsp;ORDER&nbsp;BY&nbsp;XSSX';<br>&nbsp;&nbsp;ADOQNode&nbsp;:=&nbsp;TADOQuery.Create(Self);<br>&nbsp;&nbsp;ADOQNode.Connection&nbsp;:=&nbsp;DM.ADOConn;<br>&nbsp;&nbsp;with&nbsp;ADOQNode&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;SQL.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;SQL.Text&nbsp;:=&nbsp;MySQL;<br>&nbsp;&nbsp;&nbsp;&nbsp;Open;<br>&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;not&nbsp;eof&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new(MyRecord);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyRecord.bmid&nbsp;:=&nbsp;trim(FieldByName('BMID').AsString);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyRecord.bmdm&nbsp;:=&nbsp;trim(FieldByName('BMDM').AsString);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyRecord.bmmc&nbsp;:=&nbsp;trim(FieldByName('BMMC').AsString);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyRecord.Code&nbsp;:=&nbsp;Trim(FieldByName('CODE').AsString);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyRecord.sjbm&nbsp;:=&nbsp;Trim(FieldByName('SJBM').AsString);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyNode&nbsp;:=&nbsp;TreeVbm.Items.AddChildObject(FNode,MyRecord.bmmc,MyRecord);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;FieldByName('Code').AsString&nbsp;=&nbsp;'UN'&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyNode.ImageIndex&nbsp;:=&nbsp;0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyNode.SelectedIndex&nbsp;:=&nbsp;3;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyNode.ImageIndex&nbsp;:=&nbsp;1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyNode.SelectedIndex&nbsp;:=&nbsp;2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReadNode(MyNode,MyRecord.bmdm);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;<br>end;
 
1.如果节点多,特别是层数深,最好不要用递归,否则生成树时会象死机一样。最好的办法是只生成两层,这样,外观上与全部生成一样,在一个节点展开时生成孙(子的子)节点。这样实现起来要麻烦点。如果只生成一层更容易实现,但外观与表现和全部生成的树略有差别。——这个问题,写程序的经常碰到。<br>2.似乎MyRecord.bmid&nbsp;:=&nbsp;trim(FieldByName('BMID').AsString);这一句(以后几句类似)应当是这样:MyRecord^.bmid&nbsp;:=&nbsp;trim(FieldByName('BMID').AsString);?
 
后退
顶部