我使用adoquery来查询sql2000的数据,可自定义目标表名,简单点,无须条件。但adoquery已经open后,我一行行读取数据,发现速度非常慢,一个14000条记录,10个字段的表光读取就花了近8秒。但我看看,若使用dbgrid好象一下子就ok了,请教大家我该如何提高速度!能在1秒内遍历还差不多。别告诉我使用dbgrid ,我必须无界面的处理这些记录。因为这些数据还要再加工。
  明晚结贴,答我问题者皆友也

解决方案 »

  1.   

    dbgrid好像不是一下子读出所有的数据的吧,他是读一些,要读的话再缓冲一些进来的.优化一下你的SQL语句,贴出来
      

  2.   

    没特别的,比如 select * from atable;
      

  3.   

    OPEN后若要一行一行的再处理,则要关闭ADOQUERY与其他控件的连接.
    adoquery.disableconnect;
    完成后.
    adoquery.enableconnect;
      

  4.   

    减少显示不必要的字段,参考CLIENTDATASET的分页功能
      

  5.   

    试试处理前先执行adoquery.DisableControls;
      

  6.   

    DBGrid不是一次性全部载入,所以速度快,如果你确认要将14000条记录全部做处理的话,建议写在存储过程中
      

  7.   

    DBGrid是不能一次载入的,   我同意楼上的做法!~~~
      

  8.   

    其实这和DBGRid没有关系,应为adoquery不是一次性载入数据的
    不是一次性载入的,当你拖动滚动条或者调用Last,Locate等命令的时候
    才获取数据。
    不知道楼主要做什么,既然不需要界面显示为什么不在存储过程中来完成呢
      

  9.   

    hehe,我已基本解决了这个问题。首先,如soundbug所说,
    我使用了adoquery.disablecontrols,这样速度可以提高不少,但也需要3秒多种。代码如下:
       with adoquery do
       begin
         ...
         DisableControls; 
         Open;
         for I:=0 to RecordCount-1 do
         begin
           ......
           Next;  
         end;   
       end;
    但我还是不满足,结果实际读时,我采取如下方法:
       with adoquery do
       begin
         ...; 
         Open;
         for I:=0 to RecordSet.RecordCount-1 do
         begin
           ......
           RecordSet.MoveNext;  
         end;   
       end;呵呵,不到1秒就能将数据全部取出来了。
      

  10.   

    我在写新一版的通用应用服务器MayGTS,以前的几个版本逐渐暴露了一些缺点。现在我要把它改成一个更高性能,也更通用的产品。目前内核已全部改好,我已测试了部分,very ok! 支持:多应用部署,每个应用可自配连接池及连接数,支持各种数据库,如sqlserver,Oracle,DB2,Sybase等。各数据库均使用优化的数据引擎。如Oracle使用OCI层次引擎。业务逻辑自配.使用MayGTS后,决不再要midas这种烂东西,呵呵!