Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > отследить изменения в БД


Автор: neosapient 6.9.2007, 13:24
К БД подключены источник данных и приемник.
Мне надо как можно быстрее получить информацию о том, где и какая ячейка изменена.
Идея проверять БД каждую милисекунду и сравнивать с прошлым состоянием хранящимся в памяти мне не подходит.
Как решить проблему?

Автор: Anark1 6.9.2007, 13:34
Триггер.

Автор: neosapient 6.9.2007, 13:55
по подробнее как использовать триггер + в данной ситуации

Автор: Anark1 6.9.2007, 15:04
Я не работал с MS ACCESS. Поэтому приведу пример для InterBase SQL Server (надеюсь в ACCESS реализована поддержка триггеров).
Триггер - это ХП, выполняемая сервером автоматически, как реакция на событие.

Код

CREATE TRIGGER Examp_Trg FOR Examp_Table
ACTIVE AFTER UPDATE POSITION 0
AS BEGIN
     IF (NEW.MY_FIELD1 = OLD.MY_FIELD1) THEN ... 
     IF (NEW.MY_FIELD2 = OLD.MY_FIELD2) THEN ...
     IF (NEW.MY_FIELD3 = OLD.MY_FIELD3) THEN ...
     ...
END


мы создаем триггер Examp_Trg для таблицы Examp_Table, который имеет нулевую приоритетность (порядок выполнения, если существует несколько триггеров) и активируется после модификации записей. Чтобы проверить какое поле было отредактировано используются контекстные переменные OLD и NEW.

Автор: neosapient 6.9.2007, 16:40
Увы, как показал поиск Access не поддерживает триггеры

Автор: Anark1 6.9.2007, 21:24
neosapient,
забей на это убожество (MS ACCESS) ! Ставь что нибудь посерьезнее ... 
Или скажи что поддерживает ACCESS. Потому что я так сразу даже и не знаю как еще можно реализовать поставленную задачу.
Как вариант - написать сервер, который бы обрабатывал все транзакции к БД.

Автор: SenkraD 7.9.2007, 08:38
neosapient, ты через какие компоненты работаеш? Через ADO? А события из серии OnPost, OnEdit не подходят?
ТЕм более, у класса TFiled есть похожие события, кажись.  Плюс, шлянь о свойствах OldValue и NewValue или как-то так (давно не работал с БД)

Цитата(Anark1 @  6.9.2007,  21:24 Найти цитируемый пост)
забей на это убожество (MS ACCESS) ! Ставь что нибудь посерьезнее ... 

Согласен, если это только не причуда заказчика

P.S. Или я не правильно понял вопрос

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)