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

Вниз

Блокирование строки таблицы на время редактирования   Найти похожие ветки 

 
STX   (2006-07-17 15:02) [0]

Добрый день.

FIBPlus + Firebird 2.0

При вызове FIBDataSet.edit, текущая запись автоматом блокируется (poProtectedEdit) от редактирования др. пользователями на время работы транзакции. Но, насколько я знаю такая транзакция нежелательна, т.к. может оказаться слишко длительной.

Я решил использовать для INSERT, UPDATE, DELETE - хранимые процедуры. Но вот проблема - не могу понять как в данном случае заблокировать запись. Ведь пока юзер редактирует значения, кто-нить может вообще удалить запись.


 
StriderMan ©   (2006-07-17 15:08) [1]

можно сделать

UPDATE ТАБЛИЦА SET ПОЛЕ = ПОЛЕ WHERE ID = ЗНАЧЕНИЕ

и не делать Transaction.Commit..


 
STX   (2006-07-17 15:10) [2]

Да, но тогда транзакция опять может оказаться активной на длительное время.


 
DrPass ©   (2006-07-17 15:12) [3]


> Но, насколько я знаю такая транзакция нежелательна, т.к.
>  может оказаться слишко длительной.

А какие у тебя еще есть варианты? Ты ж не всю таблицу блокируешь


 
DrPass ©   (2006-07-17 15:12) [4]

...я надеюсь :)


 
StriderMan ©   (2006-07-17 15:19) [5]

..пришло на ум:

сделать триггер, который будет подтягивает ключевое поле строки из какой-нибудь вспомогательной таблички типа LOCKLIST. Соответственно при INSERT"е UPDATE"е и DELETE будет проверяться не изменяется ли строка, которая заблокирована.
Или я велосипед изобретаю? может такое уже есть?


 
STX   (2006-07-17 15:22) [6]


> StriderMan ©   (17.07.06 15:19) [5]
> ..пришло на ум:

------> вилосипед :)
---------------------------------------


 
DrPass ©   (2006-07-17 15:22) [7]


> StriderMan ©   (17.07.06 15:19) [5]

А смысл? Стандартная транзакция read_commited + rec_version, и больше ничего не нужно


 
StriderMan ©   (2006-07-17 15:24) [8]


> DrPass ©   (17.07.06 15:22) [7]
> А смысл? Стандартная транзакция read_commited + rec_version,
>  и больше ничего не нужно

понятное дело, я и сам так делаю всегда. А вот автору ветки не нравится...


 
STX   (2006-07-17 15:28) [9]

Параметры транзакции
write
nowait
rec_version
read_committed



> понятное дело, я и сам так делаю всегда. А вот автору ветки
> не нравится...

Например: Если два пользователя одновременно решили отредактировать одну и туже строку. 1-й изменил+подтвердил. 2-й редактирует уже старые записи, +подтвердил = может получится косяк в НД


 
DrPass ©   (2006-07-17 15:53) [10]


> Если два пользователя одновременно решили отредактировать
> одну и туже строку. 1-й изменил+подтвердил

Первый начал изменять, залочил запись. Второй ждет. Первый подтвердил, послал event, второй обновил у себя и меняет что ему нужно


 
Sergey13 ©   (2006-07-17 16:19) [11]

> [9] STX   (17.07.06 15:28)
> Например: Если два пользователя одновременно решили отредактировать
> одну и туже строку. 1-й изменил+подтвердил. 2-й редактирует
> уже старые записи, +подтвердил = может получится косяк в
> НД

Если 2 юзера одновременно вручную редактируют одну запись - это скорее всего, ИМХО, недоработка проектирования + плохая организация труда в конторе. Подобные изменения (например обновление наличия товара на складе) желательно делать короткими транзакциями, не зависящими от медлительности юзера (например через тригер).


 
Desdechado ©   (2006-07-17 16:52) [12]

> Если 2 юзера одновременно вручную редактируют одну запись
Поддерживаю. Это называется "бардак". Как в организации труда, так и в головах.
Не, конечно, такие ситуации бывают, но это нетипичная ситуация. По моим прикидкам, не более 5%.



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

Форум: "Начинающим";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.01 c
2-1153396795
RobinBad
2006-07-20 15:59
2006.08.06
Чтение из файла по строкам


15-1152677702
DimonS
2006-07-12 08:15
2006.08.06
Тут есть электронщики? Или может кто так подскажет?


3-1148922065
alpha5
2006-05-29 21:01
2006.08.06
Странная ошибка


2-1153049491
spogi
2006-07-16 15:31
2006.08.06
Нумерация


2-1153036383
qwe777
2006-07-16 11:53
2006.08.06
Форматнуть диск или как снести ОС





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский