delphi 读取access数据库22186条数据用时33秒,怎么加快读取速度.

解决方案 »

  1.   

    1.只读取有用的列,无用的列不要读。
    2.你这33秒包括查询的时间和装置数据集的时间。优化SQL语句,比如不要在where后的条件进行计算(如:substr(字段A,1,2)=‘11’)
      

  2.   

    把你查询语句贴出来,大家看看优化下,不要用Select * from这类 *等
      

  3.   

    //----------------------------读取数据库线程------------------------------------
    { 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;//我是用线程读取的内容。这是读取部分
      

  4.   

    Query.SQL.Add('select lb,bt from data');//并设置索引然后你的
    ListView加载数据可能也会存在速度的问题VirtualStringTree加载上万的数据很快,你可以试下
      

  5.   

    我主要是为了界面美观,所以才用ListView,谢谢!我再试试
      

  6.   

    用DBGrid代替ListView1显示不行吗,要保存旧数据的话可以考虑用临时表