crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

RazrFalcon
  опции профиля:
сообщение 29.1.2013, 1:58
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Имеется база firebird и триггер вида:

CREATE OR ALTER TRIGGER MyTest FOR CONTACTS 
  ACTIVE 
  AFTER INSERT OR UPDATE OR DELETE
  AS BEGIN
  POST_EVENT ('CONTACTS_NOTIFY_' || NEW.ID);
END
Проблема в том, что не понятно как объяснить qt, что нотификация переменная строка, а не постоянная? Или qt не может с такими событиями работать?
То есть, если бы я написал просто "CONTACTS_NOTIFY" - то все работает отлично, но мне нужно так же получать и новый id вместе с сигналом.

PS: это все нужно, что бы после изменения базы не перезагружать всю модель снова в клиент, а только изменившиеся строки. Возможно есть другой метод, но я его не нашел.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 3.2.2013, 15:56
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


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

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

-- 2 --
Если используешь сигнализацию на уровне БД/Приложения (т.е. из хранимой процедуры), то может понадобится вспомогательная таблица.

У меня (в процессе разработки систем сбора данных) появилась привычка, делать таблицу, которую я обзываю - "Летопись".
Т.е. ни в каких таблицах я не держу полей типа - штамп времени (со встроенным типом данных - timestamp).
А делаю таблицу:
id | timestamp | where | what
В эту таблицу, все тригерры и ХП обязаны заносить текущие дату-время, т.е. отмечать штамп времени всех событий.
а в другие таблицы помещаются Id-шники из этой таблицы.

поле "where" у меня содержит имя объекта БД (имя таблицы или ХП, но не тригера, т.к. он привязан к таблице)
поле "what" даёт некое описание события (тут нужно придумать правило, что туда писать).

Можно использовать эту вспомогательную таблицу для определения того, что изменилось в БД.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 15.7.2025, 19:47