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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.01.2007, 12:28   #1  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Здесь получается такая схема работы.

1. Открыли транзакцию
2. Открыли курсор
3. Получили результат в несколько строк (fetch)
4. Закрыли транзакцию
5. Закрыли курсор
6. Открывается и закрывается транзакция несколько раз. Пока в буфере на клиенте есть записи - запросы на получение данных не идут.
7. Как только на клиенте закончились записи в буфере - переходим к пункту 2


При такой схеме легко попасть в бесконечный цикл, если нет дополнительных условий для его прерывания
Очень многое зависит от количества записей, получаемом при выборке (фетче) (при этом надо учесть, что это не константа и может отличаться для первой и последующих, а так же зависит от опций в select'е, например, firstfast).
Если количество записей в результате выборки меньше размера буфера (в данном случае, упрощая, это кол-во строк в нем помещающихся), то цикл отработает (в исходном вопросе при наложении условия в where так и происходит).
Если количество записей больше или равно размеру буфера, то попадаем в бесконечный цикл, в котором с какой-то периодичность записи будут повторяться

В общем, так делать - себе дороже.

2 PavelX

Расписали бы вы полнее задачу.
Но первое подложение сделаю - используйте UserConnection для вашей выборки (или для операций по изменению данных)
X++:
static void Test_TTS_Continue(Args _args)
{
    ProjTable               projT;
    int i = 0;
    UserConnection conn = new UserConnection();
    ;
    projT.setConnection(conn);
    ttsbegin;
while select projT 
//    while select projT where projT.projId == "ИД_Проекта"
    {
        info(int2str(i) + ',    projId = ' + projT.ProjId);
        i++;
        if (i>100)
            return;
        ttsabort;
        ttsbegin;
        continue;
    }
    ttscommit;
}
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: kashperuk (2), PavelX (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как организовать цикл exodus DAX: Программирование 1 21.11.2007 10:50
Складская аналитика. Авторезервирование. Бесконечный цикл. andenis DAX: Функционал 8 27.06.2007 08:12
простейший job уходит в бесконечный цикл Keen DAX: Программирование 6 17.02.2007 21:32
ttsabort - как вернуть первоначальные данные? Damn DAX: Программирование 6 19.05.2004 11:32
Could not continue scan with NOLOCK due to data movement. ddadream DAX: Функционал 7 17.11.2003 11:36

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

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

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