Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.09.11;
Скачать: [xml.tar.bz2];

Вниз

Автоматическое обновление грида.   Найти похожие ветки 

 
Новенький   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.01 c
1-33684
Ау
2003-08-28 23:39
2003.09.11
Выравнивание в РичЕдит


1-33623
som
2003-08-29 13:04
2003.09.11
TShellTreeView


14-33783
ИМХО
2003-08-23 02:40
2003.09.11
Смертная казнь in USA


14-33726
Basja
2003-08-25 09:49
2003.09.11
IRQ


1-33598
AlexPul
2003-09-01 13:30
2003.09.11
Консольные приложения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский