10万条ACCESS数据表分页解决方法 写了个程序后台数据库用的是ACCESS,客户用了一年后说打开界面非常之慢,查看了数据库后发现数据表中的记录已有五万多条,自己试过将记录复制到10万条,打开界面非常之慢,翻页也是同样的问题,我采用的方式是每页装入20条记录,循环写在表格中显示出来,再定四个翻页键用来查看数据,但问题是虽然是每次装入页面的记录只有二十条,但每次要打开记录集时还是必须一次性装入所有的记录,所以才慢,请问大家有什么好的方法解决这个问题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.设置一个自增长字段.并且该字段为INDEX.2.由于是 ACCESS ,所以,只能是前台分页.自增长字段目的,就是为了实现分页功能. 1>记录用户前页的最后一个 自增值 ,例如 M . 2>下一页,取下一页的开始值.M+1 ,结束值: M+1+1.5*PAGESIZE (注:由于数据库会有增删操作,故应该取页大小应该有一个系数,你可以根据情况自定一个1大的系数. 3>前台循环取 RS 的前 PAGESIZE 条, 写到一个 新的RS中,并返回. 注:新的RS是一个无连接的RS . 10条记录的数据还使用Access?就不能使用什么MySQL之类的解决?(MSSQL更好一点) 赞同2楼的~上万条记录还用ACCESS就显得你落后了!!!不过用SQL也有不便之处,你的程序可能只有几MB的大小,一个SQL精简版都要50多MB~ 十万条记录不是 Access 数据库的极限。何况你的方法不是真正意义上的分页(应当利用 PageSize 和 AbsolutePage 属性)。Set rs = New ADODB.Recordsetrs.CursorLocation = adUseClientrs.PageSize = 20rs.Open "Select * From 客户", iConc, adOpenKeyset, adLockOptimisticlngPages = rs.PageCountlngCurrentPage = 1此时打开的记录集只有 20 条记录。翻页时:If lngCurrentPage < lngPages Then lngCurrentPage = lngCurrentPage + 1 rs.AbsolutePage = lngCurrentPageEnd If 楼上的方法可行,不过access查询记录慢其实是因为快到达了极限,最好换数据库 要不,在ACCESS里写一个带参查询,接收页号,每次只查询二十条记录到记录集中,这样会不会快些? select top n * from tab where id not(select top n*page id from tab order by id) order by id 可能大部分时间花在了 select count(1) from table这样的语句上了,应该根据客户的实际需要,不一定要count(*),而只提前5或10页的数据,省去count(*)的时间 of123的方法是对的, 支持!pcwe2002是一知半解! SB!CSDN大而空洞! 没有多少有水平的程序员,都是一些又新又不谦虚的人成日吵架! of123的方法漂亮,应该尽量使用记录集对象自带的属性。10W条数据确实不是ACCESS的极限,记录集的极限主要是记录所使用的字节数所决定的。有关极限性能的数据可以到我的博客里找:http://blog.csdn.net/badcitizen/archive/2008/03/04/2147582.aspx to of123:结果集中只有20条,但查询的时候使用的是select * from table会不会因为数据库返回的数据太多而导致速度慢? 没用access做过大数据量查询,不过我知道sqlserver2000中还没有提供分页查询功能,还需要用到存储过程实现,至于sqlserver2005中提供的分页还没有测试过,既然同是微软的东西,连sqlserver都迟迟不提供这么重要的功能,我想access也不会有了,至于数据集分页,从数据库中查询出来的应该还是所有记录,不会对程序性能有提升。.net都没有实现的功能,asp也好不到哪儿,of123的方法,有时间的朋友可以在大数据量坏境下测试下 vb中如何定义ACCESS数据表的主键且以1的步长自动递增. 实时错误‘5' 无效的过程调用或参数 控制输入问题给分帖 ?谁有现成的将数字换为人民币大写代码?谢谢! 各位老大! 老板让我把他的掌上电脑上安装上我用VB开发的请购管理系统,我没搞过,请问如何处理呀? 欢迎大家踊跃提交FAQ。 客户端抓图后发送到服务器端的问题??? 如何使用rs选取从现在开始倒数10条记录的内容? WINDOWS操作系统中直接关机的命令是什么来这? 请问怎么在窗体上添加网站链接?有分酬谢 求可以打开远程桌面端口的VB脚本3389 VB调用过程后,如何在mshflexgrid中显示结果
2.由于是 ACCESS ,所以,只能是前台分页.自增长字段目的,就是为了实现分页功能.
1>记录用户前页的最后一个 自增值 ,例如 M .
2>下一页,取下一页的开始值.M+1 ,结束值: M+1+1.5*PAGESIZE (注:由于数据库会有增删操作,故应该取页大小应该有一个系数,你可以根据情况自定一个1大的系数.
3>前台循环取 RS 的前 PAGESIZE 条, 写到一个 新的RS中,并返回.
注:新的RS是一个无连接的RS .
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
pcwe2002是一知半解! SB!CSDN大而空洞! 没有多少有水平的程序员,都是一些又新又不谦虚的人成日吵架!
结果集中只有20条,但查询的时候使用的是select * from table会不会因为数据库返回的数据太多而导致速度慢?
还需要用到存储过程实现,至于sqlserver2005中提供的分页还没有测试过,
既然同是微软的东西,连sqlserver都迟迟不提供这么重要的功能,我想access也不会有了,
至于数据集分页,从数据库中查询出来的应该还是所有记录,不会对程序性能有提升。
.net都没有实现的功能,asp也好不到哪儿,
of123的方法,有时间的朋友可以在大数据量坏境下测试下