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

Вниз

Проверка на клиенте?   Найти похожие ветки 

 
Evgen   (2004-01-29 19:10) [0]

Уважаемые мастера Delphi помогите советом плиз...
Классическая задача:
Есть склад,
2 клиента создают одновременно расходную накладную, при этом обращаются на склад за одной и той же позицией, пока документ не создан, изменения на складе не произойдут, и другие клиенты их не увидят, но каким образом второму клиенту узнать, что первый уже выбрал для себя эту же позицию, и взял себе несколько единиц товара, но ещё не создал документ.?
таймер? Временная таблица?


 
hirlik   (2004-01-29 19:48) [1]

Разберитесь с уровнем изолированности транзакций


 
Sergey_Masloff   (2004-01-29 19:51) [2]

так как вопрос классический - классический и ответ. Оптимистические и пессимистические блокировки. Оптимистическая ты берешь данные и пытаешься потом сохранить. Если кто-то уже успел их поменять - отлуп. Пессимистическая - только собравшись смотреть блокируешь то что смотришь от изменений.


 
Evgen   (2004-01-30 13:11) [3]

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


 
Deniz ©   (2004-01-30 13:29) [4]

А если через вторую транзакцию в другую таблицу записать что-то вроде ИД будущего док-та(позже поясню для чего и откуда), ИД Товара, Кол-во, ДатаВремя блокировки(можно по default на сервере). И остатки на складе считать с учетом этой таблицы, причем определить время(например 1 час), на которое часть товара блокируется, и по прошествии этого времени, просто игнорировать запись. В это время клиент, который начал заполнять документ(часа то ему хватит?) заносит ИД будущего док-та, ИД и кол-во товара в вспом. таблицу, при удачном проводке документа снимает со склада кол-во и удаляет запись из всп. таблицы. Если клиент подвис, то через час эта запись уже никому не помешает, а ночью :))) чистить вспю таблицу! Не совсем конечно, но ... может будет толчок к новым мыслям :)


 
Reindeer Moss Eater ©   (2004-01-30 13:42) [5]

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


 
Zz_   (2004-01-30 14:05) [6]

>>Если рукавиц на складе осталось меньше, чем запрошено в
>>документе - откатывай транзакцию

Хватай сколько есть и коммить, пока другие не увели



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

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

Наверх




Память: 0.48 MB
Время: 0.076 c
14-80152
dmk
2004-02-01 00:34
2004.02.25
HELP!!!


4-80366
Opryshok
2003-12-17 13:53
2004.02.25
Как изменить размер контрола посылкой месседжа?


3-79562
Alexei
2004-01-29 13:18
2004.02.25
Проблема с передачей данных в хранимую процедуру


14-80176
@ac
2004-01-31 08:05
2004.02.25
У кого есть опыт переписки с журналистами, редакторами, ведущими


1-79734
p-s
2004-02-12 15:37
2004.02.25
Отловить нажатие Esc в проекте