Вниз
Скачать: CL | DM;

Обновление БД   Найти похожие ветки 

 
Belkova ©   (2005-03-02 17:44) [0]

Мастера 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 17:48) [1]

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


 
Belkova ©   (2005-03-02 17:52) [2]

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


 
Desdechado ©   (2005-03-02 17:55) [3]

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


 
AndriyKo   (2005-03-02 18:03) [4]

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

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


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

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


 
Belkova ©   (2005-03-02 18:14) [6]

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


 
Desdechado ©   (2005-03-02 18:18) [7]

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


 
Belkova ©   (2005-03-02 18:27) [8]

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


 
Desdechado ©   (2005-03-02 19:39) [9]

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



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.024 c
1-1110895989
Alex Romanskiy
2005-03-15 17:13
2005.03.27
Как уменьшить картинку.


1-1110800950
lehich
2005-03-14 14:49
2005.03.27
имя файла без расширения


3-1109097567
Nesterov
2005-02-22 21:39
2005.03.27
Доступ к БД по сети клиентского приложения


3-1109362678
ali_tash
2005-02-25 23:17
2005.03.27
как войти в базу FireBird если не знаеш пароля ?


1-1111039806
OlegM
2005-03-17 09:10
2005.03.27
Помогите код из VBA для Excel перевети на Delphi




   Наверх