Есть некий фейс. В нем логическая таблица, на которую завязан browse. По нажатию кнопки нужно пройтись в цикле по таблице и выполнить с ней некоторое действие. Но проблема в том, что цикл ломается и действие применяется не ко всем записям таблицы. Это связано с тем, что выборка по этой таблице отсортирована по некоторому полю; изменение этого поля скорей всего приводит к пересортировке, что в свою очередь меняет текущую позицию. Код примерно такой:
interface Simple;
table struct Tbl
(
Field1,
Field2
)
with index
(
index1 = Field1
);
create view as select * from Tbl order by Field1; // Если убрать Field1 то все начинает работать как надо
browse brMain;
table Tbl
...
end;
procedure ChangeData;
{
PushPos(#Tbl);
{
_loop Tbl // Этот цикл ломается, если в create view есть order by
{
Tbl.Field1 := '..';
...
update current Tbl;
}
}
PopPos(#Tbl);
}
end.
Сортировка нужна! Но с ней не работает(( Я так понимаю нужно использовать SetOrder, только вот обратной функции --> ClearOrder, ResetOrder, DeleteOrder я что-то не нашел. Как быть?
Михаил Ларин
Спасибо! Но как я уже писал - проблему решил обновлением псевдонима.
В следующий раз попробую использовать fullcache!
Про update Tbl set Tbl.Field1 := '..'; не совсем понял. Т.е. при такой вот конструкции - нет внутреннего цикла и обновление проходит сразу по всем записям, т.е. есть некая оптимизация?
Помнится у меня при таком вот обновлении у browse вообще крышу сносило и он оставался пустым. Я тогда так же перешел на обновление синонима.
P.S. Вообще мне _loop нужен -> я по нему свой индикатор отображаю, вроде можно и сразу по update, но так надежней