是否有一种通过直接SQL使用Access数据库分页大型数据集的简单方法?假设我的查询通常会返回100行,但是我希望查询遍历结果,以便它只检索(比方说)前10行。直到我请求接下来的10行才会查询第11-20行。
答案 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经典记录集,它具有AbsolutePage
,PageCount
和PageSize
的属性(顺便提一下,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的记录。
我并不是说这是一个更好的解决方案,只是一个不同的解决方案。