Транзакции в приложении
Модератор: kdv
Транзакции в приложении
Приложение - работа кассы в обслуживании клиентов.
Есть блюда, которые покупают, в табличке поле CntDish, кторое указывает сколько купили.
Весь день у юзера висит окошко с перечнем блюд, он выбирает блюдо, устанавливает кол-во и нажимает печать чека. Печатает, запрос обнуляет CntDish и так со след. клиентом.
Вопросы.
1. Как лучше оформить работу транзакций, если бухгалтер на др. ПК меняет цену блюда и т.п.
2. Отключение клиента происходит, если окно выбора висит, а действия не выполняелись около часа-полтора?
3. Схема обнуления смущает?
Есть блюда, которые покупают, в табличке поле CntDish, кторое указывает сколько купили.
Весь день у юзера висит окошко с перечнем блюд, он выбирает блюдо, устанавливает кол-во и нажимает печать чека. Печатает, запрос обнуляет CntDish и так со след. клиентом.
Вопросы.
1. Как лучше оформить работу транзакций, если бухгалтер на др. ПК меняет цену блюда и т.п.
2. Отключение клиента происходит, если окно выбора висит, а действия не выполняелись около часа-полтора?
3. Схема обнуления смущает?
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
нефиг висеть столько.2. Отключение клиента происходит, если окно выбора висит, а действия не выполняелись около часа-полтора?
www.ibase.ru/devinfo/keepalive.htm
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
1. Обыкновенно с транзакциями, как в букваре написано... То что постоянно висит у оператора перед глазами запускаешь в рид онли рид_коммитит транзакции. При переоткрытии запроса он увидит автоматом все что закоммичено на других клиентах. Рефрешь можно приурочить к пробитию чека, положить пимпочку "Обновить", обновлять по таймеру или эвентами, тут уж на месте сориентируешься.
2. Зачем клиента отключать?
3. Нипониль...
2. Зачем клиента отключать?
3. Нипониль...
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Ну и пусть себе висит, если на нем только рид онли транзакция активна вред от него минимальный.kdv писал(а):нефиг висеть столько.2. Отключение клиента происходит, если окно выбора висит, а действия не выполняелись около часа-полтора?
www.ibase.ru/devinfo/keepalive.htm
А пишущую транзакцию стартовать когда оператор уже сформировал весь обед/ужин/завтрак и жмакнул пимпочку "Пробить чек", вот тут стартуем пишую транзакцию пишем все скопом и коммитим ее.
Выставляем количество купленных блюд, потом обнуляем поле, после печати чека.Ivan_Pisarevsky писал(а):1. Обыкновенно с транзакциями, как в букваре написано... То что постоянно висит у оператора перед глазами запускаешь в рид онли рид_коммитит транзакции. При переоткрытии запроса он увидит автоматом все что закоммичено на других клиентах. Рефрешь можно приурочить к пробитию чека, положить пимпочку "Обновить", обновлять по таймеру или эвентами, тут уж на месте сориентируешься.
2. Зачем клиента отключать?
3. Нипониль...
UPDATE DISH_SELECT SET CNT_DISH =0 WHERE CNT_DISH<>0;
Меня напрягает этот момент, т.е. юзер каждый раз, когда выделяет блюдо для покупки с кол-вом обновляет таблицу!
Потом запрос проверяет блюда с CNT_DISH > 0 и их печатет с суммами. Вот так.
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
>Меня напрягает этот момент, т.е. юзер каждый раз, когда выделяет блюдо для покупки с кол-вом обновляет таблицу!
-Доктор, когда я делаю ТАК, мне больно...
-А Вы ТАК не делайте!
Ну так не делай так, считай в обычный стринггрид данные и закрой транзакцию, потом юзер проставил колоночку цифирей и жмакнул "пробить чек", проходишься по стринггриду формируешь пишущий запрос, стартуешь транзакцию, исполняешь запрос, коммит. далее все сначала.
Как один из вариантов решения.
-Доктор, когда я делаю ТАК, мне больно...
-А Вы ТАК не делайте!
Ну так не делай так, считай в обычный стринггрид данные и закрой транзакцию, потом юзер проставил колоночку цифирей и жмакнул "пробить чек", проходишься по стринггриду формируешь пишущий запрос, стартуешь транзакцию, исполняешь запрос, коммит. далее все сначала.
Как один из вариантов решения.

А что предложите делать, если они работают с 8, а в 9-30 только клиенты приходят?! А послеобеденное время?!kdv писал(а):нефиг висеть столько.2. Отключение клиента происходит, если окно выбора висит, а действия не выполняелись около часа-полтора?
www.ibase.ru/devinfo/keepalive.htm
Если окно висит, заставка там, или еще что - около часа, может ли закрыться коннект?
вопросы странные. коннект клиента к БД - это сокет. В виндах есть настройки, которые определяют время жизни неактивного сокета. Если время истекает, ВИНДЫ принудительно закрывают сокет.
Соответственно, решение этой проблемы, если это для тебя проблема, целиком и полностью в твоих руках. Или ты конфигурируешь keepalive, как в статье. Или ты анализируешь неактивность пользователя и через некоторые интервалы "дергаешь" сервер пустопорожним запросом (пусть даже нечто вроде isc_database_info).
Или, после неактивности пользователя корректно закрываешь коннект, с сообщением пользователю, что его время безделья истекло.
Или ....
Я бы вообще - отслеживал время неактивности пользователя, и писал это в лог, или сообщал на сервер. А потом бы или штраф за безделье, или поувольнять часть, или ...
Соответственно, решение этой проблемы, если это для тебя проблема, целиком и полностью в твоих руках. Или ты конфигурируешь keepalive, как в статье. Или ты анализируешь неактивность пользователя и через некоторые интервалы "дергаешь" сервер пустопорожним запросом (пусть даже нечто вроде isc_database_info).
Или, после неактивности пользователя корректно закрываешь коннект, с сообщением пользователю, что его время безделья истекло.
Или ....
Я бы вообще - отслеживал время неактивности пользователя, и писал это в лог, или сообщал на сервер. А потом бы или штраф за безделье, или поувольнять часть, или ...

Я тоже за решение проблем на управленческом уровнеkdv писал(а):вопросы странные. коннект клиента к БД - это сокет. В виндах есть настройки, которые определяют время жизни неактивного сокета. Если время истекает, ВИНДЫ принудительно закрывают сокет.
Соответственно, решение этой проблемы, если это для тебя проблема, целиком и полностью в твоих руках. Или ты конфигурируешь keepalive, как в статье. Или ты анализируешь неактивность пользователя и через некоторые интервалы "дергаешь" сервер пустопорожним запросом (пусть даже нечто вроде isc_database_info).
Или, после неактивности пользователя корректно закрываешь коннект, с сообщением пользователю, что его время безделья истекло.
Или ....
Я бы вообще - отслеживал время неактивности пользователя, и писал это в лог, или сообщал на сервер. А потом бы или штраф за безделье, или поувольнять часть, или ...

Ответы ясны и думаю, что тема исчерпана.