Збір на FPV! Спільнота Стерненка
  • Автор теми Автор теми crghome
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 09.09.2010
Повідом.: 139
Возник вопрос. Для некоторых он очень прост, а у меня проблема. Есть DB с тысячами записей. Выборка происходит на стороне клиента через прогу. Сам запрос не важен, допустим что он стандартный на выборку всех полей из Представления. Необходим сам принцип вывода. Задача заключается в следующем, необходимо выводить по 20 (допустим) записей используя DataSet. Форма имеет кнопки предыдущий - следующий. При кликаньи на них происходит вывод следующих записей или предыдущих (собственно простой способ отображения информации в нете). Разработанный мною запрос очень плох. Кто то может написать необходимый запрос, или хотя бы подсказать направление.
 
У меня сервер MSSQL, в нем такой функции нет. Мой запрос выглядит так (где IND_ - индексы начала и конца выборки, задаются программно):
Код:
SELECT a.T, a.E
FROM TE AS a
WHERE  a.id not  in  (
select top IND_Вeg  b.id
from te b
order by b.t
) AND a.id in (
select top IND_Еnd  c.id
from te c
order by c.t
)
order by a.T
Проблема в том, что он делает три запроса - нагружает трафик. Вот и подумалось - может кто может подсказать, чтото более конкретное.
 
Если я правильно понял, это называется "пейджинг (paging)". Вот ссылка:
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
 
Перепиши запрос с использованием exists - скорее всего будет работать существенно быстрее. Версия с IN работает всё-таки не совсем оптимально.
 
Выборка происходит на стороне клиента через прогу.
Налицо полное непонимание принципов работы СУБД.
"Выборка на стороне клиента" означает что клиент получает ВСЮ базу и на своей стороне отбирает нужные ему записи. Тогда возня с запросом не имеет смысла.
 
Налицо полное непонимание принципов работы СУБД.
"Выборка на стороне клиента" означает что клиент получает ВСЮ базу и на своей стороне отбирает нужные ему записи. Тогда возня с запросом не имеет смысла.

ну чего ты хочешь?
он же пишет на ЛЮБОМ языке программирования.
"мы все учились понемногу чему-нибудь и шопопало"
 
"Выборка на стороне клиента" означает что клиент получает ВСЮ базу и на своей стороне отбирает нужные ему записи. Тогда возня с запросом не имеет смысла.
Вах, Дарагой! Как я был глупп. Я то всю сознательную жизнь думал, что получаю доступ к базе. Ты мне открыл глаза на мою не простительную ошибку. Все пойду искать ответ в книгах.
А собственно прикольный вырисовывается механизм. Допустим SELECT в DBGrid. Мы грузим себе на машину базу размером в 50 метров. Затем исправляем одну букву и сохраняем, при этом база грузится назад на сервер проверяется что изменено и сохраняется (тот же ATRER). В это время, когда курсор Edit, второй человек не может загрузить базу, ведь она закрыта, а нет он загружает, и еще много много кого так же грузят базу (мягко говоря давно не актуальную). И после всех изменений, сервер долго и нудно думает из сотни вернувшихся баз, какая же правдивая.
Да ладно все это гон. Ты совершенно прав.

он же пишет на ЛЮБОМ языке программирования.
Пишу только на Delphi. Сталкивался с Си++, Java, HTML, CSS, VB. И в этом ничего странного нет.
 
Вах, Дарагой! Как я был глупп. Я то всю сознательную жизнь думал, что получаю доступ к базе. Ты мне открыл глаза на мою не простительную ошибку. Все пойду искать ответ в книгах.
Научись правильно выражать свои мысли. То что ты "всю сознательную жизнь думал" - знаешь только ты, твои тараканы в голове и твои штатные телепаты. А наши телепаты как обычно в бессрочном неоплачиваемом отпуске. Так что мы довольствуемся написанным - а написана тобой херня.
 
Научись правильно выражать свои мысли. То что ты "всю сознательную жизнь думал" - знаешь только ты, твои тараканы в голове и твои штатные телепаты. А наши телепаты как обычно в бессрочном неоплачиваемом отпуске. Так что мы довольствуемся написанным - а написана тобой херня.
Гений и не должен понимать дурака, ты же гений?
 
Зачем "гений"? На твоем фоне можно сразу начинать с фразы "Да будет свет!"
Давай "прольем свет".
Во первых ""Выборка на стороне клиента" означает что клиент получает ВСЮ базу и на своей стороне отбирает нужные ему записи." - это файл-серверная технология. На каждой машине стоит сервер и получая базу происходит отбор необходимых записей (используется с Microsoft Access, Paradox, dBase, FoxPro, Visual FoxPro).
При клиент-серверной технологии мы через драйвер получаем доступ к БД, и при помощи запроса отбираем необходимые нам записи на сервере. Таким образом получаем только те записи которые нас интересуют, но не всю базу данных.

Более конкретнее здесь.
 
Во! Тебя немножко позаганяешь стебом - ты начал читать.
Теперь внимание вопрос: совет читать не википедию а нормальные книжки по СУБД ты примешь в чистом виде или опять надо постебаться? ;)
 
Назад
Зверху Знизу