Как в DTS-пакете организовать цикл?

BAlex
Дата: 07.03.2001 19:50:58
Можно ли в DTS-пакете организовать циклическое выполнение последовательности операций: что-то похожее на
For Counter = Index1 To Index2
[Последовательность_операций]
Next Counter.
или
Do While [условие]
[Последовательность_операций]
Loop

Я пробовал такой вариант. Есть последовательность шагов
Step1(ActiveX)->On Success->Step2(ActiveX)-[Последовательность_операций_разного_типа]->Step_n

Если структура линейная, то все работает нормально: один проход по всей цепочке удается. Но мне нужно организовать цикл, для чего я сделал связь: Step_n->On Success->Step2. В Step1 задается начальное значение для счетчика Counter – это глобальная переменная. Тогда при запуске пакета выполняется только Step1 и все. Остальные шаги даже _не_пытаются_ выполняться.

P.S. Это первая моя попытка создать DTS-пакет, так что не обессудьте .
Дед Маздай
Дата: 09.03.2001 01:01:50
Иными словами, ты зациклил Step_n на Step_2 и удивляешься, что кроме Step_1 ничего не работает. Удивляться нечему, п.ч. тем самым ты для Step_2 обозначил два precedence constraints: Step_1 и Step_n. Последний не отрабатывает, т.к. до него управление еще не дошло, поэт. начало цикла тоже не отрабатывает. Т.е. ты зациклил не выполнение, а невыполнение цикла. На с.д. оставь всю цепочку линейной и однонаправленной, как вначале. Step_n должен выглядеть так:
DTSGlobalVariables("Counter").Value = DTSGlobalVariables("Counter").Value - 1
msgbox DTSGlobalVariables("Counter").value
if DTSGlobalVariables("Counter").Value > 0 then
Main = DTSTaskExecResult_Success
else
Main = DTSTaskExecResult_Failure
end if

Из Step_n протяни стрелочку "в случае успеха" на задачу типа Dynamic Properties, в к-й поменяй св-во ExecutionStatus шага Step_2 c 4 (DTSStepExecStat_Completed) на 1 (DTSStepExecStat_Waiting), что заставит его (а, сл., и всю растущую из него цепочку) выполниться еще раз. Собственно, все. Удачи.