我是初学者。各位大侠帮小弟看看下面的查询,速度太慢啊,当数据量很大时,帮小弟改改,谢谢拉  
  treeview1.Items.Clear;
  treeview1.Items.Add(nil,'数据浏览');
  query2.Close;
   query2.SQL.Clear;
   query2.SQL.Add('select Distinct nianyue from sysdb');
   query2.Open;
   While not query2.eof do
   begin
     Tlist:=treeview1.Items.AddChild(treeview1.Items[0],query2.fieldbyname('nianyue').asstring);
     tlist.selectedindex:=1;
     tlist.ImageIndex:=0;
     query2.Next;
   end;
   query2.Close;
   query2.SQL.Clear;
   query2.SQL.Add('select * from sysdb');
   query2.Open;
aaa:   while not query2.Eof do
   begin
     for a:=0 to treeview1.items[0].count -1 do
            if query2.FieldByName('nianyue').AsString=treeview1.Items[0].Item[a].Text then
     begin
        if bianhao<>query2.fieldbyname('bianhao').asstring  then
       begin
         tlist:=treeview1.Items.AddChild(treeview1.Items[0].item[a],query2.fieldbyname('bianhao').AsString );
         tlist.SelectedIndex:=2;
         tlist.ImageIndex:=1;
         bianhao:=query2.fieldbyname('bianhao').asstring;
       end;
         if bianhao=query2.fieldbyname('bianhao').asstring  then
         begin
         bianhao:=query2.fieldbyname('bianhao').asstring;
         query2.Next;
         goto aaa;
         end;
       end;
       query2.Next;
   end;

解决方案 »

  1.   

    treeview大数据量速度是很慢的.
      

  2.   

    treeview1开始添加数据的时候加上BeginUpdate,添加完后加上EndUpdate,这样会提高很多效率
      

  3.   

    如:
    treeview1.Items.BeginUpdate;
    try
      While not query2.eof do
       begin
         Tlist:=treeview1.Items.AddChild(treeview1.Items[0],query2.fieldbyname('nianyue').asstring);
         tlist.selectedindex:=1;
         tlist.ImageIndex:=0;
         query2.Next;
       end;
    finally
      treeview1.Items.EndUpdate;
    end;
      

  4.   

    各位老大啊,最少也有十几万条以上的记录啊,
    是这样显示的
    +……2001年1月
       ……2001年1月1日11:12:13
       ……2001年1月1日11:13:15
       ……2001年1月2日20:14:10
       。。
    +……2001年2月
       ……2001年2月1日1:12:20
       
    按这种格式一直显示下去我改了循环没有用goto语句还是很慢啊
      

  5.   

    十几万条!!那还是不要用treeview了,如果非得用,那就如楼上所说一级一级动态展开,也只能这样了。
    你看csdn的树状图就是这样的
      

  6.   

    一级一展开....treeview1开始添加数据的时候加上BeginUpdate,添加完后加上EndUpdate,这样会提高很多效率
      

  7.   

    KAO,怎么想起用GOTO啊.给每个节点设置一个标志:以从数据库读出/没有读出先只展开根节点,在数据库中检查每个根节点下是否有子节点,如果有则在节点下添加一个临时节点或者设置显示加号.在用户展开节点时删除临时节点,将新节点加入,设置展开节点的状态.其它都同上.