Локировка в Forms

sonik:)
Дата: 04.12.2007 17:05:03
Создаю простейшую форму.Запускаю ее в двух сессиях.В первой редактирую запись, но не сохраняю, а просто делаю перезапрос.Во второй сессию пытаюсь редактировать, но неполучается так как залочина.Думаю было бы более логично Forms снимать локировку после перезапроса.
Вопрос в следующем.Как это сделать грамотно?
Goldminer
Дата: 04.12.2007 20:00:18
sonik:)
Думаю было бы более логично Forms снимать локировку после перезапроса.
Вообще-то, он так и делает... Что у Вас возвращает system.form_status в первой сессии? Ну и версия для полноты картины.
sonik:)
Дата: 04.12.2007 20:50:03
Версия Forms 6.0
Ну то что они так работаю я уже понял.Просто как то некрасиво получается.Сделали перезапрос, при этом на вопрос сохранить ли запись ответили нет...а запись все равно держим...
Я так понимаю до момента пока не закомитим что либо или не выйдем из формы.
Ну решение наверное самое простое, что пришло в голову процедура rollback и вызывать ее на сервере.

system.form_status полагаю, что change. Уже из дома пишу.....
mcureenab
Дата: 04.12.2007 22:10:23
Блокировки строк БД снимает только commit или rollback, других вариантов СУБД не предоставляет, соответственно и Forms runtime тут ничего не может сделать.
Nikolay****
Дата: 05.12.2007 12:15:46
mcureenab
Блокировки строк БД снимает только commit или rollback, других вариантов СУБД не предоставляет, соответственно и Forms runtime тут ничего не может сделать.



Ну почему же, если фомсы ставили savepoint перед локировкой, а потом в случае если оператор делал перезапрос то делал rollback к точке.Ну конечно же это актуально при работе форм в разных сессиях иначе можно чего нибудь лишнее откатить.
OraDen
Дата: 05.12.2007 12:59:35
sonik:)
Создаю простейшую форму.Запускаю ее в двух сессиях.В первой редактирую запись, но не сохраняю, а просто делаю перезапрос.Во второй сессию пытаюсь редактировать, но неполучается так как залочина.Думаю было бы более логично Forms снимать локировку после перезапроса.
Вопрос в следующем.Как это сделать грамотно?
Например, у вас есть несколько блоков, вы поправили записи в двух блоках, далее в одном из них делаете перезапрос, он изменен (на измененных записях установлена блокировка), формсы спрашивают сохранять или нет, вы говорите - нет, блок очищается без сохранения и записи перезапрашиваются. Второй блок остается измененным (измененные записи второго блока заблокированы), если бы был сделан rollback была бы нарушена логика работы второго блока. Можете перед выполнением запроса очищать форму, только не забудьте про другие блоки, в том числе и управляющие :)

Form Builder help
If you use a ROLLBACK or COMMIT statement in a trigger or a form-level procedure, Form Builder releases all locks.
Form Builder interprets a ROLLBACK statement as a CLEAR_FORM built-in with no arguments.
It interprets a COMMIT statement as a COMMIT_FORM built-in
andrey_anonymous
Дата: 05.12.2007 13:43:03
Nikolay****
если фомсы ставили savepoint перед локировкой, а потом в случае если оператор делал перезапрос то делал rollback к точке.

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