Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.018 c
14-80246
тихий вовочка
2004-02-04 07:00
2004.02.25
Я стал папой!


14-80109
hatchy
2004-02-03 07:34
2004.02.25
Секундомер...


3-79589
ulyanitsky
2004-01-25 22:09
2004.02.25
Создание структуры БД. Что лучше?


7-80323
pavel_guzhanov
2003-12-08 09:34
2004.02.25
какой монитор установлен в системе


3-79549
Dima
2004-01-30 00:26
2004.02.25
ADO DataSets




   Наверх