Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оперативное информирование :-), Изменение в БД с уведомлением 
:(
    Опции темы
Katerpillar
Дата 19.6.2007, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.6.2007

Репутация: нет
Всего: нет



Народ, не знаю в какой раздел и запостить... Пусть будет в общем...

Есть БД Клиент-сревер. Необходимо мгновенно (если запущено приложение) уведомлять клиента об изменениях в БД, если они касаются его... Напрмер... Введен документ (приказ), определены люди, с которыми этот приказ необходимо согласовать, кого ознакомить. Ответственное лицо меняет статус документа из оформляемого на "на согласовании" или " на ознакомлении" и тут же у соответствующих пользователей должно появится сообщение, типа "У Вас новый документ в папке "на согласование""... Пробовал реализовывать через UTP, посылать, что-то типа служебных слов при изменении статуса (#recheck# например), а у клиента при получении этого слова просто Query.Close, Query.Open... Хер... Коряво. И почему-то не всегда работает в нашем домене... Запросы рабочие (проверено), просто сообщения по UTP отсылаются без проблем...

Может кто подскажет другую идею реализации? Проверять по таймеру совсем уж коряво...
PM MAIL   Вверх
Bose
Дата 19.6.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 9
Всего: 51



Katerpillar, 
завести таблицу в которую писать log последних событий в базе(например "Введен документ  ID=xxx, определены люди, ID=XXX, ID=YYYс которыми этот приказ необходимо согласовать, кого ознакомить. Ответственное лицо меняет статус документа из оформляемого на "на согласовании" или " на ознакомлении"). 

С клиента переодически проверять эту таблицу - не появилось ли нужного документа. После этого обновлять(Query.Close, Query.Open) соответствующие датасеты. 

Какая база-то используется? В Интербейсе например есть механизм уведомлений пользователя о каких-либо событиях(SQL: post_event, компонент: TIBEventAlerter)
PM MAIL WWW Skype   Вверх
Katerpillar
Дата 19.6.2007, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.6.2007

Репутация: нет
Всего: нет



SQL Server 2000... Есть таблица логов... Триггерами туда все пишется... Но ведь придется _периодически_ проверять... А это не вариант - это коряво... 

Вот с Алертер есть в IB... А в ADO+SQL Server такое сотворить можно? Но вряд ли вроде...

Вот как Агент@Mail.ru узнает, что письмо пришло? Ну ведь не по таймеру же...
PM MAIL   Вверх
Rodman
Дата 19.6.2007, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Цитата(Katerpillar @  19.6.2007,  13:18 Найти цитируемый пост)
Ну ведь не по таймеру же

    а как??? через каждый интервал времени проверка идет!

Сервер не должен заботится о рассылке, клиенты должны заботится о получении нужных им данных...
Цитата(Katerpillar @  19.6.2007,  13:18 Найти цитируемый пост)
А в ADO+SQL Server такое сотворить можно?

а при помощи тригерров?!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Bose
Дата 19.6.2007, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 9
Всего: 51



Цитата(Katerpillar @  19.6.2007,  14:18 Найти цитируемый пост)
от как Агент@Mail.ru узнает, что письмо пришло? Ну ведь не по таймеру же...

По таймеру, по таймеру. Масса вещей в приложениях происходит именно по нему smile 

PM MAIL WWW Skype   Вверх
Katerpillar
Дата 20.6.2007, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.6.2007

Репутация: нет
Всего: нет



А вот и не по таймеру... Настроил UTP. Все моментально происходит. До этого не получалось по причине кривых рук. Всем спасибо. Можно закрывать тему.

P.S.: А вообще, таймер в БД - дрянь вещь. Прикиньте каждые, допустим, 5 секунд нагружать сеть передачей таблицы с 3 мио записей... Особенно, если в ней ничего не поменялось.

Добавлено через 8 минут и 27 секунд
Цитата(Rodman @ 19.6.2007,  14:36)
Цитата(Katerpillar @  19.6.2007,  13:18 Найти цитируемый пост)
Ну ведь не по таймеру же

    а как??? через каждый интервал времени проверка идет!

Сервер не должен заботится о рассылке, клиенты должны заботится о получении нужных им данных...
Цитата(Katerpillar @  19.6.2007,  13:18 Найти цитируемый пост)
А в ADO+SQL Server такое сотворить можно?

а при помощи тригерров?!

Я же написал... Триггерами в лог пишутся действия над данными (insert/update, таблица, ключевое поле записи). В саму таблицу пишется информация. Проверять по таймеру лог? Там записей будет больше, чем в самой таблице... Проверять по таймеру таблицу? Так может просто всех пользователей заставить по сети фильмы друг другу качать?

Я понимаю, что сервер не должен заботиться... Вот я и хочу в приложении позаботиться... Но таймер - это сильно для студентов...

ЗЫЖ Все равно, огромное спасибо всем! (А в агенте мейловском не таймер - проверено, и не UTP, конечно, как у меня... Там TCP стандартный... медленный, но верный smile )
PM MAIL   Вверх
Bose
Дата 20.6.2007, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 9
Всего: 51



Цитата(Katerpillar @  20.6.2007,  06:37 Найти цитируемый пост)
P.S.: А вообще, таймер в БД - дрянь вещь. Прикиньте каждые, допустим, 5 секунд нагружать сеть передачей таблицы с 3 мио записей... Особенно, если в ней ничего не поменялось.

Мммм.. а зачем всю таблицу тянуть? Делаешь SELECT только записей со времени последней проверки. Также можно ограничить записи только теми, которые необходимы концретному юзеру. Таких, я думаю будет совсем немного.
PM MAIL WWW Skype   Вверх
Katerpillar
Дата 20.6.2007, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 19.6.2007

Репутация: нет
Всего: нет



Цитата(Bose @ 20.6.2007,  13:01)
Цитата(Katerpillar @  20.6.2007,  06:37 Найти цитируемый пост)
P.S.: А вообще, таймер в БД - дрянь вещь. Прикиньте каждые, допустим, 5 секунд нагружать сеть передачей таблицы с 3 мио записей... Особенно, если в ней ничего не поменялось.

Мммм.. а зачем всю таблицу тянуть? Делаешь SELECT только записей со времени последней проверки. Также можно ограничить записи только теми, которые необходимы концретному юзеру. Таких, я думаю будет совсем немного.

Можно. Сначала смотрим лог, что поменялось со времени последней проверки (храним инфу о последней проверке), потом делаем селект только выбранных по логу записей из таблицы документов, нужных определенному юзеру... И делаем это все время... Вот это вот "все время" меня в таймере и напрягает... 

Я сделал так... В момент смены статуса посылается служебное сообщение по UTP #recheck#. Активные пользователи получают сообщение и делается Close, Open одного запроса. В лог ваще не лезем... Никто, кроме админа БД в лог не лезет.

Кому как нравится... Видимо. 

Сенкс.  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.