表记录为30000条,要求一次性全部显示,提高速度
代码如下:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ToolWin, ActnMan, ActnCtrls, StdActns, BandActn,
ExtActns, ActnList, ComCtrls, Grids, ValEdit, ExtCtrls, XPStyleActnCtrls,
DBGrids, DB, ImgList, ActnMenus, ADODB, StdCtrls,DateUtils;type
TForm1 = class(TForm)
TreeView1: TTreeView;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
Button1: TButton;
procedure Button1Click(Sender: TObject); private
procedure Add(var Nodes:TTreeNode;x:string);
{ Private declarations } public
{ Public declarations }
end;var
Form1: TForm1;
ADOQuery1: TADOQuery;
TreeView1: TTreeView;implementation{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
nodes:TTreenode;
x:string;
a,b:tdatetime;
begin
a:=now;
begin
with ADOQuery1 do
begin
close;
sql.clear;
sql.add('select id,caption from lianxi where lb=''father'' and fjid=''0'' order by id');
open;
while not eof do
begin
nodes:=TTreenode.create(nil);
nodes:=Treeview1.Items.add(nil,FieldbyName('caption').AsString);
x:=ADOQuery1.fieldbyname('id').asstring;
Add(nodes,x);
next;
end;
end;
end;
b:=now;
ShowMessage(IntToStr(SecondsBetween(A,B)));
end;procedure TForm1.Add(var Nodes:TTreeNode;x:string);
var
sub:TTreenode;
List:TADOQuery;
begin
List:=TAdoQuery.Create(nil);
List.Connection:=ADOConnection1;
with List do
begin
Close;
Sql.Clear;
Sql.Add('select id,caption from lianxi where fjid=:par order by id');
parameters.ParamByName('par').Value:=x;
open;
While not Eof do
begin
sub:=Treeview1.Items.AddChild(nodes,FieldbyName('caption').AsString);
add(sub,fieldbyname('id').asstring);
next;
end;
end;
List.Free;
end;end.
哪里可以再优化?提高速度
代码如下:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ToolWin, ActnMan, ActnCtrls, StdActns, BandActn,
ExtActns, ActnList, ComCtrls, Grids, ValEdit, ExtCtrls, XPStyleActnCtrls,
DBGrids, DB, ImgList, ActnMenus, ADODB, StdCtrls,DateUtils;type
TForm1 = class(TForm)
TreeView1: TTreeView;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
Button1: TButton;
procedure Button1Click(Sender: TObject); private
procedure Add(var Nodes:TTreeNode;x:string);
{ Private declarations } public
{ Public declarations }
end;var
Form1: TForm1;
ADOQuery1: TADOQuery;
TreeView1: TTreeView;implementation{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
nodes:TTreenode;
x:string;
a,b:tdatetime;
begin
a:=now;
begin
with ADOQuery1 do
begin
close;
sql.clear;
sql.add('select id,caption from lianxi where lb=''father'' and fjid=''0'' order by id');
open;
while not eof do
begin
nodes:=TTreenode.create(nil);
nodes:=Treeview1.Items.add(nil,FieldbyName('caption').AsString);
x:=ADOQuery1.fieldbyname('id').asstring;
Add(nodes,x);
next;
end;
end;
end;
b:=now;
ShowMessage(IntToStr(SecondsBetween(A,B)));
end;procedure TForm1.Add(var Nodes:TTreeNode;x:string);
var
sub:TTreenode;
List:TADOQuery;
begin
List:=TAdoQuery.Create(nil);
List.Connection:=ADOConnection1;
with List do
begin
Close;
Sql.Clear;
Sql.Add('select id,caption from lianxi where fjid=:par order by id');
parameters.ParamByName('par').Value:=x;
open;
While not Eof do
begin
sub:=Treeview1.Items.AddChild(nodes,FieldbyName('caption').AsString);
add(sub,fieldbyname('id').asstring);
next;
end;
end;
List.Free;
end;end.
哪里可以再优化?提高速度
//你上面的代码
TreeView1.Items.EndUpdate;
这样你试一下
parameters.ParamByName('par').Value:=x; 你不感觉这第二次SQL查询是多余的吗?
所以很快可以找到.如果显示在 TVirtualStringTree 这样的控件上,就要将读取的结果先保存起来.
2.将结果集DownLoad到ADOQuery1后,在添加结点时,就应该用Filter功能,从内存中过滤相应的结点,而不是用SQL再次连接来查询