Текущий архив: 2003.09.11;
Скачать: CL | DM;
Вниз
Автоматическое обновление грида. Найти похожие ветки
← →
Новенький (2003-08-21 09:47) [0]Я заранее извиняюсь за ламерский вопрос, но раньше имел дело только с локальными базами и одним юзером.
А задача стоит такая - есть база на MySQL. С базой будут работать 3 человека по локалке. Интерфейс с базой - самописная программа (я ее сейчас и пишу), в которой в качестве Грида - EhLib, в качестве DataSet - MyDAC.
Скажем юзер А изменил какую-то запись. Как сделать, чтобы в Гридах юзеров B и C эта запись также автоматически (причем быстро) обновилась? То есть, чтобы юзеры B и C увидели, что внесены изменения сами ничего дополнительно не нажимая.
Копания в конфе, в доках пока ничего не дали. Есть мысли, как это можно устроить через "одно место", но, мне кажется, должны же быть штатные средства для этого в самом гриде или DataSet, или еще где?
Прошу помощи, господа!
← →
Nikolay M. (2003-08-21 09:54) [1]
> должны же быть штатные средства для этого в самом гриде
> или DataSet, или еще где?
Нет, не должны.
> Копания в конфе, в доках пока ничего не дали
Плохо копал. Вопрос (и пара вариантов ответов) избитый.
Не предлагая вариант с обновлением всего DataSet-а по таймеру, скажу, что более-менее "прямо" это реализуется в трехзвенке, особенно под MySQL - там ни на триггеры не повеситься, ни ексепшн вызвать... Как осуществлять обратные вызовы от сервера приложений к клиенту, читай статью Романа Игнатьева на rsdn.
В-общем, либо забей на это, либо делай трехзвенку.
← →
Ann (2003-08-21 09:55) [2]можно конечно сделать обновление по таймеру.. но это будет тормозить работу... может кто что лучше посоветует..
← →
DenK_vrtz (2003-08-21 09:55) [3]>Как сделать, чтобы в Гридах юзеров B и C эта запись также автоматически (причем быстро) обновилась? То есть, чтобы юзеры B и C увидели, что внесены изменения сами ничего дополнительно не нажимая.
Чтобы что-то изменить надо перезапросить данные. Штатные средтва DataSet - Refresh, Close, Open. По каким признакам данные перезапрашивать - тут область фантазии безгранична!
← →
Sergey13 (2003-08-21 09:58) [4]Даже лень писать об этом. 8-) Попробуй поиском на твой вопрос посмотреть. Кратко - не надо этого делать - пусть юзера если надо сами обновляют.
← →
Новенький (2003-08-21 10:10) [5]to Sergey13:
В моем случае - надо. Работа идет с заказами, поэтому менеджеры должны иметь всегда перед глазами адекватную ситуации информацию.
Причем, они сидят в разных комнатах и орать при этом "Ребята, нажмите Релоад!" - глупо. :(
Видимо, пока остается именно проверять по таймеру.
Пока придумал такой алгоритм - при изменении в базе оставляется метка - такой-то юзер изменил такую-то запись.
Раз в секунду приложение ищет такую метку и, если метка оставлена приложением другого юзера, производится обновление. Метка обнуляется.
Если есть другие алгоритмы, буду рад послушать!
← →
Ann (2003-08-21 10:17) [6]
> Новенький (21.08.03 10:10) [5]
тормозить система будет.. а пусть принимая новый заказ менеджер и нажимает кнопочку "обновить" :) все таки не раз в секунду обращение к базе за обновлениями..
← →
Nikolay M. (2003-08-21 10:18) [7]
> Видимо, пока остается именно проверять по таймеру.
О-ооо.. Флаг тебе в руки. Надеюсь, менеджеры и админы сетки тебя убьют не сразу, а дадут помучиться, пока ты будешь рефрешить "раз в секунду" ВСЕ(!) заказы...
> Если есть другие алгоритмы, буду рад послушать!
Nikolay M. © (21.08.03 09:54) [1]
← →
DenK_vrtz (2003-08-21 10:23) [8]Новенький (21.08.03 10:10),
>Причем, они сидят в разных комнатах и орать при этом "Ребята, нажмите Релоад!"
И не зачем так орать! :-) (Это из Виннипуха)
Самовольное обновление - это не есть гуд! Ты сам подумай. Работаешь ты с чем то, тут бац, винда начинает перезанружаться сам посылая тебя и всю твою работу далеко далеко.
Перезагрузилась. Ты вроде опять за работу, а она, хлоп, и опять перезагружаться. Подумай!
Задача может решиться обменами между пользователями элементарным сообщениями об изменениях.
← →
Sergey13 (2003-08-21 10:26) [9]2Новенький (21.08.03 10:10) [5]
>В моем случае - надо.
Это только кажется. 8-)
>Работа идет с заказами
Оригинально. !!! Это неизведанная область применения БД. 8-)
И что, они работают все сразу с одним и тем же заказом? Или все таки с разными?
>, поэтому менеджеры должны иметь всегда перед глазами адекватную ситуации информацию.
Которая меняется прамо таки ежесекундно? Не парь. Трое столько не наработают.
>Причем, они сидят в разных комнатах и орать при этом "Ребята, нажмите Релоад!" - глупо. :(
Ну поставь лампочки с кнопками 8-)
>Видимо, пока остается именно проверять по таймеру.
Это самый "дубовый" метод. Который от работы ВООБЩЕ ни как не зависит.
>Если есть другие алгоритмы, буду рад послушать!
Да дофига их, поковыряй поиском. Каждую неделю этот вопрос.
← →
Vlad (2003-08-21 10:36) [10]Я делал нечто подобное. Только Query создавал в отдельном потоке, где собссно его и рефрешил раз в N секунд, а N - выносил в настройку пользователя.
← →
Zelius (2003-08-21 11:48) [11]Можно еще связать все компы по сетевому протоколу, MailSlots или UDP. Тогда комп сделавший заказ посылает сообщение в сеть, другие его ловят и обновляют данные.
← →
Новенький (2003-08-21 12:11) [12]to Zelius:
Кстати, хорошая идея, спасибо.
to Sergey13:
Стебаться может каждый, но если человек (то есть я) сказал, что это ему нужно, вероятно, это вполне может быть так, не правда ли?
Я ведь описал общую постановку вопроса, на самом деле взаимодействие менеджеров и заказов между собой значительно сложнее, и я не думаю, что кому-то здесь интересно насколько.
Тем более, что сказав про обновление раз в секунду, я имел ввиду просто некий квант времени, зависящий от многих факторов и, кто знает, может быть и от положения звезд на небе. :)
Что касается поиска - я не тот человек, который сначала задает вопросы в конфе, а потом начинает думать. Искал, и не только в конфе, но и в Сети вообще, но вполне может быть, что так как не совсем владею пока терминологией в этой области, задавал не те ключевые слова.
Если подскажешь по каким словам можно найти в этой конфе "имеющиеся каждую неделю такие вопросы" - буду несказанно благодарен.
← →
Sergey13 (2003-08-22 09:00) [13]2Новенький (21.08.03 12:11) [12]
>Стебаться может каждый,
Я стебаюсь (или стеблюсь 8-)? Да ни в жисть.
> но если человек (то есть я) сказал, что это ему нужно, вероятно, это вполне может быть так, не правда ли?
Может быть, а может и не быть. Бывает человек плохо знает свою СУБД и хочет поэтому ее поменять. А это неверно. Вот например - у тебя в качестве СУБД MySQL. Почему? Она уже есть или ты просто выбрал ее для новой разработки. Если второе, то ИМХО выбор не совсем удачен, т.к. в MySQL нет многих полезных штучек типа тригеров/ХП. А для учетной задачи - это незаменимая весчь.
>Я ведь описал общую постановку вопроса, на самом деле взаимодействие менеджеров и заказов между собой значительно сложнее, и я не думаю, что кому-то здесь интересно насколько.
Ну дык опиши полнее. Может и ответы будут конкретнее. А то "работа с заказами". Да тут 9 из 10 с ними работа(ют/ли). Может ты с заказами на убийство работаешь, тогда конечно... 8-)
>Тем более, что сказав про обновление раз в секунду, я имел ввиду просто некий квант времени, зависящий от многих факторов и, кто знает, может быть и от положения звезд на небе. :)
Во первых откуда я знаю что ты имел ввиду? Во вторых когда я говорил про "независимость от работы" я говорил про то, что даже если с запущеной программой в данный момент никто не работает, она все равно будет тупо чего то там проверять и обновлять мешая остальным.
>Что касается поиска - я не тот человек
>Если подскажешь по каким словам можно найти в этой конфе "имеющиеся каждую неделю такие вопросы" - буду несказанно благодарен.
Ну например на слово "обновление" поиск выдал штук 15 веток и примерно половина из которых "ПРО ЭТО". И это я так понимаю без поиска в архиве.
Так что
"Ищущий, да обрящет" (с) не моё.
← →
Игорь Ч (2003-08-22 09:19) [14]Можно ссылки на измененные записи кидать в отдельную тыбличку, тогда не так напряжно будет ее опрашивать. А я бы вообще сделал табличку юзеров. Юзер, вносящий изменения в базу, ставит флажок напротив себя. А через 7 секунд снимает его. Остальные юзера раз в 5 секунд опрашивают таблицу. Если хоть один флажок есть - обновить таблицу.
← →
Sergey13 (2003-08-22 09:27) [15]2Игорь Ч © (22.08.03 09:19) [14]
>Если хоть один флажок есть - обновить таблицу.
А на фига. Юзер №1 изменил запись с ID=1 а юзер №2 смотрит на запись с ID=4596745324. Нафига ему обновляться?
← →
Nikolay M. (2003-08-22 10:09) [16]
> Sergey13 © (22.08.03 09:27) [15]
> 2Игорь Ч © (22.08.03 09:19) [14]
> >Если хоть один флажок есть - обновить таблицу.
> А на фига. Юзер №1 изменил запись с ID=1 а юзер №2 смотрит
> на запись с ID=4596745324. Нафига ему обновляться?
Не говоря уже о накладных расходах установки/снятия флажка и негарантированности чтения/записи за 5 и 7 секунд соответственно. Имхо, можно попробовать свой протокол обмена с сервером создать на основе UDP. Когда при изменении записей остальным клиентам передаются только изменения, потому что рефрешить все данные - это самоубийство.
← →
Mixa4 (2003-08-22 10:34) [17]2Новенький
просто когда некий "новенький" задает "избитый" вопрос про "Автоматическое обновление грида", в 9 из 10 случаев ему это не необходимо и лучший для него выход оказывается повесить обновление на кнопку, что тебе и посоветовали умные люди. И ты пока не обосновал необходимость автоматического обновления, я так подозреваю что тебе просто юзер так задачу поставил - нужно чтоб автоматически... Ну так на то он и юзер...
Ну а если просто "нужно" - ищи сам, инфы действительно полно, как-то, знаешь ли, не хочется рассказывать человеку то, что потом наверняка окажется ему нафиг ненужным!
← →
Danilka (2003-08-22 10:51) [18]Старые войны очередного Новенького со всем остальным миром об одном и том-же.
Надо одну подобную ветку сохранить где-нибудь и всем давать ссылку на нее.
← →
dez (2003-08-22 11:38) [19]а еще можно сделать галку "обновлять аффтоматически" и если юзер ее врубит, то нехай обновляет. потом он поймет, что ето лажа и вырубит ;)
← →
Danilka (2003-08-22 11:46) [20]dez © (22.08.03 11:38)
сделать галку можна. но не советую ее делать на рабочем столе - может войти шеф и будут неприятности.
лучше вечером, дома.
да и не галку лучше а наташку.
← →
VAleksey (2003-08-22 11:53) [21]Нет, ну что вы господа ! О чем речь, будет автоматическое обновление ... по кнопке на панели инструментов.
> Новенький (21.08.03 12:11) [12]
1) Ему это нужно. А не читал в основной, многие спрашивают как уменьшить размер ПУСТОГО приложения. Это им нужно?! Да, поскольку ты новенький, то можешь и просто не понимать, что это тебе НЕ нужно и почему не нужно, а также почему это просто НЕВОЗМОЖНО сделать. А для объяснения этих причин нужно прочитать толстые книги по теории БД и не только.
2) Насчет постановки вопроса. Ты думаешь мы тут все чем занимаемся? И твоя задача наверняка решалась местными обитателями не раз.
PS
Просьба не воспринимать это как "наезд", а прочитать и разобраться.
← →
Игорь Ч (2003-08-22 11:54) [22]Грубый все-таки программисты народ. Лучше бы новенький сказал насколько объемная база, да количество юзеров, может там вообще 100 записей на 3 человека, тогда пущай себе обновляет по таймеру и без всякой головной боли.
← →
Sergey13 (2003-08-22 11:59) [23]2Игорь Ч © (22.08.03 11:54) [22]
>Грубый все-таки программисты народ
Но справедливый. Щас и тебе на орехи достанется. 8-)
← →
Игорь Ч (2003-08-22 12:03) [24]Уже досталось :) кому-то не понравился вариант с таблицой юзеров :))) (ладно согласен, решение скользкое)
← →
MsGuns (2003-08-22 13:31) [25]>Игорь Ч © (22.08.03 12:03) [24]
> (ладно согласен, решение скользкое)
Еще бы ! С галкой-то и шефом впридачу
Страницы: 1 вся ветка
Текущий архив: 2003.09.11;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.01 c