Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 710

/ вопрос закрыт /

Доброго времени суток, уважаемые эксперты!
Использую MS Access 2003. Есть база. Нужно ограничить число выводимых строк в запросе, скажем, выводить не более 10 записей. Как это сделать? Хорошо бы воспользоваться стандартным конструктором запросов, а не использовать SQL (хотя, если по-другому нельзя, то можно и SQL).

Егор Вопрос закрыт (ответы не принимаются, мини-форум закрыт)

Вопрос задал: Егор (статус: 10-ый класс)
Вопрос отправлен: 29 января 2010, 08:07
Состояние вопроса: закрыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 29 января 2010, 23:06; участников в обсуждении: 2.
Егор

Егор (статус: 10-ый класс), 29 января 2010, 08:29 [#1]:

всё, нашёл :)
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 29 января 2010, 11:46 [#2]:

Раз нашёл - отпишись :-)

А вообще, я конструктор запросов не люблю - там иногда нужную конструкцию затруднительно найти. Хотя при составлении больших запросов иногда с его помощью и проще.
Егор

Егор (статус: 10-ый класс), 29 января 2010, 21:40 [#3]:

Хм...
Вот ещё бы я сам себе бы ответ послал, а потом и оценку поставил - вот лепота была бы...
:)))))))))))))))

Ладно. Суть в следующем. Такие служебные слова. как LIMITS или ROWNUM Access не поддерживает. Поэтому приходится идти другим путём.
В режиме конструктора запросов вверху (на панели инструментов) есть выпадающий список. Там по умолчанию выбран пункт "Все". Вот там можно выбрать (или ввести самому) количество строк, которые нужно выводить. Ну или можно указать в процентах от общего количества строк.
В SQL при этом вставляется ключевое слово TOP после SELECT. Пример (пять первых попавшихся строк из таблицы клиентов):
SELECT TOP 5 *
FROM clients;

Но! Этот подход не работает (вернее работает криво), если в запросе участвуют несколько таблиц, групповые операции, или сортировка - ORDER BY (а может, лишь что-то одно из этого всего). Поэтому там приходится делать запрос уже в режиме SQL и исходный запрос обрамлять в отдельный SELECT. Пример (та же таблица клиентов, но записи отсортированы по полю возраста - age):
SELECT TOP 5 *
FROM [SELECT *
      FROM clients ORDER BY age];

вот так, вкратце
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 29 января 2010, 23:06 [#4]:

пятёрку мне, пятёрку! :)
и приз за самый лучший вопрос и ответ месяца :)
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.

7 апреля 2011, 20:03: Вопрос закрыт (решение принял автор вопроса — Егор): какой же я умный, однако! :)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:58
Выполнено за 0.03 сек.