【问题标题】:MS Access LimitMS 访问限制
【发布时间】:2009-10-14 02:55:04
【问题描述】:

在 ms 访问中 mysql Limit 的等价物是什么。 TOP 是不够的,因为我将使用它进行分页。

谢谢

【问题讨论】:

  • 如果您打算使用分页来生成报告,那么您最好使用 ms-access 的报告生成功能。
  • 我想说,如果你需要这个,你使用了错误的数据库引擎,因为这是一个适当有用的功能的环境是 Jet/ACE 大多不合适的环境。

标签: sql ms-access


【解决方案1】:

没有。你最好的办法是添加一个 ID 列作为主键(如果你还没有的话)并通过循环来分块输出:

SELECT * FROM table
 WHERE id >= offset AND id <= offset + chunk_size - 1

直到你得到所有的行。

【讨论】:

  • 哇。如果我没有连接表,那将起作用。还是谢谢
  • 是的,很糟糕。 Oracle 有 ROWNUM; MySQL 有 LIMIT X, Y; Access 无济于事。
  • 即使ID不是连续的,也不能使用TOP chunksize WHERE id &gt; max_id_of_previous_page ORDER BY id吗?
【解决方案2】:

奇怪的是,Microsoft 文档中有几处引用了 Access 数据库引擎的 LIMIT TO nn ROWS 语法:

ACC2002: Setting ANSI 92 Compatibility in a Database Does Not Allow DISTINCT Keyword in Aggregate Functions

About ANSI SQL query mode (MDB)

但是,实际测试似乎证实了此语法在 Access 数据库引擎的发布版本中从未存在过。也许这是 SQL Server 团队想要放入 Jet 4.0 但被 Windows 团队命令回滚的那些功能之一?不管怎样,看来我们必须简单地将其归结为微软不会花时间纠正的错误文档错误:(

如果您需要在服务器**端进行分页,那么我建议您考虑一个功能更强大、具有更好文档的现代 SQL 产品;)

** 在概念上,即:Access 数据库引擎不是服务器 DBMS。

【讨论】:

    【解决方案3】:

    由于这些行似乎没有任何类型的顺序唯一键编号,因此您需要创建一个排名列:How to Rank Records Within a Query

    您需要确定一次将返回多少行 N = (10, 25,100)。

    您需要跟踪用户所在的“页面”以及第一个和最后一个排名的值。

    然后,当您调用下一页时,接下来的 N 行是 > 或

    我确定有一种方法可以计算最后一页、第一页等。

    【讨论】:

      【解决方案4】:

      使用TOP关键字实现类似于Limit语句的分页SQL的唯一方法如下:

      第一步:

      sql = "select top "&LESS_COUNT&" * from (SELECT top "&(PAGE_COUNT*getPage)&" * FROM (SELECT "&COLUMNS&" FROM "&TABLENAME&") AS TBL "&getWhere&getOrderby("asc")&") as TBL "&getOrderby("desc")

      第二步:

      sql = "SELECT TOP "&PAGE_COUNT&" * FROM (" & sql & ") as TBL "&getOrderby("asc")

      总结;您应该重新排序并将结果倒置 3 次。

      【讨论】:

        【解决方案5】:

        将您的项目移植到 PHP 和 MySQL。更好地支持这些类型的操作和查询以及更好的在线文档。作为一名 16 年的资深数据库开发人员,我已经以一种其他任何事物都无法比拟的热情来鄙视 MS Access 和 MS SQL。这完全是由于他们缺乏支持和文档。

        【讨论】:

        • 如果你认为 MS 的文档不如 PHP 和 MySQL,那你就疯了。
        • 您显然从未真正使用过 MS 的文档。作为一个广泛使用 MS 文档以及 PHP 和 MySQL 文档的人,没有任何竞争——MS 胜出。
        • 关于 Access 数据库引擎,文档的状态很糟糕,而且从来没有特别好。它比 mySQL 差吗?是的,原因如下:mySQL 渴望符合 SQL 标准并且已经实现了很好的合规性。至关重要的是,它的文档详细介绍了收敛(和发散)的细节。这样做的好处是 ANSI/ISO 规范非常详细,所以如果一个特性被声明为兼容,我们已经有一个高层次的细节。 Access 数据库引擎完全缺乏这种详细程度,并且总是有:(
        • ...SQL Server 相当不错,IMO。例如,考虑一下:“精度、比例和长度 (Transact-SQL)”(msdn.microsoft.com/en-us/library/ms190476.aspx) 好,实用的细节,我想。对于 Access 数据库引擎的 DECIMAL 数据类型,您肯定不会发现任何细节级别的东西。用户只能通过反复试验自己解决问题,通常是在不知不觉中!
        • 没有提到 Jet/ACE 的文档,只提到了 Access 的文档。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多