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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.07.2012, 16:35   #1  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от MikeR Посмотреть сообщение
Собственно да, человек запускает перебор (чтобы более корректно было), но в других местах это вообще не требуется.
Используется конструкция
X++:
while select forupdate ... {}
что само по себе плохо, так как более корректно

X++:
while select
{
	ttsbegin;
	select forupdate 
	ttscommit;
}
То есть делаем маленькие транзакции.
Что значит более корректно?
Вы хотите поломать целостность данных?
__________________
Axapta v.3.0 sp5 kr2
Старый 18.07.2012, 16:43   #2  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Цитата:
Сообщение от AndyD Посмотреть сообщение
Что значит более корректно?
Вы хотите поломать целостность данных?
X++:
table		t1,t2;
ttsbegin;
while select t1
{
	
	select forupdate t2 where t2.recid == t1.RecId;
	.....
	t2.update(); 
	
}
ttscommit;
__________________
Axapta book for developer

Последний раз редактировалось MikeR; 18.07.2012 в 16:45.
Старый 18.07.2012, 17:52   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от MikeR Посмотреть сообщение
X++:
table		t1,t2;
ttsbegin;
while select t1
{
	
	select forupdate t2 where t2.recid == t1.RecId;
	.....
	t2.update(); 
	
}
ttscommit;
И тем не менее.
В чем в этом варианте большая корректность перед первоначальным?
__________________
Axapta v.3.0 sp5 kr2
Старый 18.07.2012, 18:13   #4  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Цитата:
Сообщение от AndyD Посмотреть сообщение
И тем не менее.
В чем в этом варианте большая корректность перед первоначальным?
Модификация огромного количества (сотни тысяч) записей в Axapta 3.0 SP4
aEremenko: Ресурс заблокирован, ждите...
__________________
Axapta book for developer

Последний раз редактировалось MikeR; 18.07.2012 в 18:29. Причина: поважнее будет
Старый 18.07.2012, 18:28   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Вы не находите, что приведенная ссылка не имеет никакого отношения к исходному утверждению (потому как в нем не было никакой речи о закрытии/открытии транзакции внутри цикла)?

В вашем же примере получается только увеличение времени выполнения выполнения за счет лишних запросов к базе.
__________________
Axapta v.3.0 sp5 kr2
Старый 18.07.2012, 18:34   #6  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Цитата:
Сообщение от AndyD Посмотреть сообщение
приведенная ссылка не имеет никакого отношения к исходному утверждению (потому как в нем не было никакой речи о закрытии/открытии транзакции внутри цикла)?
Вторая ссылка тоже ни о чем не говорит?
Значит вы не поняли или не смог я вам объяснить.
__________________
Axapta book for developer
Старый 21.01.2014, 19:38   #7  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Цитата:
Сообщение от AndyD Посмотреть сообщение
И тем не менее.
В чем в этом варианте большая корректность перед первоначальным?
Таки вот что гласит документация
X++:
While select Statement with Large Transaction Scope 



ttsBegin; 
 
while select ItemId 
    from salesLine 
{ 
    select firstOnly forUpdate ItemType, ItemBuyerGroupId  
       from inventTable 
           where inventTable.ItemId == salesLine.ItemId; 
 
    If (inventTable && (inventTable.ItemType == InventItemType::Item)) 
    { 
         inventTable.ItemBuyerGroupId = ; 
         inventTable.update(); 
    } 
} 
 
ttsCommit; 


To limit the transaction scope, the code should be written to begin the transaction 
when the following criteria is met: 

While select Statement with Appropriate Transaction Scope 


while select ItemId 
    from salesLine 
{ 
    select firstOnly forUpdate ItemType, ItemBuyerGroupId  
       from inventTable 
           where inventTable.ItemId == salesLine.ItemId; 
 
    If (inventTable && (inventTable.ItemType == InventItemType::Item)) 
    { 
        ttsBegin; 
        inventTable.ItemBuyerGroupId = ; 
        inventTable.update(); 
        ttsCommit; 
    } 
}
Для AndyD DO NOT: Hold database locks for longer than is necessary.
DO: Limit the transaction scope by grabbing locks at the latest possible time and
releasing locks as early as possible.
__________________
Axapta book for developer

Последний раз редактировалось MikeR; 21.01.2014 в 19:41.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
.NET business connector не видит изменений в коде Аксапты rkorchagin DAX: Программирование 2 22.01.2010 11:43
Номерная серия длиннее 20 символов - баг в коде Максимка DAX: Функционал 17 29.12.2009 02:11
Нужно сделать выборку из нескольких таблиц (в данном случае из четырех). niktata DAX: Программирование 10 30.09.2008 09:42
Как быстро найти "главную" процедуру обработки в коде X++ ? Gustav DAX: Программирование 12 14.02.2006 12:15
Можно ли в коде управлять свойством Mandatory? kostas DAX: Программирование 5 10.03.2004 11:14
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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