15.08.2003, 12:16 | #1 |
Участник
|
Не работает selectForUpdate()
Добрый день.
Использую Axapta 3.0 В Dev. Guide написано: A record can be selected for update, either by using the forUpdate keyword in the select statement, or by using the selectForUpdate method on tables. На практике столкнулся с тем, что метод selectForUpdate() не работает. Например, если написано так: PHP код:
Если же написать PHP код:
Может кто-нибудь объяснить, почему так? И что делать надо, если запись не выбрана для изменения, а удалить (изменить) ее надо? |
|
15.08.2003, 13:57 | #2 |
----------------
|
selectForUpdate
selectForUpdate() замечательно работате, когда его используют до select-а, например в методе find() на любой таблице.
Чтобы изменить запись, которую выбрали без forUpdate можно сделать еще один запросик по ключевому полю, но уже с forUpdate. |
|
16.08.2003, 22:49 | #3 |
Administrator
|
Повторю еще раз, что, по моему мнению, прозвучало у Wamr не слишком внятно:
selectForUpdate блокирует для изменения весь курсор (таблицу) и он не будет работать, если уже проведен какой-то select (лучше считать, что selectForUpdate сбрасывает результаты select'а - это, конечно, не так, но для понимания это будет лучше). Резюме: неправильно: select .... selectForUpdate() правильно: selectForUpdate() select...
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
18.08.2003, 15:54 | #4 |
Участник
|
Если я правильно понял...
пусть мне пришла параметром запись, которую вычитали без forUpdate и я хочу ее удалить. Тогда я должен написать что-то вроде PHP код:
|
|
18.08.2003, 16:44 | #5 |
Участник
|
Это не дикость, а механизм управления блокировками.
Если выбрать запись без forUpdate, то нет гарантии, что другая транзакция не апдейтит в тот же самый момент нашу запись. |
|
18.08.2003, 17:01 | #6 |
Участник
|
Вообще-то я имел ввиду то, что нельзя написать [t.selectForUpdate()] вместо [select forupdate * from t where t.recId==t.recId]
Насчет Цитата:
Если выбрать запись без forUpdate, то нет гарантии, что другая транзакция не апдейтит в тот же самый момент нашу запись.
|
|
18.08.2003, 17:24 | #7 |
Участник
|
Все правильно, но при условии, что вы выбирали запись forUpdate....
|
|