2009-10-14 150 views
1

在ms访问中,等同于mysql Limit。因为我打算将它用于分页,所以TOP是不够的。MS访问限制

谢谢

+0

如果您打算使用分页来生成报表,那么最好使用ms-access的报表生成功能。 – heferav 2009-10-14 09:26:34

+0

我想说,如果你需要这个,你使用的是错误的数据库引擎,因为这是一个适当有用的功能的环境是Jet/ACE最不适合的环境。 – 2009-10-15 03:46:59

回答

2

因为它不显示您有任何类型的这些行序贯唯一的密钥数量,你需要创建一个排名列:How to Rank Records Within a Query

您需要在时间,以确定有多少你行将返回N =(10,25,100)。

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

然后,当您为下一页进行调用时,它可能是接下来的N行或> <第一行和最后一行(取决于用户是前一页还是下一页)。

我敢肯定有一种方法来计算最后一页,第一页,等等

4

没有一个。最好的办法是通过循环通过添加一个ID列作为主键(如果你不已经有一个)和块输出:

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

,直到你得到的所有行。

+0

aww。如果我没有连接的表格,这将起作用。无论如何,谢谢 – wnoveno 2009-10-14 03:46:36

+0

是的,它很糟糕。 Oracle有ROWNUM; MySQL有LIMIT X,Y;访问没有任何帮助。 – Tenner 2009-10-14 04:14:12

+0

即使ID不是连续的,也不能使用'TOP chunksize WHERE id> max_id_of_previous_page ORDER BY id'? – peterchen 2009-10-14 13:01:17

3

奇怪的是,有微软文档中的LIMIT TO nn ROWS语法Jet数据库引擎的几个引用:

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。

-1

端口项目以PHP MySQL的&。更好地支持这些类型的操作和查询以及更好的在线文档。作为一名16年资深数据库开发人员,我已经发展到以其他任何东西无法比拟的激情来展现MS Access和MS SQL。这完全是由于他们缺乏支持和文件。

+0

如果您认为MS的文档不如PHP和MySQL,那么您完全疯了。 – 2009-12-08 03:49:06

+0

你显然从来没有真正使用MS的文档。作为广泛使用MS的文档和PHP和MySQL文档的人员,没有比赛 - MS胜出。 – 2009-12-08 03:50:10

+0

至于Access数据库引擎,文档状态不好,从来没有特别好。它比mySQL差吗?是的,原因如下:mySQL渴望符合SQL标准并取得了很好的合规性。至关重要的是,它的文档详细说明了融合(和分歧)的细节。这样做的好处是ANSI/ISO规格非常详细,所以如果一个功能被声明为符合规范,我们已经有了很高的细节。 Access数据库引擎*完全*缺乏这种级别的细节,并且总是有:( – onedaywhen 2009-12-08 09:28:44

0

只有才达到类似的分页SQL使用TOP关键字限制声明方式如下:

第一步:

SQL = “选择顶” & LESS_COUNT &“* FROM(SELECT TOP “&(PAGE_COUNT * GETPAGE)&” * FROM(SELECT “&柱&” FROM“& TABLENAME & ”)作为TBL“ & getWhere & getOrderby( “ASC”)& “)作为TBL” & getOrderby( “降序”)

第二步:

SQL = “SELECT TOP” & PAGE_COUNT & “* FROM(” & SQL & “)作为TBL” & getOrderby( “ASC”)

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