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

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

Проблемы с видимостью транзакций. [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 то транзакцию переоткрыть


Наверх

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