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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.12.2014, 13:56   #1  
Morpheus is offline
Morpheus
Участник
Аватар для Morpheus
Соотечественники
 
602 / 167 (7) ++++++
Регистрация: 30.03.2005
Адрес: Київ-København-Düsseldorf
AX 2012 R2 Табличный курсор не возвращает все записи удовлетворяющие условиям отбора (ValidTimeState не используется)
Этот скрипт при каждом запуске обрабатывает только часть строк таблицы LogisticsAddressCountryRegion удовлетворяющих условиям отбора (ValidTimeState не используется).

X++:
    LogisticsAddressCountryRegion addressCountry;
    Integer                       counter;

    while select addressCountry
           where addressCountry.CountryRegionId != addressCountry.ISOcode
    {
        counter++;
        
        addressCountry.CountryRegionId = addressCountry.ISOcode;
        addressCountry.renamePrimaryKey();
    }
    
    info(int2str(counter));
В чем может быть проблема?
Старый 17.12.2014, 14:21   #2  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от Morpheus Посмотреть сообщение
Этот скрипт при каждом запуске обрабатывает только часть строк таблицы LogisticsAddressCountryRegion удовлетворяющих условиям отбора (ValidTimeState не используется).

X++:
    LogisticsAddressCountryRegion addressCountry;
    Integer                       counter;

    while select addressCountry
           where addressCountry.CountryRegionId != addressCountry.ISOcode
    {
        counter++;
        
        addressCountry.CountryRegionId = addressCountry.ISOcode;
        addressCountry.renamePrimaryKey();
    }
    
    info(int2str(counter));
В чем может быть проблема?
Разделите курсор addressCountry на два - для чтения и для апдейта: addressCountry и addressCountryUpdate. Внутри цикла по addressCountry перевыбирайте курсор addressCountryUpdate по RecId и включите в ttscommit\ttsbegin.
Старый 17.12.2014, 17:02   #3  
Morpheus is offline
Morpheus
Участник
Аватар для Morpheus
Соотечественники
 
602 / 167 (7) ++++++
Регистрация: 30.03.2005
Адрес: Київ-København-Düsseldorf
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Разделите курсор addressCountry на два - для чтения и для апдейта: addressCountry и addressCountryUpdate. Внутри цикла по addressCountry перевыбирайте курсор addressCountryUpdate по RecId и включите в ttscommit\ttsbegin.
Не помогло.
Старый 19.12.2014, 15:17   #4  
Artoodeetoo is offline
Artoodeetoo
Участник
Аватар для Artoodeetoo
 
22 / 10 (1) +
Регистрация: 01.11.2010
Сначала набор записей для обновления из select положить в RecordSortrdList.
Потом для каждого элемента RecordSortrdList выбирать строку из базы и обновлять.
Старый 20.12.2014, 16:46   #5  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Вы в одной и той же выборке делаете выбор по ключевому полю и в той же выборке это ключевое поле меняете.
Ни в Аксапте, ни в MS SQL никто не гарантирует, что будет произведена ВСЯ выборка, а потом результаты этой выборки будут выдаваться Вам независимо от того, меняете ли Вы данные - выбор вполне может выдаваться какими-то порциями, причем, если не задать сериализуемую транзакционную выборку, то в рамках одной сессии гарантии постоянства выборки нет. Поэтому нужно сначала сделать выборку, запомнить её результаты, а потом уже менять данные.
Как уж Вы будете запоминать эти данные выборки до их изменения уже не важно. Можно как советует Artoodeetoo, можно запоминать ключи в Set, Map, Array т.п. - решайте сами.

Последний раз редактировалось Raven Melancholic; 20.12.2014 в 16:50.
Старый 20.12.2014, 21:02   #6  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
а не проще ли было бы просто сделать update_recordset для таблицы? кмк и в скорости работы выигрыш, и в надёжности
__________________
С уважением,
Вячеслав
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX Sustained Engineering: Announcing Cumulative Update 7 for Microsoft Dynamics AX 2012 R2 Blog bot DAX Blogs 0 15.12.2013 02:18
atinkerersnotebook: Walkthrough & Tutorial Summary Blog bot DAX Blogs 1 09.09.2013 09:11
emeadaxsupport: Translated User Help on TechNet and downloadable New Features lists available! Blog bot DAX Blogs 0 31.01.2013 05:11
dynamicsaxbi: Better together: Microsoft Dynamics AX 2012 R2 and SQL Server Power View Blog bot DAX Blogs 0 12.12.2012 13:11
DAX: Official Dynamics AX 2012 R2 Content (update) - Where is it, and how can you find out about updates? Blog bot DAX Blogs 0 03.12.2012 11:11
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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