Страница 1 из 1

Как ведет себя getnext?

Добавлено: 25 янв 2006, 17:16
jornand
Сам не пробовал, может кто уже знает...
Если я сначала позиционируюсь на запись вот так:
GetFirst KatMC where ((cOldMC==KatMC.nrec));
, то что вернет
GetNext KatMC;?
Перейдет ли на следующую запись или не сможет из-за того, что больше нет записей с таким Nrec?

Добавлено: 25 янв 2006, 18:13
stray
ес. есть записи, то перейдет на следующюю,
нет - вернет код ошибки, (вроде - 4)

Добавлено: 25 янв 2006, 19:09
ecasoft
Лучше писать тогда и

GetNExt KatMc where((cOldMc ==KatMc.Nrec ))

- будет ходить по записям, удовлетворяющим выборке.

Рекомендуется ставить одну и туже выборку в GetFirst b GetNext.

Добавлено: 25 янв 2006, 19:29
WiRuc
GetNext возвратит следующую запись исходя из условий фильтрации во View. Если условия отсутствуют, то просто следующую запись.

Добавлено: 26 янв 2006, 14:32
ecasoft
ну да, вы же по уникальному индексу написали :)

GetNExt KatMc where((cOldMc ==KatMc.Nrec ))
- это даст false.


на счет GetNext. Надо понимать, что проблема СЛЕДУЮЩАЯ на самом деле неоднозначна. СЛЕДУЩАЯ есть только в выборке, причем должна быть ТЕКУЩАЯ и должен быть задан ПОРЯДОК следования записей,т.к. индекс в Галактике, по которому стоят записи.


Проблема у том, что есть понятие в Галактике ТЕКУЩАЯ,т.е. та, на которой стоит курсов, а еще есть понятие ТЕКУЩАЯ ПО УСЛОВИЮ. Последнее понятие дает возможность работать оператору GetNеxt c опцией where.

Если таблица КатМс во view в секции where(()) стоит где-то в правой части, то ситуация на самом деле непредсказуемая. Если запись с Nrec=cOldMc удовлетворяет условию подцепки и условию подцепки во view, то видимо выведется запись, следующая за этой записью по условиям подцепки view. Если запись не попадает в условия подцепки, то не ручаюсь за результат.

Если таблица катмц не участвует в подцепке, то выдаст, скорее всего следующую запись по индексу Nrec.
GetFirst c опцией where ()) работает на самом деле


На практике, используют следующие приемы:

1. Описывают во view несколько синонимов и каждый синоним таблицы цепляют во view по разным условиям. В обработчиках работают с синонимами.

2. Не описываю таблицы вообще во view, а в обработчиках работают C циклами
if GetFirst ...where (()) - tsOk
do
...
while ( GetNext...where(()) = tsOk )

3. Описывают основное использование таблицы в view (подцепку), а использование варианта 2 обрамляют операторами отсоединения таблицы от подцепки во view и после выполнения - подсоединения к подцепки (см. документацию).

Все другие соцетация могут привести к очень предсказуемым последствиям.

Добавлено: 27 янв 2006, 06:02
san
лучше использовать _loop и ограничения описывать в лог таблице. в шесть раз быстрее GetFirst - GetNext.