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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
jornand
Постоянный обитатель
Сообщения: 150
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Иркутск
Контактная информация:

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

Сообщение jornand »

Сам не пробовал, может кто уже знает...
Если я сначала позиционируюсь на запись вот так:
GetFirst KatMC where ((cOldMC==KatMC.nrec));
, то что вернет
GetNext KatMC;?
Перейдет ли на следующую запись или не сможет из-за того, что больше нет записей с таким Nrec?
stray
Постоянный гость
Сообщения: 90
Зарегистрирован: 29 мар 2005, 17:49

Сообщение stray »

ес. есть записи, то перейдет на следующюю,
нет - вернет код ошибки, (вроде - 4)
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

Сообщение ecasoft »

Лучше писать тогда и

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

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

Рекомендуется ставить одну и туже выборку в GetFirst b GetNext.
WiRuc
Местный житель
Сообщения: 414
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж

Сообщение WiRuc »

GetNext возвратит следующую запись исходя из условий фильтрации во View. Если условия отсутствуют, то просто следующую запись.
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

Сообщение 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 и после выполнения - подсоединения к подцепки (см. документацию).

Все другие соцетация могут привести к очень предсказуемым последствиям.
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

Сообщение san »

лучше использовать _loop и ограничения описывать в лог таблице. в шесть раз быстрее GetFirst - GetNext.
Ответить