Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
2 GAMER (vi.k) 04/09/2002 - 09:22:57
      Re: 2 GAMER (Фдуч) 04/09/2002 - 12:03:37
      Re: 2 GAMER (vi.k) 05/09/2002 - 08:10:49
      Re: 2 GAMER (GAMER) 05/09/2002 - 13:21:59
      Re: 2 GAMER (vi.k) 06/09/2002 - 15:52:27



From: vi.k - 04/09/2002 - 09:22:57
Subject:2 GAMER
-----------------
Я делаю так:

Таймер не использую вообще.
Все данные вывожу в Гриду, которая не хранит данные, а только отображает те,
что я ей сую (TGridView для Delphi и C++Builder)
Формирую запрос на выборку в виде
"SELECT ??? FROM ... WHERE ... ORDER BY ... GROUP BY"

И отправляю этот запрос собственной функции,
которая для начала вместо ??? вставляет COUNT(*).
И узнает сколько же всего записей на данный момент существует.
В Гриде соответственно устанавливаю количество строк
(пользователь сразу видит сколько записей имеется)
- сейчас появилась новая фича SQL_CALC_FOUND_ROWS, но я ей пока не научился пользоваться.

Затем вместо ??? ставлю то, что там и должно быть и добавляю в конец "LIMIT i,n".

Где i - в начале всегда 0,
n - подбираю сам исходя из данных (автоматизировать вычисление n пока не научился).
Вот тебе и первая выборка, которую и отображаю на экране.

В зависимости от того куда юзер крутанул колесо (сдвинул scrollbar
и т.д., и т.п.) показываю очередную порцию данных
(варьирую параметр i в LIMIT из расчёта n/2 выше текущей строки и n/2 ниже),
при этом всегда подправляя по мере
надобности количество строк в выборке/гриде (если юзер пытается увидеть
последние строки, а их там нет или наоборот больше чем надо). По хорошему
тут ещё можно кэшировать данные, параметр i иначе вычислять (в зависимости
от имеющихся кэшированных данных, от направления движения юзера по гриде и т.д.),
делать предупреждающее чтение и т.д., но я это пока делать не научился.
А также проверять на изменения если новая выборка пересекается с прежней
(у меня за правило держать поле TIMESTAMP) - при линейном движении вверх или вниз они
всегда будут пересекаться.

При этом всём программу стараюсь строить таким образом, чтоб пользователь
не сильно расстроился, если запись изменилась или была удалена.
Он должен понять, что он видит данные на какой-то момент, а не те что
реально в базе живут - самый простой способ этого добиться - подойти и
объяснить :-)
Ну а если нужна точность, так есть кнопка "Обновить".

Так что вот - мне пока ни разу не было нужды вставлять таймер.
В массе своей юзер редко может СМОТРЕТЬ на данные, которые сейчас
уже модифицированы. А уж тем более - ими пользоваться.
Вариант такой ни в коем случае не игнорирую. Но и лишний раз
перепроверять не считаю нужным.

Но если такая НЕОБХОДИМОСТЬ всё же возникает, то как мне кажется
обновлять по таймеру данные в моём случае не сильно накладно - тут
главное разумно подобрать параметр n - размер порций.



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
4520



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |