如何才能在最短的时间内将有10万条记录的数据集中的数据全部插入数组?
我以前的做法是
ADOQuery.First;
i:=0;
while not ADOQuery.Eof do
begin
   reclist[i].id:=ADOQuery.fieldbyname('id').asstring;
       ......
   inc(i);
   ADOQuery.next;
end;
可这样太慢,有没有好的方法?不胜感激!!!!

解决方案 »

  1.   

    帮你Up吧,好的办法也没多少,除非直接指针操作大DataSet
    再者避免数字 字符串的转换也能提高速度
      

  2.   

    读到数组里,快不了吧,有个dxmemdata控件,可以把数据放到那里面
      

  3.   

    这个可以改成这样:
    将你的产生数据集的条件,保存出来,尽量改成用(insert 字段表 select 字段表 where 条件)格式,再用Query执行。保证提高N倍!
    AdoQuery1.close;
    AdoQuery1.sql.clear;
    AdoQuery1.sql.text:='insert 字段表 select 字段表 where 条件'
    AdoQuery1.ExecSql;
      

  4.   

    TO: vsice(为你) 老兄搞明白了,人家的要求可是传到字符串里,不是拷到另一个表里呀~
      

  5.   

    我的一点看法:首先,如果你是用的控件绑定的话,请改使用SQL语句,至少保证速度提高30%;其次,在进行操作时使用多线程(前面已有多位高手提到,本人也认为然);最后就是想请问老兄是出于什么目的要把表中的记录导入到字符串中?我认为字符串功能虽强大,但经过这个转换过程后即使再高的效率也要打折的~不是吗?
      

  6.   

    有没有人知道,怎样能直接在ADOQUERY的缓冲区中把数据直接副给我的数组
      

  7.   

    >>如何才能在最短的时间内将有10万条记录的数据集中的数据全部插入数组?
    數據記錄到數組, 就我知道,并沒有很多的方法,
    但你一次要導這麼多記錄, 是不是考慮你的實現有問題???
      

  8.   

    同意aiirii(ari-爱的眼睛) ——不应该重实现去入手,
      

  9.   

    几点可以提高效率的方法:
    1  如果是更新操作(insert、update、delete),用ADOCommond组件执行sql语句要比query效率高。
    2  用for循环要比while的效率高
    3  如果可能把表分块操作
    4  用存储过程或触发器实现
      

  10.   

    用原生ADO,效率绝对要提高几十倍。十万条记录,大概3分钟之内搞定用Query取出数据集,Query有个Recordset属性,用它就可以这里关键是数据类型的转换,其他的都很容易祝你好运
      

  11.   

    我做过一个例子,统计ADOQuery和原生ADO的效率,如果你需要,我可以发给你
      

  12.   

    to wanwangzhiwang(万王之王) :谢谢了
    我的e_mail:[email protected]
               [email protected]
      

  13.   

    with ADOQ.RecordSet do
    begin
      MoveFirst;
      while not EOF do
      begin
        FBegDateStrs.Add(Fields['BEG_DATE'].Value); //FBegDateStrs is a TStringList
        FEndDateStrs.Add(Fields['END_DATE'].Value); //FEndDateStrs is a TStringList
        MoveNext;
      end;
    end;用 RecordSet 会比直接操作ADOQ快上100倍,呵呵
      

  14.   

    主要影响速度的应该不是在于你插入数组的过程,而是在向数据库查询并获得数据的这个过程。
    使用原生ADO是一个好办法,并且ADOQuery本身也有一些属性通过设置后可以改善性能的:
    CachSize = 1000   //这个CachSize在对于大量数据的存取时是性能比较高的
    CursorType = ctOpenForwardOnly  
    LockType = ltReadOnly  //因为你是只用于一个循环的只读数据,这两项属性也能一定程度上改善性能
      

  15.   

    感谢大家的参与,我利用原生ADO确实快了很多。就此结帖了!