FreddyRost
Forum Member / Участник форума
Участник № / Member № 9711
отправлено / posted
Организую последовательность SQL запросов средствами канала AsyncCollection. Необходимо организовать постраничное чтение записей из основной таблицы. 1. Читаю данные из основной таблицы во временную таблицу 2. Определяю количество записей во временной таблице. В аргумент запроса OUT_RecCount получаю количество записей 3. Если количество записей > 0, тогда обновляю данные на экране. Для этого в 3-ем шаге в параметр send_waitread убираю "значение по умолчанию" и линкую его к OUT_RecCount 4. Сбрасываю канал AsyncCollection:IN = 0
Проблема в том, что если записи в основной таблице "закончились", то согласно задумке AsyncCollection не выполняет 3-шаг (и выходит в timeout ((0, R)=3)). Если послать в (2,IN)=2, то последовательность не стартует. Я так понимаю, необходимо сбросить канал AsyncCollection ((2,IN)<-0). Подскажите, как оптимальнее перезапустить последовательность? Без дополнительных кнопок для пользователя..
Сообщения / Posts 43 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
отправлено / posted
- а зачем делать постраничное чтение таким странным способом ? - считать все что надо и вывести на экран через встроенные окно мониторов (Окно CALL.SQLQuery)
Сообщения / Posts 873 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Здравствуйте. Канал CALL.AsyncCollection служит для пошагового исполнения рецептов (действий) с контролем времен выполнения шагов и контролем условий перехода.
Канал предполагается использовать в случаях, когда шаги априори нельзя "пропустить". Если на одном из шагов возникла ситуация невозможности исполнить шаг, то процесс останавливается. (канал так же можно настроить на предварительный анализ состояния каналов на достоверность, что бы весь процесс не был запущен при наличии проблем).
Вы правы, для запуска процесса необходимо подать 2 в атрибут 2,In (Входное значение) и для сброса процесс подать 0 в тот же атрибут. Для подачи двух команд потребуется две кнопки (или ГЭ Группа кнопок).
Вариант решения, который предложил Nico (считать все и вывести в окно Call.SQLQuery), значительно проще и удобнее.