Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обновление БД [D7, Yaffil]


Belkova ©   (2005-03-02 17:44:00) 

Мастера Delphi! Подскажите, пожалуйста. Есть БД, с которой одновременно работают несколько пользователей. При внесении изменений одним из них, естественно хотелось бы чтобы это видели все оставшиеся. Выполняю следующим образом, все изменения происходят в рамках транзакции.
IBtransaction.starttransaction;
try
{вызовы ХП}
IBtransaction.commit;
except
IBtransaction.rollback;
end;
Для редактируемых таблиц написаны триггеры,( After Insert,AfterUpdate, AfterDelete)
post_event 'CHANGE_TABLE'
В приложении используется компонент IbEvents.  событие OnEventAlert обрабатывается
if EventName='CHANGE_TABLE' then
begin
 IBQuery.close;
 IBQuery.Open;
end;
В результате данные у других пользователей иногда обновляются, иногда нет. Что можно сделать.


Desdechado   (2005-03-02 19:39:00) [1]

1. event не поймался/не дошел
2. если активна транзакция, то какой может быть Open? Там другие запросы сыплются на сервер, а IB в одной сессии не умеет параллельно запросы выполнять.


Belkova   (2005-03-02 18:27:00) [2]

В том-то и дело что иногда не обновляет. В данный момент обновил.
Почему иногда работает, а иногда нет.


Desdechado   (2005-03-02 18:18:00) [3]

говорит и все равно не обновляет?


Belkova   (2005-03-02 18:14:00) [4]

Поставила в обработчике проверку на database.InTransaction
Говорит, что нет.


Belkova   (2005-03-02 18:07:00) [5]

Да эта ситуация предусмотрена, а чтобы автоматечески все обновлялось без кнопочек, так это желание заказчика.


AndriyKo   (2005-03-02 18:03:00) [6]

/if EventName='CHANGE_TABLE' then
begin
IBQuery.close;
IBQuery.Open;
end;/

Интересно, а если юзер в этот момент редактирует запись или просматривает данные ? Вдруг, ни с того ни с сего - опен-клозе. Эта ситуация предусмотрена ? Лучше при получении эвента взвести какой-нить флаг или кнопочку типа "Обновить" подсветить - пользователь нажмёт, когда захочет.


Desdechado   (2005-03-02 17:55:00) [7]

например, в обработчике event'а проверить database.InTransaction


Belkova   (2005-03-02 17:52:00) [8]

А как это узнать? Изменение записей происходит  до commit, после чего набор данных не переоткрывается.


Desdechado   (2005-03-02 17:48:00) [9]

а не вызывается ли обработка event в момент транзакции записи?


Наверх

Титульная страница Поиск, карта сайта Написать письмо