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

Вниз

Многопользовательский режим   Найти похожие ветки 

 
freeman82   (2004-06-09 09:08) [0]

Здравствуйте.
В приложении с помощью TQuery делаем запрос на выборку,получаем НД.Затем скажем пользователь A,выбирает запись и открывает ее для редактирования,а в этот момент пользователь B удаляет эту запись.Как бороться с такими ситуациями?


 
Соловьев ©   (2004-06-09 09:11) [1]

Транзакции


 
Silver Alex ©   (2004-06-09 09:18) [2]


> Соловьев ©   (09.06.04 09:11) [1]

то есть перед редактированием открываем транзакцию, а потом закрываем?Интересное решение.А если, например, другой пользователь перед твоим редактированием удалил эту запись?Ни как не бороться в таких ситуациях, да и вообще какая здесь может быть борьба если среда многопользовательская.Другое дело когда при изменении одной записи идет изменение\добавление записей еще в других таблицах и все это является одной операцией , тогда транзакции


 
Johnmen ©   (2004-06-09 09:24) [3]

А с кем/чем борьба ?


 
Соловьев ©   (2004-06-09 09:24) [4]


> Ни как не бороться в таких ситуациях, да и вообще какая
> здесь может быть борьба если среда многопользовательская

Бороться можно и нужно. Все зависит от задач, надо внимательно изучить предметную область и решить такой конфликт:

> A,выбирает запись и открывает ее для редактирования,а в
> этот момент пользователь B удаляет эту запись

1-й вариант - А должен открывать транзакцию с блокировкой, тогда В только прочитать сможет, а иногда и того не сможет(смотря в какой транзакции он будет смотреть).
2-й вариант - Возможно такая ситуция. что А и В будут открывать набор данных в транзакции с одним уровнем изоляции - тогда просто при сохранении А получит ошибку, что такой записи нет. Возможно такое поведение и нормально для задачи. ИМХО, гадать на кофейной гуще не мое дело. Все должен решить разработчик. А решить проблему можно.


 
ЮЮ ©   (2004-06-09 09:26) [5]

А зачем 1-й пользователь собрался редактировать запись, которая, по мнению 2-го, вообще не должна существовать? Пусть уж пользователи разбираются, кто прав, а кто нет, а ты просто обработай эту ситуации и скажи: "вы так долго коррекировали запись, что её уже удалили"


 
Johnmen ©   (2004-06-09 09:29) [6]

>ЮЮ ©   (09.06.04 09:26) [5]

"вы так долго коррекировали запись, что её уже состарилась и померла"

:)


 
Соловьев ©   (2004-06-09 09:30) [7]


> [6] Johnmen ©   (09.06.04 09:29)

супер :))))) надо будет такое написать :)))))


 
Silver Alex ©   (2004-06-09 09:39) [8]


> Бороться можно и нужно. Все зависит от задач, надо внимательно
> изучить предметную область и решить такой конфликт:

сгласен все зависит от конкретной задачи, но обьясни мне разницу :
А открывает набор данных, далее
1-й вариант - А открывает транзакцию изменяет запись , закрывает транзакцию.В удаляет эту запись.Записи нет
2-й вариант - сначала В удаляет эту запись.А ее выбирает на изменение, изменяет и сохраняет, но записи уже нет
3-й вариант-А ее выбирает на изменение,в это время В удаляет эту запись, А ее изменяет и сохраняет, но записи уже нет

Запись удаляется в любом случае, для чего здесь транзакция?
ИМХО транзакции нужны когда идет ряд действий, которые являются одной операцией, чтобы в случае неудачи откатить все действия или подтвердить.


 
Johnmen ©   (2004-06-09 09:42) [9]

>Silver Alex ©   (09.06.04 09:39) [8]

Они, тр-ии, есть, даже если ты (или кто другой) про них ничего не знает или не видит или не управляет...
:)


 
Silver Alex ©   (2004-06-09 09:48) [10]


> Johnmen ©   (09.06.04 09:42) [9]

в Ineter Base они есть "даже если я (или кто другой) про них ничего не знает или не видит или не управляет", но не [MSSQL], тем более не в явном виде.Или ты тоже перед редактированием открываешь а после закрываешь транзакции?Вот от тебя не ожидал


 
Соловьев ©   (2004-06-09 09:50) [11]


> 1-й вариант - А открывает транзакцию изменяет запись , закрывает
> транзакцию.В удаляет эту запись.Записи нет
> 2-й вариант - сначала В удаляет эту запись.А ее выбирает
> на изменение, изменяет и сохраняет, но записи уже нет
> 3-й вариант-А ее выбирает на изменение,в это время В удаляет
> эту запись, А ее изменяет и сохраняет, но записи уже нет

говорить без уровня изоляции транзакций для А и В глупо.


 
Соловьев ©   (2004-06-09 09:51) [12]


> Или ты тоже перед редактированием открываешь а после закрываешь
> транзакции?

за тебя это сделали разработчики компонет доступа.


 
Silver Alex ©   (2004-06-09 09:55) [13]


> Соловьев ©   (09.06.04 09:51) [12]

ты переобуваешься в воздухе, если в компонентах доступа это ,по твоему мнению это реализовано, тогда зачем ты советовал открывать транзакцию при изменении записи?


 
Соловьев ©   (2004-06-09 09:56) [14]


> тогда зачем ты советовал открывать транзакцию при изменении
> записи?

чтобы ею управлять


 
freeman82   (2004-06-09 10:01) [15]

>Соловьев ©
Пользователи работают уже c результатом запроса SELECT,а форме редактирования используются значения из уже полученного НД.И если форма открыта 5 мин какие тут транзакции.


 
Johnmen ©   (2004-06-09 10:04) [16]

>Silver Alex ©   (09.06.04 09:48) [10]

Транзакции, они неотъемлемая часть любого SQL сервера. И ЛЮБАЯ работа с БД не может идти вне контекста тр-ии. Как она стартована/управляется, явно или нет, дело десятое...

>ты тоже перед редактированием открываешь ...

:))) Пишущую? Нет, конечно.


 
Silver Alex ©   (2004-06-09 10:04) [17]


> freeman82   (09.06.04 10:01) [15]
> какие тут транзакции.

а чтобы управлять ними :)


 
Silver Alex ©   (2004-06-09 10:07) [18]


> :))) Пишущую? Нет, конечно.

ну а нафиг тогда эти реплики,
мы говорим про явные транзакции, а ты мне начинаешь встегивать про то как работают SQL сервера.


 
Kadr   (2004-06-09 10:08) [19]

http://alice.stup.ac.ru/~dvn/uproc/books/bd_pushnikov/dblearn10.html

по-моему все расписано достаточно понятно


 
Johnmen ©   (2004-06-09 10:08) [20]

>мы говорим про явные транзакции

Мы - это кто ?
И где видно, что про явные ?


 
Silver Alex ©   (2004-06-09 10:14) [21]


> И где видно, что про явные ?

а ты внимательней читай, Джони


 
Alexandr   (2004-06-09 10:16) [22]

Johnmen, видишь, он прикалывается над тобой. А ты повелся.


 
Johnmen ©   (2004-06-09 10:28) [23]

>Alexandr   (09.06.04 10:16) [22]

Да, наверное...:)

А тебя давно не было видно. Рад, что вернулся. Кстати, зарегистрируйся, а то ник быстро приберут...:)))


 
Alexandr ©   (2004-06-09 10:39) [24]

они что, опять регистрацию поменяли?


 
Johnmen ©   (2004-06-09 10:40) [25]

Нет. Просто БД регистрации падала...:)


 
Alexandr ©   (2004-06-09 10:41) [26]

так, ладно регистрация прошла успешно.
А я тут проездом :)
так, посмотреть чего новенького... вот баннер про allegro дюже занятный и сама эта система тоже...
Так что не зря зашел :)


 
freeman82   (2004-06-09 11:45) [27]

Интересное решение
http://www.sql.ru/forum/actualthread.aspx?bid=20&tid=7031



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

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

Наверх




Память: 0.53 MB
Время: 0.029 c
1-1087875404
Andrey V.
2004-06-22 07:36
2004.07.04
RadioButtons as RadioGroup


6-1083934129
Denis_ada
2004-05-07 16:48
2004.07.04
прилож. кл.–серв. для работы с файлами и папками на удал.машине


14-1086971417
cyborg
2004-06-11 20:30
2004.07.04
По телеку идёт финальный концерт "Фабрика звёзд"


1-1087128338
European
2004-06-13 16:05
2004.07.04
Шаг сетки в TChart


11-1076241489
mmn
2004-02-08 14:58
2004.07.04
Зависание при изменении TabOrder в TKOLMemo