![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обновление БД [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 в момент транзакции записи?