delphi 读取access数据库22186条数据用时33秒,怎么加快读取速度.
解决方案 »
- 使用inno setup打包时 如何关闭已运行的软件
- 请问应该怎么终止一个线程啊?^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!!!
- 请教一下这两个连接串哪个效率更高些?
- 求dephi7.0中文版下载的网址,一定要能下的才能给分啊,万分感谢!!!!
- SOS!!! recordcount=-1为什么???,在线等
- 记得有个编写Win32服务的控件,忘了叫什么了。
- cxGrid的简单问题,各位请进
- 求助:关于delphe无法在vista下运行
- 第三次提问:(
- delphi中对*.dbf数据库记录的物理删除?
- delphi olecontainer的问题
- 多线程循环里内存不断增加
2.你这33秒包括查询的时间和装置数据集的时间。优化SQL语句,比如不要在where后的条件进行计算(如:substr(字段A,1,2)=‘11’)
{ readdata }constructor TReadmydata.Create(Query:TADOQuery; list: TListView);
begin
AQuery:=Query;
Query.close;
Query.SQL.Clear;
Query.SQL.Add('select * from data');
i:=0;
lists:=list;
FreeOnTerminate := True; // 自动删除
inherited Create(False); // 直接运行
end;procedure TReadmydata.Execute;
begin
with AQuery do
begin
Open;
ii:=RecordCount;
Form1.StatusBar1.Panels[0].Text:=Format('共有%d条数据',[ii]); lists.Items.BeginUpdate;
while not Eof do
begin
i:=i+1;
a:=Format('%d',[i]);
b:=fieldbyname('lb').Value;
c:=fieldbyname('bt').Value;
Synchronize(datalist);
Next;
end;
lists.Items.EndUpdate;
Form1.ProgressBar1.Visible:=False;
Form1.StatusBar1.Panels[1].Text:='';
end;
end;procedure TReadmydata.ProgressBar(i:Integer);
begin
form1.ProgressBar1.Position:=i;
end;procedure TReadmydata.datalist;
begin
ProgressBar(i);
ListItem:=Form1.ListView1.Items.Add;
with ListItem do
begin
Caption:=a;
SubItems.Add(b);
SubItems.Add(c);
end;
end;//我是用线程读取的内容。这是读取部分
ListView加载数据可能也会存在速度的问题VirtualStringTree加载上万的数据很快,你可以试下