![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы с видимостью транзакций. [D5, IB6.x]
NetWanderer © (2002-07-04 11:41:00)Уважаемые знатоки, столкнулся со следующей проблемой : при непостредственном старте транзакции StartTransaction и последующим ее завершением по CommitRetaining(пользуюсь IBX),другие пользователи видят результаты ее работы только после отсоединения-присоединения к БД. В чем может быть дело ? Заранее благодарен.
kaif (2002-07-04 15:34:00) [1]Я насчет Post_event всего лишь идею высказал. Например, если я отображаю нечто на экране, скажем, таблицу customer, то почему бы мне не подписаться на ивенты:
customer_u
customer_d
customer_i
Тогда триггеры таблицы customer могут дать мне понять, что что-то произошло. Правда, номер вставленной другим юзером записи я таким способом не получу. Но мне почему-то кажется, что клиент сам должен принимать решения, что делать. Я бы зажег светодиод по ивенту (три ветодиода Insert, Delete, Update) а рядом поместил бы кнопку Refresh.
Это был бы простой механизм, либеральный по отношению к транзакциям и не дергающий сильно клиентов.
Понятно, что это не та же задача. Это просто другой взгляд на вещи.
Alexandr (2002-07-04 14:40:00) [2]а понятно.
Ну так тож IBX там все не как у людей...
Пора бы привыкнуть...
Johnmen (2002-07-04 14:05:00) [3]Ну вот я, например, считал, что данные параметры - по умолчанию...ан нет...
Alexandr (2002-07-04 13:42:00) [4]а ты попробовал вот это?
kaif © (04.07.02 12:18)
При любом Commit (в т.ч.) при CommitRetaining, если транзакция другого пользователя ReadCommitted nowait, после переоткрытия запроса он увидит новые данные. Следовательно в TIBTransaction у юзеров в Params нет ReadCommitted nowait. Это значение можно установить дважды щелкнув на компоненте TIBTransaction и выбрав из 4 предложенных ReadCommitted.
--------------------------------------------------------------------------------
и что тут как надо? И что должно получиться. Т.е. тут все правильно, но этоже очевидно. А как по-другому-то? Я просто удивился что раньше это кому-то неизвестно было.
Это же естественно.
Johnmen (2002-07-04 13:37:00) [5]>Alexandr © (04.07.02 13:26)
>Объясните мне как вына клиенте знаете какое событие регистрировать?
Если это ко мне вопрос - то я здесь один :)))))
И я не обсуждал вопросов с Post_Event.
Это делал kaif © .
Alexandr (2002-07-04 13:26:00) [6]что получилось? Через параметризованный Post_Event?
Объясните мне как вы на клиенте знаете какое событие регистрировать?
Johnmen (2002-07-04 13:22:00) [7]Вот это самое :
>Johnmen © (04.07.02 12:27)
>>Alexandr © (04.07.02 12:17)
>Сейчас почитаю...
>>kaif © (04.07.02 12:18)
>Позже попробую...:)
Кстати, уже пробежался по статье - честно говоря, ничего нового для себя не почерпнул....
Alexandr (2002-07-04 13:12:00) [8]не понял. Что попробовал? Что начнешь читать?
Johnmen (2002-07-04 13:03:00) [9]Ха ! Получилось наоборот ! Сначала попробовал - все как надо !!!
А теперь только начну читать....
Alexandr (2002-07-04 12:57:00) [10]а с клиента как регистрировать подписку на непонятно какое событие?
Там ведь надо будет полностью текст события указывать?
Или я что-то путаю?
kaif (2002-07-04 12:55:00) [11]>2Alexandr © (04.07.02 12:17)
Прочитал статью.
Мне кажется (может я и неправ), что можно сделать проще, воспользовавшись тем, что в POST_EVENT можно подставить имя события. Я пробовал, у меня такое работает:
/*Процедура, создающая именованные события*/
CREATE PROCEDURE POST_NAMED_EVENT(EVENT_NAME VARCHAR(31))
AS
BEGIN
POST_EVENT :EVENT_NAME;
END
^
С такой процедурой, вероятно, можно обойтись без накопителя изменений. Хотя, честно говоря все это мне не очень нравится. Я боюсь за надежность систем, в которых многое завязано на EVENT.
Johnmen (2002-07-04 12:27:00) [12]>Alexandr © (04.07.02 12:17)
Сейчас почитаю...
>kaif © (04.07.02 12:18)
Позже попробую...:)
kaif (2002-07-04 12:18:00) [13]При любом Commit (в т.ч.) при CommitRetaining, если транзакция другого пользователя ReadCommitted nowait, после переоткрытия запроса он увидит новые данные. Следовательно в TIBTransaction у юзеров в Params нет ReadCommitted nowait. Это значение можно установить дважды щелкнув на компоненте TIBTransaction и выбрав из 4 предложенных ReadCommitted.
Alexandr (2002-07-04 12:17:00) [14]тут читали?
http://fibplus.com.ua/rus/articles/client_synchonize.shtml
А вообще-то надо отучать юзеров от этой привычки
Alexandr (2002-07-04 12:12:00) [15]2Johnmen:
как побороть?
А в чем проблема?
Johnmen (2002-07-04 11:54:00) [16]Да, знакомый эффект...Как побороть с минимальными затратами - вопрос...
Alexandr (2002-07-04 11:45:00) [17]дык другие пользователи в какой транзакции?
Если READCOMMITED? то им запрос переоткрыть надо.
А если RepeatableRead то транзакцию переоткрыть