写了个程序后台数据库用的是ACCESS,客户用了一年后说打开界面非常之慢,查看了数据库后发现数据表中的记录已有五万多条,自己试过将记录复制到10万条,打开界面非常之慢,翻页也是同样的问题,我采用的方式是每页装入20条记录,循环写在表格中显示出来,再定四个翻页键用来查看数据,但问题是虽然是每次装入页面的记录只有二十条,但每次要打开记录集时还是必须一次性装入所有的记录,所以才慢,请问大家有什么好的方法解决这个问题

解决方案 »

  1.   

    1.设置一个自增长字段.并且该字段为INDEX.
    2.由于是 ACCESS ,所以,只能是前台分页.自增长字段目的,就是为了实现分页功能.
      1>记录用户前页的最后一个 自增值 ,例如 M .
      2>下一页,取下一页的开始值.M+1 ,结束值: M+1+1.5*PAGESIZE (注:由于数据库会有增删操作,故应该取页大小应该有一个系数,你可以根据情况自定一个1大的系数.
      3>前台循环取  RS 的前 PAGESIZE 条, 写到一个 新的RS中,并返回.
      注:新的RS是一个无连接的RS .
      
      

  2.   

    10条记录的数据还使用Access?就不能使用什么MySQL之类的解决?(MSSQL更好一点)
      

  3.   

    赞同2楼的~上万条记录还用ACCESS就显得你落后了!!!不过用SQL也有不便之处,你的程序可能只有几MB的大小,一个SQL精简版都要50多MB~
      

  4.   

    十万条记录不是 Access 数据库的极限。何况你的方法不是真正意义上的分页(应当利用 PageSize 和 AbsolutePage 属性)。Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    rs.PageSize = 20
    rs.Open "Select * From 客户", iConc, adOpenKeyset, adLockOptimistic
    lngPages = rs.PageCount
    lngCurrentPage = 1此时打开的记录集只有 20 条记录。翻页时:If lngCurrentPage < lngPages Then 
       lngCurrentPage = lngCurrentPage + 1
       rs.AbsolutePage = lngCurrentPage
    End If
      

  5.   

    楼上的方法可行,不过access查询记录慢其实是因为快到达了极限,最好换数据库
      

  6.   

    要不,在ACCESS里写一个带参查询,接收页号,每次只查询二十条记录到记录集中,这样会不会快些?
      

  7.   

    select top n * from tab where id not(select top n*page id from tab order by id) order by id
      

  8.   

    可能大部分时间花在了 select count(1) from table这样的语句上了,应该根据客户的实际需要,不一定要count(*),而只提前5或10页的数据,省去count(*)的时间
      

  9.   

    of123的方法是对的, 支持!
    pcwe2002是一知半解! SB!CSDN大而空洞! 没有多少有水平的程序员,都是一些又新又不谦虚的人成日吵架!
      

  10.   

    of123的方法漂亮,应该尽量使用记录集对象自带的属性。10W条数据确实不是ACCESS的极限,记录集的极限主要是记录所使用的字节数所决定的。有关极限性能的数据可以到我的博客里找:http://blog.csdn.net/badcitizen/archive/2008/03/04/2147582.aspx
      

  11.   

    to of123:
    结果集中只有20条,但查询的时候使用的是select * from table会不会因为数据库返回的数据太多而导致速度慢?
      

  12.   

    没用access做过大数据量查询,不过我知道sqlserver2000中还没有提供分页查询功能,
    还需要用到存储过程实现,至于sqlserver2005中提供的分页还没有测试过,
    既然同是微软的东西,连sqlserver都迟迟不提供这么重要的功能,我想access也不会有了,
    至于数据集分页,从数据库中查询出来的应该还是所有记录,不会对程序性能有提升。
    .net都没有实现的功能,asp也好不到哪儿,
    of123的方法,有时间的朋友可以在大数据量坏境下测试下