2009-10-14 148 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」)

總結;您應該重新排序並將結果顛倒三次。