我用一个TADOQuery用select * from打开一个表(大概50-100万行记录)open后发现占用了500m的内存。。如何做到分批把记录读入内存进行操作呢?比如一次打开10000条记录操作请指点!多谢

解决方案 »

  1.   

    如果你有个字段是索引关键字的话
    你可以用
    select top 10000 * from table order by id
    然后保存id的最大值,进入下次查询
    select top 10000 * from table where id>上次保存的最大值 order by id这样循环,直到查出的记录数为0为止
      

  2.   

    上面确实是一种方法,但不能减少多少系统负荷,你可以试试一下这种连接:
    ADOConnection1 + ADOStoredProc/ADOQuery + DataSetProvider + ClientDataSet + DataSourceADOConnection1接数据库,ADOStoredProc/ADOQuery 查询 ADOConnection中的东西,ClientDataSet查ADOStoredProc/ADOQuery中的数据,而这三个控件都可以控制数据包,这样就不存在问题了,
    你还可以用DBExpress,如下:
    SQLConnection + SimpleDataSet + DataSetProvider + ClientDataSet + DataSource
    SQLConnection配数据库,SimpleDataSet的PacketRecord属性可以控制数据报个数,很直接的.
      

  3.   

    用CLIENTDATASET的PACKPAGE设置传递包的大小
      

  4.   

    改变你的cache size就可以了
      

  5.   

    select top 10000 只能在sql server下用吧可以试试cachesize