Показать сообщение отдельно
Старый 19.10.2005, 17:50   #26  
zub is offline
zub
Участник
 
40 / 10 (1) +
Регистрация: 23.08.2005
Цитата:
Сообщение от e-statik
Цитата:
Сообщение от romeo
Я говорю про форму, построенную на нормальной, не временной таблице.
А можно примерец привести, как на OnFind OnNext это сделать и без временной таблицы?? Спасибо.


<div class='CALtop'>C/AL</div><div class='CAL'>

OnFind
Exit(FormFind(Which));

OnNext
exit(FormNext(Steps));


FormFind(Which : Text[1024]) : Boolean
lrec.COPY(Rec);
IF NOT lrec.FIND(Which) THEN EXIT(FALSE);
IF Which='+' THEN
  li:=-1
ELSE
  li:=1;
WHILE NOT CheckFindRec(lrec) DO BEGIN
  lii:=lrec.NEXT(li);
  IF lii=0 THEN EXIT(FALSE);
END;
Rec:=lrec;
EXIT(TRUE);

FormNext(Steps : Integer) : Integer
lrec.COPY(Rec);
lrec:=Rec;
li:=0;
CASE TRUE OF
Steps>0:li:=1;
Steps<0:li:=-1;
END;
lRealStep:=0;
REPEAT
   lii:=lrec.NEXT(li);
   IF lii=0 THEN EXIT(lRealStep);
   IF CheckFindRec(lrec) THEN BEGIN
      lRealStep:=lRealStep+li;
      Rec:=lrec;
   END;
UNTIL lRealStep=Steps;
EXIT(lRealStep);
</div>

функция CheckFindRec возвращает TRUE для записей удовлетворяющих условию

Недостаток такого подхода - если интервал между записями удовлетворяющими условию достаточно большой, то будет ощутимое замедление вывода записей