Проблемы с order by

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
stix
заказчик
Сообщения: 95
Зарегистрирован: Чт, 25/09/2008 07:45
Имя Фамилия: Марат Ахметзянов
Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"

Проблемы с order by

Сообщение stix »

Есть некий фейс. В нем логическая таблица, на которую завязан 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 я что-то не нашел. Как быть?
stix
заказчик
Сообщения: 95
Зарегистрирован: Чт, 25/09/2008 07:45
Имя Фамилия: Марат Ахметзянов
Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"

Сообщение stix »

Идея! Нужно попробовать апдейтить через синоним
stix
заказчик
Сообщения: 95
Зарегистрирован: Чт, 25/09/2008 07:45
Имя Фамилия: Марат Ахметзянов
Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"

Сообщение stix »

Нет, не помогло :-( С синонимом все то же самое. Т.е. все нормально работает без order by и перестает работать с оным. В чем может быть проблема?

Заработало с алиасом. Просто не везде изменил таблицы на псевдоним
Аватара пользователя
larin
топ-софт
Сообщения: 228
Зарегистрирован: Пн, 10/09/2007 12:13
Имя Фамилия: Михаил Ларин
Откуда: ТопCофт
Контактная информация:

Сообщение larin »

Попробуйте

Код: Выделить всё

_loop fullcache Tbl
, а еще лучше

Код: Выделить всё

update Tbl set Tbl.Field1 := '..';
stix
заказчик
Сообщения: 95
Зарегистрирован: Чт, 25/09/2008 07:45
Имя Фамилия: Марат Ахметзянов
Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"

Сообщение stix »

Михаил Ларин
Спасибо! Но как я уже писал - проблему решил обновлением псевдонима.
В следующий раз попробую использовать fullcache!

Про update Tbl set Tbl.Field1 := '..'; не совсем понял. Т.е. при такой вот конструкции - нет внутреннего цикла и обновление проходит сразу по всем записям, т.е. есть некая оптимизация?

Помнится у меня при таком вот обновлении у browse вообще крышу сносило и он оставался пустым. Я тогда так же перешел на обновление синонима.

P.S. Вообще мне _loop нужен -> я по нему свой индикатор отображаю, вроде можно и сразу по update, но так надежней
Gera
топ-софт
Сообщения: 97
Зарегистрирован: Пн, 24/09/2007 17:53
Имя Фамилия: Юрий Герман
Откуда: ТопСофт
Контактная информация:

Сообщение Gera »

В групповых операциях, в операциях навигации, в операторе цикла по таблице и т.п. есть встроенная визуализация:

<параметр-визуализации> - управляет визуализацией процесса модификации базы:
<параметр-визуализации> = noVisual | visual [ <строка-пояснение-для-визуализации> ]

noVisual - не отображать индикатор процесса выполнения операции
visual - отображать индикатор процесса выполнения операции

Подробнее см. документацию.

Например:

Код: Выделить всё

  _Loop BuhSchetFind Visual 'Добавление счетов' where ((    MyPlansNo == BuhSchetFind.cPlansSch
                                                        and 0         == BuhSchetFind.cNode))
stix
заказчик
Сообщения: 95
Зарегистрирован: Чт, 25/09/2008 07:45
Имя Фамилия: Марат Ахметзянов
Откуда: ОАО "Северо-Западные Магистральные Нефтепроводы"

Сообщение stix »

Юрий Герман
Спасибо! Проблему решил как и описал выше обновлением синонима! Так надежней
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

можно ещё делать _loop external
но самое быстрое в данном случае - это в самом деле обновление синонима
Ответить