Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.029 c
3-1086593173
3APA3A
2004-06-07 11:26
2004.07.04
Есть ли в Paradox е функция now()


8-1079626237
kalista
2004-03-18 19:10
2004.07.04
MediaPlayer


14-1087058594
AZ
2004-06-12 20:43
2004.07.04
Upgrade hardware & setup Win98


1-1087407379
M@jor
2004-06-16 21:36
2004.07.04
Обработчик для прокрутки


3-1086872890
mr
2004-06-10 17:08
2004.07.04
СТАЖ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский