|
![]() |
#1 |
Участник
|
Здесь получается такая схема работы.
1. Открыли транзакцию 2. Открыли курсор 3. Получили результат в несколько строк (fetch) 4. Закрыли транзакцию 5. Закрыли курсор 6. Открывается и закрывается транзакция несколько раз. Пока в буфере на клиенте есть записи - запросы на получение данных не идут. 7. Как только на клиенте закончились записи в буфере - переходим к пункту 2 При такой схеме легко попасть в бесконечный цикл, если нет дополнительных условий для его прерывания Очень многое зависит от количества записей, получаемом при выборке (фетче) (при этом надо учесть, что это не константа и может отличаться для первой и последующих, а так же зависит от опций в select'е, например, firstfast). Если количество записей в результате выборки меньше размера буфера (в данном случае, упрощая, это кол-во строк в нем помещающихся), то цикл отработает (в исходном вопросе при наложении условия в where так и происходит). Если количество записей больше или равно размеру буфера, то попадаем в бесконечный цикл, в котором с какой-то периодичность записи будут повторяться В общем, так делать - себе дороже. 2 PavelX Расписали бы вы полнее задачу. Но первое подложение сделаю ![]() 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). |