2009-10-14 3 views
1

Что эквивалентно пределу mysql в ms-доступе. TOP недостаточно, так как я собираюсь использовать его для разбивки на страницы.MS Access Limit

Thanks

+0

Если вы намерены использовать разбиение на страницы с целью создания отчетов, вам лучше использовать функцию генерации отчетов ms-access. – heferav

+0

Я бы сказал, что если вам это нужно, вы используете неправильный движок базы данных, потому что среды, в которых это является надлежащим образом полезной функцией, являются средами, в которых Jet/ACE в основном неприемлемы. –

ответ

2

Поскольку не кажется, что у вас есть какой-либо тип sequencial уникального номера ключа для этих строк, вам нужно создать столбец ранжирования: 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

все. Это будет работать, если у меня не будет объединенной таблицы. Спасибо в любом случае – wnoveno

+0

Да, это отстой. Oracle имеет ROWNUM; MySQL имеет LIMIT X, Y; Доступ не имеет ничего общего. – Tenner

+0

Даже если идентификаторы не являются последовательными, нельзя использовать 'TOP chunksize WHERE id> max_id_of_previous_page ORDER BY id'? – peterchen

3

Любопытно, что есть несколько ссылок в документации Microsoft в виде LIMIT TO nn ROWS синтаксиса для базы данных Access Engine:

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

About ANSI SQL query mode (MDB)

Однако фактическое тестирование, кажется, подтверждает, что этот синтаксис уже никогда существует в версии Release Engine. Возможно, это одна из тех функций, которые команда SQL Server хотела поместить в Jet 4.0, но было заказано откат командой Windows? Как бы то ни было, похоже, мы должны просто положить его на плохую ошибку документации, которую Microsoft не будет тратить время на исправление :(

Если вам нужно сделать разбивку на страницы на стороне сервера **, то я предлагаю вам рассмотреть более способный, современный продукт SQL с лучшей документацией;)

** концептуально, то есть: Database Database Engine не является серверной СУБД.

-1

порт вашего проекта PHP & MySQL. Лучшая поддержка этих типов действий и запросов и намного лучшая онлайн-документация. Будучи 16-летним разработчиком БД, я вырос, чтобы распределить MS Access и MS SQL со страстью, не имеющей себе равных ни в чем другом. Это объясняется исключительно отсутствием поддержки и документации.

+0

Вы совершенно безумны, если считаете, что документация MS уступает PHP и MySQL. –

+0

Вы явно никогда не использовали документацию MS. Как кто-то, кто широко использовал как документацию MS, так и документацию для PHP и MySQL, конкурса нет - MS побеждает. –

+0

Что касается механизма доступа к базам данных, состояние документации плохое и никогда не было особенно хорошим. Это хуже, чем mySQL? Да и вот почему: mySQL стремится соответствовать стандартам SQL и добился значительного соответствия. Речь идет о деталях конвергенции (и расхождения) в документации. Преимущество этого заключается в том, что спецификации ANSI/ISO очень детализированы, поэтому, если функция объявлена ​​как совместимая, у нас уже есть высокий уровень детализации. Механизм доступа к базе данных * полностью * не имеет такого уровня детализации и всегда имеет :( – onedaywhen

0

Единственный способ для того чтобы достигнуть пейджинга SQL, подобный Ограничить заявление с помощью TOP ключевых слов следующим образом:

Первый шаг:

SQL = "выберите верхний" & LESS_COUNT & "* из (SELECT сверху "& (PAGE_COUNT * GetPage) &" * FROM (SELECT "& COLUMNS &" от "& TABLENAME & ") AS TBL" & getWhere & getOrderby ("по возрастанию") & "), как TBL" & getOrderby ("по убыванию")

Второй шаг:

SQL = "SELECT TOP" & PAGE_COUNT & "* от (" & SQL & "), как TBL" & getOrderby ("АСК")

Подводя итог; вы должны переупорядочить и сделать результаты с ног на голову в 3 раза.