![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать мгновенно? [D7, MySQL]
FBuilder © (2008-01-16 13:11:00)Есть база данных удаленное на по локальной сетке.
Есть таблица (SQL запрос), которая отображает ее состояние.
табилца отображается пользователю - он ее видит, может по ней пробежаться.
записей порядка 100.
проблема: табилца обновляется по такймеру - ра зв 3 секунды.
сейчас получается что это все занмиает около 250 при апдейте :( У пользователя соответственно гладкого перемещения по таблице - нет - при обновлении все замирает и скрол - дергается.
Вопрос: как добиться более гладкого хождения пользователя по обновляемой таблице?
Mysql 4.0.x, DBExpress, dbx4mysql.dll
?
clickmaker (2008-01-17 15:34:00) [1]я бы с ListView делал
на сервере:
пришел запрос - запись помечаем как измененную или запись добавляем
раз в сек делаем селект типа такого
select blabla from table where Modified = 1
выбранную инфу отдаем клиенту
на клиенте пробегаем по ListView. Если есть ID измененной записи, меняем ей цвет или иконку.
Если нет ID, добавляем строчку, делаем видимой
Потом можно по аналогии с почтовиком: юзер кликнул - update table set Modified = 0 where ID = @ID. Типа прочтенное, больше не беспокоить.
Еще вариант: прямо с сервера, куда заносятся данные как-то оповещать клиента, а потом уже заносить в базу. но тут все зависит от того, как между ними связь организована
ketmar (2008-01-17 15:15:00) [2]есть мнение, что оно изначально криво спроектировано. и мнение такое не у меня одного.
Rater1 (2008-01-17 13:52:00) [3]А ты пойди другим путём.
Возьми StringGrid и заполняй его анализом пришедшего select
по ID какому-нить...
Изменяющуюся запись цветом выделяй на пару секунд, типа поменялась...
Тогда ничего прыгать не будет
Kolan (2008-01-16 19:20:00) [4]Много не определил какая из сабжа
Kolan (2008-01-16 19:18:00) [5]> www.taxi-office.ru
От и скрины
Kolan (2008-01-16 19:17:00) [6]> Я не ошибся я сделал! УРА!
Ура, ты сделал костыль. Покажи для интереса скрин формы с гридом этим, просто чтобы я для себя успокоился
FBuilder (2008-01-16 19:17:00) [7]Всем - спасибо!
FBuilder (2008-01-16 19:16:00) [8]> а как умудряются так часто вводить новые данные? прямая связь с мозгом таксиста?
Прямая связь с жопой таксиста лежит у меня сзади - GPS + датчик наличия пассажиров в салоне, что тоже будет добавляться в эту программу :)
А вообще - если при случае нужно будет что-то подобное - пишите - www.taxi-office.ru
FBuilder (2008-01-16 19:15:00) [9]Я не ошибся - я сделал! УРА!
Без паралельных потоков - все просто и правильно - все грузиться не напрямую в TSimpleDataSet, а в TClientDataSet но через TSQLQuery.
Пока оно не догрузиться, данные в TClientDataSet не изменяться, а соответственно и юзвер будет все видеть нормально без рывков.
Kolan (2008-01-16 18:30:00) [10]> а как умудряются так часто вводить новые данные? прямая
> связь с мозгом таксиста?
Да имхо там только новый добавляются. Видимо диспетчеру звонят, делают заказ он вбивает. А таксистам звонит другая тетка. Вот для неё и прога, она видит вбитую запись и связывается с таксистом Нафих ей при этом видет «номер каротчки» непонятно :)
clickmaker (2008-01-16 18:21:00) [11]
> [43] FBuilder (16.01.08 17:08)
а как умудряются так часто вводить новые данные? прямая связь с мозгом таксиста?
Kolan (2008-01-16 17:16:00) [12]Ты ошибся при проектировании UI так как не понял, что будет делать пользователь интерфейса. А теперь борешься с последствиями.
Раз у них моники широкие чтобы все влезо, то можно пойти дальше приколи купить сервер помощнее
Kolan (2008-01-16 17:14:00) [13]> У тебя на клавиатуре все клавиши всегда нужны? :)
Нет, если бы клава была не из пластика, то некоторые спрятвть было бы неплохо.
Что собссно некоторые и пытаются сделать:
http://www.artlebedev.ru/everything/optimus/
http://www.artlebedev.ru/everything/optimus-tactus/
Правильный_Вася (2008-01-16 17:13:00) [14]оправдывать глупость смысла нет, если тебя не интересует нормальное решение
а с твоим подходом нормального решения нет
напоминает:
нужно выкопать котлован в болоте, но у меня только детский совок и жвачка
но выкопать нужно только ими
как жвачкой проапгрейдлить совок?
FBuilder (2008-01-16 17:08:00) [15]> Я те точно говорю твои 20 полей и не нужны всегда, начал бы ты с этого…
У тебя на клавиатуре все клавиши всегда нужны? :)
Для меня такой разговор будет равносилен этому вопросу :(
Kolan (2008-01-16 17:06:00) [16]Я те точно говорю твои 20 полей и не нужны всегда, начал бы ты с этого
Kolan (2008-01-16 17:05:00) [17]> Основной поток должен не к базе стучаться а к внутреннему
> dataset в котором эти данные уже есть. Но я что-то уже запутался
> как мне их из одного дата сета получит ьв другой :(
Передать в событии например, получил дата сет вызывается событие в котором и передается нужный дата сет.
Я бы его(сам объект) каждый раз создавал, чтобы с синхронизацией не парится
Ты правильно мыслишь, но как подмену дата сета незаметно сделать вот что я не представляю
FBuilder (2008-01-16 17:02:00) [18]>Шо и адрес с именем полностью видны? Или у них Apple cinema 30" моники?
Нет, но широкоформатные.
>Как этот вопрос связан с сабжем?
Так, что удинственный путь, который я вижу - это параделльный поток, который получает всю табилцу, теряет невидимо для пользователя эти 250 мсек, но зато он их потерял - все - их нужно забросить в табилцу только - отобразить уже в основном потоке.
Основной поток должен не к базе стучаться - а к внутреннему dataset в котором эти данные уже есть. Но я что-то уже запутался как мне их из одного дата сета получит ьв другой :(
Kolan (2008-01-16 16:52:00) [19]> Помещаються впритык :(
Шо и адрес с именем полностью видны? Или у них Apple cinema 30" моники?
> Вопросы ка кперебрасывать данные полученные уже внтури приложения
> но из другого потока?
Как этот вопрос связан с сабжем?
FBuilder (2008-01-16 16:48:00) [20]Помещаються впритык :(
Вопросы ка кперебрасывать данные полученные уже внтури приложения но из другого потока?