主题:[讨论]TreeView读取数据的速度问题
从数据库中读取数据,有几千条甚至更多,我使用的递归调用,等几分钟都没加载玩,请高手给我改进下代码~ QQ:85050840
procedure TForm1.AddClass_list(AId:String;FatherNode:TTreeNode);//添加分类过程 1
var
QryTmp:TADOQuery;
myNode:TTreeNode;
myLabel:TLabel;
begin
QryTmp:=TADOQuery.Create(self);
QryTmp.ConnectionString:=linkstr;
QryTmp.SQL.Add('select * from list2');
QryTmp.SQL.Add('where lastbh='''+AId+''' order by bh');
QryTmp.Open;
while not QryTmp.Eof do
begin
myNode:=RzTreeView1.Items.AddChild(FatherNode,QryTmp.fieldbyname('bh').AsString+' '+QryTmp.fieldbyname('cname').AsString);
sbh[mynode.Index,0]:=QryTmp.fieldbyname('bh').AsString;
sbh[mynode.Index,1]:=QryTmp.fieldbyname('cname').AsString;
//创建标签,caption存放各分支的AutoId表识
myLabel:=TLabel.Create(self);
myLabel.Visible:=false;
myLabel.Caption:=QryTmp.fieldbyname('bh').AsString;
myNode.Data:=myLabel;
AddClass_list(QryTmp.fieldbyname('bh').AsString,myNode); //递归调用过程
QryTmp.Next;
end;
QryTmp.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
linkstr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'test.mdb;Persist Security Info=False';
AddClass_list('0',nil);
end;
数据库结构为
01
0101
010101........
这种类型~
procedure TForm1.AddClass_list(AId:String;FatherNode:TTreeNode);//添加分类过程 1
var
QryTmp:TADOQuery;
myNode:TTreeNode;
myLabel:TLabel;
begin
QryTmp:=TADOQuery.Create(self);
QryTmp.ConnectionString:=linkstr;
QryTmp.SQL.Add('select * from list2');
QryTmp.SQL.Add('where lastbh='''+AId+''' order by bh');
QryTmp.Open;
while not QryTmp.Eof do
begin
myNode:=RzTreeView1.Items.AddChild(FatherNode,QryTmp.fieldbyname('bh').AsString+' '+QryTmp.fieldbyname('cname').AsString);
sbh[mynode.Index,0]:=QryTmp.fieldbyname('bh').AsString;
sbh[mynode.Index,1]:=QryTmp.fieldbyname('cname').AsString;
//创建标签,caption存放各分支的AutoId表识
myLabel:=TLabel.Create(self);
myLabel.Visible:=false;
myLabel.Caption:=QryTmp.fieldbyname('bh').AsString;
myNode.Data:=myLabel;
AddClass_list(QryTmp.fieldbyname('bh').AsString,myNode); //递归调用过程
QryTmp.Next;
end;
QryTmp.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
linkstr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'test.mdb;Persist Security Info=False';
AddClass_list('0',nil);
end;
数据库结构为
01
0101
010101........
这种类型~