AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.08.2003, 12:16   #1  
Andronov is offline
Andronov
Участник
 
108 / 10 (1) +
Регистрация: 10.11.2002
Адрес: г. Пермь
Не работает 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 код:
while select from MyTable {
            
MyTable .selectForUpdate();
            
MyTable .delete();
        } 
то генерится исключение со словами "Операция не может быть завершена, так как запись не выбиралась для обновления".
Если же написать
PHP код:
while select forupdate from MyTable {
            
MyTable .delete();
        } 
то все работает отлично.
Может кто-нибудь объяснить, почему так? И что делать надо, если запись не выбрана для изменения, а удалить (изменить) ее надо?
Старый 15.08.2003, 13:57   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
selectForUpdate
selectForUpdate() замечательно работате, когда его используют до select-а, например в методе find() на любой таблице.
Чтобы изменить запись, которую выбрали без forUpdate можно сделать еще один запросик по ключевому полю, но уже с forUpdate.
Старый 16.08.2003, 22:49   #3  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Повторю еще раз, что, по моему мнению, прозвучало у 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  
Andronov is offline
Andronov
Участник
 
108 / 10 (1) +
Регистрация: 10.11.2002
Адрес: г. Пермь
Если я правильно понял...
пусть мне пришла параметром запись, которую вычитали без forUpdate и я хочу ее удалить. Тогда я должен написать что-то вроде
PHP код:
public void delete(MyTable t){
    
select forupdate from t where t.recId==t.recId;
    
t.delete();

так? По-моему, дикость какая-то.
Старый 18.08.2003, 16:44   #5  
Axapta is offline
Axapta
Участник
 
91 / 12 (1) ++
Регистрация: 21.06.2002
Адрес: Moscow
Это не дикость, а механизм управления блокировками.

Если выбрать запись без forUpdate, то нет гарантии, что другая транзакция не апдейтит в тот же самый момент нашу запись.
Старый 18.08.2003, 17:01   #6  
Andronov is offline
Andronov
Участник
 
108 / 10 (1) +
Регистрация: 10.11.2002
Адрес: г. Пермь
Вообще-то я имел ввиду то, что нельзя написать [t.selectForUpdate()] вместо [select forupdate * from t where t.recId==t.recId]

Насчет
Цитата:
Если выбрать запись без forUpdate, то нет гарантии, что другая транзакция не апдейтит в тот же самый момент нашу запись.
могу возразить, что одним из свойств транзакций (ACID), является (A)tomicity - атомарность и если вы одновременно запустите 2 транзакции (в терминах SQL-сервера), к-рые меняют одни данные, то одна из них непременно дождется, пока завершится другая.
Старый 18.08.2003, 17:24   #7  
Axapta is offline
Axapta
Участник
 
91 / 12 (1) ++
Регистрация: 21.06.2002
Адрес: Moscow
Все правильно, но при условии, что вы выбирали запись forUpdate....
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
почему на работает common.(fieldId)[idx] maze DAX: Программирование 3 31.08.2007 06:48
проблема SelectForUpdate murad DAX: Программирование 6 18.04.2006 16:47
Не работает запрос на нескольких компаниях Bega DAX: Программирование 3 16.09.2005 10:21
JOIN программно на форме не работает rohlenko DAX: Программирование 2 31.03.2005 15:41
CRM ABC, SWOT анализ Как это работает и работает ли вообще. ShadowFromXZone DAX: Функционал 16 02.03.2004 18:09

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:34.