Как я реализую разбиение на страницы в SQL для Доступа MS?

Немного OT, но превращение входа включения - выключения с препроцессором является определенно субоптимальным в C++. Существуют хорошие инструменты входа как Apache log4cxx, которые являются открытым исходным кодом и не ограничивают, как Вы распределяете свое приложение. Они также позволяют Вам изменять регистрирующиеся уровни без перекомпиляции, иметь очень низко наверху, если Вы становитесь выходящими из системы, и даете Вам шанс повернуть выходить из системы полностью в производстве.

10
задан Codesleuth 14 December 2009 в 12:25
поделиться

2 ответа

Если вы хотите применить пейджинг в 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

, где 15 - StartPos + PageSize , а 5 - Размер страницы .

ИЗМЕНИТЬ для комментария:

Вы получаете ошибку, потому что вы пытаетесь сослаться на имя столбца, назначенное на том же уровне запроса, а именно 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

, он не должен выдавать вам ошибки, но я не думаю, что это тот результат, который вам нужен.

11
ответ дан 3 December 2019 в 22:00
поделиться

См. ответ astander для исходного ответа, но вот моя окончательная реализация, которая учитывает некоторые правила парсера ODBC ( для первых 15 записей после пропуска 30):

SELECT *
FROM (
  SELECT Top 15 -- = PageSize
  *
  FROM
  (
   SELECT TOP 45 -- = StartPos + PageSize
   *
   FROM tblClient
   ORDER BY Client
  ) AS sub1
  ORDER BY sub1.Client DESC
 ) AS clients
ORDER BY Client

Разница в том, что мне нужно, чтобы разбиение на страницы работало при сортировке по имени клиента, и мне нужны все столбцы (ну, на самом деле только подмножество, но я разбираюсь в этом в самый внешний запрос).

3
ответ дан 3 December 2019 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: