如何在SQL中为MS Access实现分页?

Cod*_*uth 10 sql ms-access pagination

我正在通过OdbcConnection类使用ASP.NET访问Microsoft Access 2002数据库(MDB),尽管速度非常慢,但它运行良好.

我的问题是关于如何在SQL中实现对此数据库的查询分页,因为我知道我可以将TOP子句实现为:

SELECT TOP 15 *
FROM table
Run Code Online (Sandbox Code Playgroud)

但我无法找到一种方法将此限制为偏移,因为使用ROWNUMBER可以使用SQL Server.我最好的尝试是:

SELECT ClientCode,
    (SELECT COUNT(c2.ClientCode)
        FROM tblClient AS c2
        WHERE c2.ClientCode <= c1.ClientCode)
    AS rownumber
FROM tblClient AS c1
WHERE rownumber BETWEEN 0 AND 15
Run Code Online (Sandbox Code Playgroud)

失败的是:

错误源:Microsoft JET数据库引擎

错误消息:没有给出一个或多个必需参数的值.

我无法解决这个错误,但我假设它与确定一个的子查询有关rownumber

任何帮助将不胜感激; 我在谷歌上的搜索产生了无益的结果:(

Adr*_*der 11

如果您希望在MS Acces中应用分页,请使用此选项

SELECT *
FROM (
    SELECT Top 5 sub.ClientCode
    FROM (
        SELECT TOP 15 tblClient.ClientCode
        FROM tblClient
        ORDER BY tblClient.ClientCode
    ) sub
   ORDER BY sub.ClientCode DESC
) subOrdered
ORDER BY subOrdered.ClientCode
Run Code Online (Sandbox Code Playgroud)

其中15是StartPos + PageSize,5是PageSize.

编辑评论:

您收到的错误是因为您尝试在查询的同一级别引用列名分配,即rownumber.如果您要将查询更改为:

SELECT *
FROM (
    SELECT ClientCode,
           (SELECT COUNT(c2.ClientCode)
            FROM tblClient AS c2
            WHERE c2.ClientCode <= c1.ClientCode) AS rownumber                
    FROM tblClient AS c1
)
WHERE rownumber BETWEEN 0 AND 15
Run Code Online (Sandbox Code Playgroud)

它不应该给你一个错误,但我不认为这是你想要的分页结果.