Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.13;
Скачать: CL | DM;

Вниз

Работа механизма транзакций в InterBase   Найти похожие ветки 

 
PrettyFly ©   (2002-12-17 15:49) [0]

Запускаю 2 одинаковых приложения (с InterBase), в одном удаляю элемент A из таблицы, в другом добавляю элемент B, которой внешним ключём связан с A(т.е. нарушаю целостность из различных транзакций). Я всегда думал, что в таком случае механизм транзакций автоматически исправляет ошибки и позволяет продолжить работу, но приложение виснет... что делать?


 
Prooksius ©   (2002-12-17 15:55) [1]

Deadlock, похоже...
www.ibase.ru читай, весь раздел Девелоперу/Транзакции.


 
Johnmen ©   (2002-12-17 15:57) [2]

"Никто за тебя ничего не сделает !"
Лучше руководствоваться таким принципом и самому обрабатывать ошибки...


 
Andriano ©   (2002-12-17 16:00) [3]

Ненадо никогда транзакции на запись открывать для browser-инга и жить станет легче.


 
Johnmen ©   (2002-12-17 16:08) [4]

>Andriano © (17.12.02 16:00)

М-да.. И к чему это было сказано ?


 
PrettyFly ©   (2002-12-17 16:09) [5]

Там по смыслу оба клиента должны вносить изменения. в данном же случае сервер должен был определить, что A - удалён. И просто не добавлять B. Как без этого может работать сетевая прога?


 
Johnmen ©   (2002-12-17 16:22) [6]

>PrettyFly © (17.12.02 16:09)

Так он и не будет добавлять !


 
PrettyFly ©   (2002-12-17 16:29) [7]

Понятно, что не будет, но мне надо сделать так, чтобы при этом ещё и приложение не висло :)


 
Andriano ©   (2002-12-17 16:34) [8]

> Johnmen ©

Я о разделённых транзакциях. Просмотр в транзакции на чтение, а запись длиться миллисекундами в транзакции на запись. CommitRetaining тогда не к чему. Так как Read Transaction не закрывается.
В FIB это поддерживается. А в остальных можно делать запросом, составляемым динамически.


 
Johnmen ©   (2002-12-17 16:37) [9]

Вот там, где виснет, опоясываешь try ... except ... end
В чем проблема ?


 
PrettyFly ©   (2002-12-17 16:43) [10]

try ... except ... end - это зло, попытка вместо исправление ошибок, закрыть на них глаза...


 
Johnmen ©   (2002-12-17 16:45) [11]

>Andriano © (17.12.02 16:34)

И что ? Причем здесь это ?
Кто-то из нас явно не понял вопроса...И есть предположение, кто...:)


 
FreeLancer ©   (2002-12-17 16:51) [12]


> PrettyFly © (17.12.02 16:43)
> try ... except ... end - это зло, попытка вместо исправление
> ошибок, закрыть на них глаза...

Это не зло, а как раз механизм для обработки ошибок. А ситуация, о которой вы тут спорите в нормальных условиях должна вызвать DeadLock. Если его нет, значит кто-то кого-то обманывает...


 
Johnmen ©   (2002-12-17 18:20) [13]

>FreeLancer © (17.12.02 16:51)
>...значит кто-то кого-то обманывает...

Точно ! Все вокруг врут друг другу !!! :)))
Даже утверждая про зло...


 
Сергєєв Володимир   (2002-12-17 22:37) [14]

Я это так решил.

Если какая-то таблица - справочник, то есть есть ссылки на ее столбцы из других таблиц, то во время посмотра если прозводится редкатирование, вставка или удаление, транзакция тут же завершается. Затем стартует заново и набор данных переоткрывается.
Есть триггеры у этой таблицы, рассылающие мессаги. Если твоя клинтская прога ловит эту мессагу, то набор данных переоткрывается.

При самой заваленной сетке на 10МБит (с учетом того, что директор с бухгалтером и товароведом в этот момент играют в Кваку) нужно вставить в дочернюю таблицу данные и удалить из родительской так, чтобы поймать DeadLock, примерно с точностью до 0,1 секунды, что очень трудно(хотя, как показала практика, возможно). Но с другой стороны, возникает иллюзия, что пользователи работают с одной таблицей, а не с ее локальными копиями в рамках их транзакций, т.к. изменения отображаются незамедлительно у всех.

Заодно в IBEvents напиши че-нить, чтобы когда они поймают события изменения в родительской таблице, в дочернюю уже нельзя было вставить лажевые данные.

Johnmen прав, никто ниче за тебя делать не будет.


 
Prooksius ©   (2002-12-17 23:17) [15]

2 Сергєєв Володимир (17.12.02 22:37)
Все это более-менее работает при небольшом кол-ве юзеров.
При 100 юзерах ты заимеешься видеть на своем экране моргание от постоянных рефрешей или просто не сможешь работать.

P.S. А где обещаный подарочек за QReport??? :)))))))

2 PrettyFly © (17.12.02 15:49)
У тебя, как мы поняли, DeadLock.
Поэтому поставь при update параметр транзакции nowait.
Тогда у тебя прога будет вываливаться с ошибкой типа Master record missing или что-то в этом роде.


 
Сергєєв Володимир ©   (2002-12-17 23:20) [16]

2 Prooksius ©
В четврег будет, ОК? Извини, тут приболел немного и не было
меня давно.



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

Текущий архив: 2003.01.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
4-37447
SemFLY
2002-11-23 22:32
2003.01.13
Ловушка WH_Keyboard…


4-37430
Ваня Пупкин
2002-11-24 12:59
2003.01.13
Мастакам COM в Delphi


14-37274
hatchy
2002-12-25 15:10
2003.01.13
Незнаю какую тему писать.......


7-37405
Pegas
2002-11-02 12:46
2003.01.13
Как обойти HASP-1C


3-36990
First_May
2002-12-19 09:50
2003.01.13
TIBDataSet...