Microsoft Access和分页大型数据集

时间:2009-10-09 00:03:26

标签: ms-access paging

是否有一种通过直接SQL使用Access数据库分页大型数据集的简单方法?假设我的查询通常会返回100行,但是我希望查询遍历结果,以便它只检索(比方说)前10行。直到我请求接下来的10行才会查询第11-20行。

3 个答案:

答案 0 :(得分:2)

如果您运行排名查询,您将在输出中获得包含升序数字的列。然后,您可以使用BETWEEN...AND子句对此列运行查询以执行分页。

因此,例如,如果您的网页每个都包含10条记录而您想要第三页,那么您可以这样做:

SELECT * FROM MyRankingQuery WHERE MyAscendingField BETWEEN 30 and 39

如何在查询中排名记录
Microsoft support KB208946

答案 1 :(得分:2)

Access数据库引擎不能很好地处理这个问题:专有TOP N语法返回关联,N无法参数化;优化器根本不能很好地处理等效的子查询构造:(

但是,公平地说,这是SQL一般不能很好地处理的事情。这是我考虑动态SQL(颤抖)的少数场景之一。但首先我会考虑使用ADO经典记录集,它具有AbsolutePagePageCountPageSize的属性(顺便提一下,DAO库缺少这些属性)。


您还可以考虑使用Access数据库引擎鲜为人知的LIMIT TO nn ROWS语法。来自Access 2003 help

  

您可能希望使用ANSI-92 SQL   原因如下......

     
      
  • 使用LIMIT TO nn ROWS子句限制查询返回的行数
  •   

可以派上用场吗?

...我的舌头牢牢地嵌入我的脸颊:)这种语法在Access数据库引擎中不存在而且从来没有。相反,它是房子引擎端的Access文档令人震惊的另一个例子。

如果文档存在大量漏洞并且内容无法信任,产品是否适合用途?是Caveat的经纪人。

答案 2 :(得分:1)

我不确定排名如何回答你的问题。此外,我很难想象你为什么需要这个 - 这通常是你在网站上做的事情,以便将检索到的数据分解成小块。但Jet / ACE数据库不是网站后端的理想选择,除非它是严格只读的。

另一个SQL解决方案将使用嵌套的TOP N,但通常需要即时的过程代码来编写SQL。

它也存在关联问题,因为除非在ORDER BY中包含唯一字段,否则如果两条记录与ORDER BY子句中的值相关联,则可以获得11条带有TOP 10的记录。

我并不是说这是一个更好的解决方案,只是一个不同的解决方案。