Russian Qt Forum
Ноябрь 24, 2024, 08:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Совместное использование БД и уведомление о ее изменении  (Прочитано 15574 раз)
Odyssey
Гость
« Ответ #15 : Февраль 21, 2011, 14:05 »

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


Я нуб настолько, что для меня все техники внове и потому сейчас пробую то, до чего удается дотянуться. ))
И - да, спасибо, примерно так и намеревался использовать извещения. )
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #16 : Февраль 21, 2011, 14:09 »

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

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
vladimir_l
Гость
« Ответ #17 : Март 25, 2011, 14:15 »

Однако в то приложение, где была нажата кнопка сигнал никогда не идет.

Столкнулся с такой же проблемой. может кто-нибудь знает как её побороть. Т.е. сигнал не приходит если база была изменена из этого же приложения. У меня изменения в базу вносятся в другом окне, не связанном с тем окном где отображается информация, не хочется реализовывать сигналы в пределах приложения. 
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #18 : Март 25, 2011, 14:19 »

Может, ты в транзакции делаешь и не коммитишь?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
vladimir_l
Гость
« Ответ #19 : Март 25, 2011, 15:12 »

Может, ты в транзакции делаешь и не коммитишь?
Всё разобрался. Дело не в транзакциях. Постгрес не посылает уведомления тому пиду котрорый внёс изменения. В документации по NOTIFY так и написано:
It is common for a client that executes NOTIFY to be listening on the same notification name itself. In that case it will get back a notification event, just like all the other listening sessions. Depending on the application logic, this could result in useless work, for example, reading a database table to find the same updates that that session just wrote out. It is possible to avoid such extra work by noticing whether the notifying session's server process PID (supplied in the notification event message) is the same as one's own session's PID (available from libpq). When they are the same, the notification event is one's own work bouncing back, and can be ignored. (Despite what was said in the preceding paragraph, this is a safe technique. PostgreSQL keeps self-notifications separate from notifications arriving from other sessions, so you cannot miss an outside notification by ignoring your own notifications.)
Записан
chu
Гость
« Ответ #20 : Март 29, 2011, 14:45 »

Смотря что за БД. В некоторых есть notify, на которые можно подписаться.
как быть с mySQL? там нет notify
Записан
vlad-mal
Гость
« Ответ #21 : Апрель 03, 2011, 17:46 »

...Постгрес не посылает уведомления тому пиду котрорый внёс изменения...
Полезная фича. Я когда-то на FireBird боролся с этим.
С другой стороны, когда не смог побороть, то просто стал ее использовать: данные (в пределах зоны отображения, конечно) обновлялись только по получении извещения, неважно, кто их модифицировал - я или кто-то еще.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.104 секунд. Запросов: 23.