Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Embarcadero RAD Studio XE5-XE8,10.x(Seattle, Berl

Автор: zealotfan
Дата сообщения: 10.03.2016 06:54
Всем спасибо за ответы. Я решил не усложнять и оставил exe в 4 мб, которое нас очень даже устраивает. Со временем обязательно попробую пошаманить с bpl. Еще интересует вопрос оповещения. У меня при запуске программа проверяет exe на сервере и если exe новый тянет его оттуда и обновляет. Как оповестить всех пользователей о том что необходимо обновиться?(сейчас я это делаю через стороннее приложение типа сетевой аськи)
Автор: SuPriTo
Дата сообщения: 10.03.2016 09:39
zealotfan
При первом запуске выводить сообщение и не давать работать с программой, пока не обновятся. Но это не есть хороший подход.
Автор: ZloyBrawler
Дата сообщения: 10.03.2016 10:16
SuPriTo


Цитата:
При первом запуске выводить сообщение и не давать работать с программой, пока не обновятся. Но это не есть хороший подход.


А что, дать работать старой программе допустим на новой структуре БД - это нормальный подход?
Автор: DmitryKz
Дата сообщения: 10.03.2016 10:30

Цитата:
А что, дать работать старой программе допустим на новой структуре БД - это нормальный подход?

Сравнение некорректно, на мой взгляд - это же база данных; все всегда зависит от конкретных условий, конкретной программы. Даже Майкрософт не запрещает (по крайней мере, пока) работать с Виндой при наличии у них на серверах критических обновлений.
Это все равно что запретить работать, к примеру, с Калькулятором, или Блокнотом, если откажешься обновлять одну из его длл-ок.

Цитата:
Как оповестить всех пользователей о том что необходимо обновиться?

А в чем именно необходимость этого? Я в том смысле, что вы всегда можете отказать в поддержке, если у пользователя не крайняя версия программы.
Автор: zealotfan
Дата сообщения: 10.03.2016 11:25
У меня приложение для работы с базой данных. Как подметил ZloyBrawler старой программе нежелательно работать в новой структуре БД т.к. будут возникать ошибки в формах где используются измененные таблички БД.
DmitryKz
Оповещение как раз нужно для того чтобы не возникали ошибки. т.к. структура БД изменилась, а работающее приложение не знает что нужно обновится.

Автор: DmitryKz
Дата сообщения: 10.03.2016 11:38
Прошу прощения, контекст беседы упустил.
Тогда, наверно, можно и без запроса обновлять, принудительно, при старте, сопроводив соответствующим сообщением.
Автор: Samotek
Дата сообщения: 10.03.2016 11:42
zealotfan
У нас сделано так: при запуске проверяется наличие новой версии и если есть ничего ни у кого не спрашивает, а загружает ее и тогда спрашивает - запустить новую версию или идти домой. При работе программа переодически проверяет наличие новой версии и сообщает о ней в специальном окошке с возможностью пользователем отказаться от обновления или назначит время для повторного напоминания. Естественно в течении рабочего дня никакие обновления структуры базы не производятся.
Автор: SuPriTo
Дата сообщения: 10.03.2016 11:43
ZloyBrawler
Можно сделать 2 вида обновлений обязательные и необязательные. А то я тут пользуюсь программой, которая ни в какую базу данных не лезет, и работает только на локальной машине. И у нее обязательное обновление. Программист отключил нужный функционал и обновил. Вот жопа была. Потом правда снова включил. Но несколько недель пользоваться программой было невозможно.
Серьезные обновления надо заранее анонсировать.
Автор: zealotfan
Дата сообщения: 10.03.2016 14:41
Samotek
При запуске у меня сделано все в точности как у Вас. А вот периодичной проверки новой версии нет. Её делать по таймеру в отдельном потоке или как?
Автор: Samotek
Дата сообщения: 10.03.2016 14:47
zealotfan

Цитата:
Её делать по таймеру в отдельном потоке или как?

Именно так у нас и сделано.
Автор: zealotfan
Дата сообщения: 10.03.2016 14:53
Samotek
А мне бы хотелось, чтобы я нажал на кнопку и у всех пользователей программы вышло окно с надписью типа: Администратор обновил базу данных. Программа перезапуститься через 5...4...3....2....1. Ну и при перезапуске она соответственно обновится.
Автор: Samotek
Дата сообщения: 10.03.2016 14:56
zealotfan

Цитата:
А мне бы хотелось, чтобы я нажал на кнопку

По-моему это неправильно. Но что мешает периодически в программе опрашивать какой-то "флаг" в базе?
Автор: zealotfan
Дата сообщения: 10.03.2016 15:11
Samotek
Просто я не сторонник периодического опроса(в нашем случае по таймеру) т.к. по-моему каждую минуту если все пользователи будут обращаться к серверу для просмотра версии exe, то будет лишняя нагрузка на него. Я хочу чтобы грубо говоря нажал на кнопку и приложение в этот же момент у всех пользователей отреагировало каким либо образом.
Автор: Samotek
Дата сообщения: 10.03.2016 15:15
zealotfan

Цитата:
Просто я не сторонник периодического опроса

С базами по другому не получится. Они обычно работают только по запросу. Может в конкретной СУБД что-то есть, но я об этом не знаю...
Автор: funnyman
Дата сообщения: 10.03.2016 15:17
zealotfan
Просто поставьте себя на место человека, который сидит работает, что-то делает и тут бац, ему показывается окно с обратным отсчетом. Это равносильно тому, как если бы вы получили такое от виндовс, мол я перезагружаюсь для уставноки апдейтов и пофиг,что вы там делаете.
Обновления надо проверять и делать либо при старте программы, либо в самом конце.
Автор: AlexCoRu
Дата сообщения: 10.03.2016 15:26
А СУБД какая?
Автор: zealotfan
Дата сообщения: 11.03.2016 06:50
funnyman
Тут я с Вами соглашусь. Из-за этого и решил посоветоваться с участниками форума. Вижу что много людей использует Delphi и это просто отлично. Жаль только то, что на форумах не сидел раньше
AlexCoRu
Firebird 2.5.2
Автор: AlexCoRu
Дата сообщения: 11.03.2016 08:31

Цитата:
Firebird 2.5.2
У него есть евенты и можно узнать активных пользователей.
Вообще-то, я на рабочей БД, тем более на ходу, структу не меняю.
Автор: jhtiger
Дата сообщения: 11.03.2016 10:47
zealotfan

Можно написать что-то похожее на сервис уведомлений с использованием Indy. Пример работы с Indy есть в комплекте Delphi.
Запуск программы на рабочей станции устанавливается коннект с сервисом. Само собой, сервис должен быть всегда запущен на сервере БД.
Появилось обновление, сервис делает рассылку по клиентам. Сервис по таймеру опрашивает, например, содержимое какой-либо папки на предмет ini файла, который содержит данные об обновлении.
Можно установить флаги, насколько важное обновление:
- несрочное (можно продолжить работу до следующего запуска программы),
- важное
- критическое
ну и т.д.
Автор: zealotfan
Дата сообщения: 11.03.2016 11:42
AlexCoRu
В firebird действительно есть таблица с активными соединениями(MON$ATTACHMENTS). Я могу сделать туда delele и разорвать соединения со всеми, но тогда мой телефон оборвётся от звонков и программа однозначно некорректно закроется у клиента. Буду копать в сторону INDY по совету jhtiger
Автор: AlexCoRu
Дата сообщения: 11.03.2016 13:32
zealotfan, Вы случаем не Налогоплательшик ЮЛ или Документы ПУ пишете?
Автор: KDPoid
Дата сообщения: 11.03.2016 14:32
zealotfan
Вы же не будете менять структуру базы, когда с ней работают пользователи ? Даже если обновление происходит в рабочее время, всё равно оно сопровождается разрывом всех соединений перед изменением структуры базы.

Тогда сценарий такой:
При запуске приложение проверяет новую версию. Если нужно - обновляется. Безальтернативно. Пользователи же работать пришли, а не фотки в инстаграмм постить. "Мне старое приложение привычнее" - не отмаз.

Если обновление структуры базы произошло, когда приложение работает... Происходит разрыв соединения. Приложение изумляется и молча делает реконнект.

При любом коннекте, авария или первый запуск - не важно, первое, что делает приложение - проверяет версию структуры вашей базы. Если номер версии незнаком - выводит пользователю требование обновиться и завершает работу.

И всё красиво. Никто не лезет к базе с периодическими селектами номера версии. Никто не держит постоянно работающих листинеров для оповещения об отключениях, и никто не работает устаревшим приложением с новой структурой базы.
Автор: zealotfan
Дата сообщения: 11.03.2016 15:24
AlexCoRu
Нет. У меня проект связанный с электроэнергетикой уже давно работающий. Просто решил избавится от стороннего приложения оповещающего пользователей о необходимости обновления
KDPoid
Иногда времени на изменение дается часа 3 и естественно я меняю структуру базы в рабочее время(когда работаю пользователи). Я уже сегодня попробовал сделать как вы написали(сделать разрыв соединения). У пользователей вышла ошибка и программа закрылась(у транзакций естественно прошел rollback), а при запуске программа обновилась. Вроде бы всё меня устраивает
Автор: funnyman
Дата сообщения: 11.03.2016 19:04

Цитата:
Иногда времени на изменение дается часа 3

Оно что круглосуточно работает? Если уж делать горячую замену файла/изменения в db, то как мне кажется, перед закрытием коннекта, стоит сохранять текущее состояние. Зависит конечно от критичности данных, которые вводятся, но все же такое аварийное завершение может много нервов оператору поизмотать.
Автор: zealotfan
Дата сообщения: 11.03.2016 19:51
funnyman
Ты приходишь на планёрку с утра в 8 часов и тебе говорят что сделать и чтобы в 11 уже работало. Естественно я изменяю структуру бд на в своей локальной БД, изменяю проект на своём компьютере, кидаю проект на сервер чтобы все могли обновится и меняю структуру БД на сервере. Как только я изменил структуру нужно всех оповестить о обновлении. Теперь я буду всех удалять из firebird насильно. Думаю ничего страшного не произойдет.
Автор: funnyman
Дата сообщения: 11.03.2016 20:03
zealotfan
Да ужж, тогда конечно через дисконнект пользоватлей будет удобней.
Автор: AlexCoRu
Дата сообщения: 11.03.2016 21:41

Цитата:
8 часов и тебе говорят что сделать и чтобы в 11 уже работало
Бывает ) Бывает и наоборот, что в 11 говорят, что должно было работать в 8 )

Цитата:
Теперь я буду всех удалять из firebird насильно. Думаю ничего страшного не произойдет.
Ничего страшного, клиент и без помощи админа может потерять коннект ) Но лучше всё-таки сделать shutdown с возможностью доступа sysdba. В ibexpert есть такое и gfix.
Автор: ZloyBrawler
Дата сообщения: 11.03.2016 22:05
funnyman


Цитата:
Да ужж, тогда конечно через дисконнект пользоватлей будет удобней.


Я конечно понимаю, везде задачи разные, но если я вот так вот просто завершу сеанс расчетчице, которая рассчитывает ЗП и делает отражение ЗП в бух учете за месяц на 800+ человек в 1С ЗУП, то она меня точно не похвалит и другие, кто ждет результатов ее работы.

Больно вольные решения отрубать всех насильно.
Если уж и делать отганичения, то выносить их нужно на некий иной уровень.
Например, если это база данных в которой делают документы, то запрещать брать на редактирование документы пока не перезапустишься и не обновишься, все уже ранее открытые документы так уж и быть дать возможность попытаться записать.

Не знаю чего трястись за лишние обращения в базе данных за проверкой какого либо флага на обновление.
1С в своих решениях делает обработчик, который повешен на таймер, там по тику (длительному по времени тику, не каждую минуту), проверяется модифицирована ли база данных (есть специальная платформенная функция) с момента запуска клиента, если база динамически модифицирована, то рекомендуется выполнить перезапуск. Нет никаких проблем.

Некоторые виды изменений базы данных, все же требуют остановки работы всех клиентов, для этого есть написанные на самом же встроенном языке обработки, которые рассылают оповещение клиентам и по истечении некоторого времени завершают работу клиента со стороны клиента. Так же параллельно на сервере ставится запрет на новые коннекты (админу дается лазейка на подключение с ключевым словом так сказать), пока администратор или кто еще не применит обновления к базе, после чего запреты на коннект снимаются и пользователи получают возможность продолжить работу. Все гуманно.
Автор: AlexCoRu
Дата сообщения: 11.03.2016 23:00
ZloyBrawler, 1С это сервер приложений.
Автор: ZloyBrawler
Дата сообщения: 11.03.2016 23:24
AlexCoRu
Эмммм, 1С это та же программа с такими же коннектами юзеров к базе данных, данные хранятся все в той же MS SQL и иных поддерживаемых 1С.
Изменение базы так же может привести к поломке алгоритмом работающей с ней, потому там при модификациях структуры базы и приходится гонять пользователей, а иного выбора и нет особо. Все направлено на стабильную работу и как правило именно платформа обязывает отрубать юзеров, а иначе не применит изменения к базе. Сначала гонишь юзеров из базы, применяешь изменения, даешь добро на вход. Так как там нет классической установки программа на машины клиентов, то при повторном подключении у юзеров работате последняя версия клиента, ну или правильнее сказать конфигурации, так как клиент там просто исполняющая среда, которой пофиг что за конфигурация в базе крутится.

Ну это все 1С, там все свое, и язык и методика программирования, говорим же сейчас об насильственном отрубании пользователей, это все не хорошо, не нужно ввергать их в шок, так как не все стараются как можно чаще сохранять проделанную работу.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129

Предыдущая тема: Отмена встречи в Outlook из Excel VBA


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.