Навигация по набору записей
Команды dbMove, dbMoveFirst, dbMoveLast, dbMoveNext, dbMovePrevious осуществляют перемещение по набору записей, т.е. смену текущей записи в наборе. Если набор пуст, то любая из этих команд вызовет ошибку, завершающую работу макрокоманды. Если набор находится в состоянии BOF (begin of file), ошибку вызовет перемещение вверх. Если набор находится в состоянии EOF (end of file), ошибку вызовет перемещение вниз.
dbMove <ID> <Num> <Bmk>
Команда осуществляет перемещение по набору записей с идентификатором <ID>
. Параметр <Num>
задает количество записей, на которое следует переместиться.
Если <Num>
больше нуля - перемещение осуществляется вниз по набору записей. Если <Num>
больше, чем количество записей находящихся ниже в наборе записей, то набор переходит в состояние EOF.
Если <Num>
меньше нуля - перемещение осуществляется вверх по набору записей. Если абсолютное значение <Num>
больше, чем количество записей находящихся выше в наборе записей, то набор переходит в состояние BOF.
Параметр <Bmk>
- закладка записи, от которой осуществляется перемещение. Если <Bmk>
равен нулю, перемещение будет осуществляться от текущей записи.
dbMoveFirst <ID>
Команда осуществляет переход к первой записи набора записей с идентификатором <ID>
.
dbMoveLast <ID>
Команда осуществляет переход к последней записи набора записей с идентификатором <ID>
.
dbMoveNext <ID>
Команда осуществляет переход к следующей за текущей записи набора записей с идентификатором <ID>
.
dbMovePrevious <ID>
Команда осуществляет переход к записи набора записей с идентификатором <ID>
, предшествующей текущей.
Пример:
DbOpen id, "a.dbf"; If (DbRecCount(id)==0) //Набор пуст, закрываем и выходим { goto metend; } // Просмотр набора вниз DbMoveFirst id; // Встали на первую запись bm=0; i=1; met1: If (!DbEOF(id)) // Пока не прошли все записи { If i==5 // Для 5-й записи запоминаем закладку { bm=DbBookmark(id); } DbMoveNext id; // Переход на следующую вниз i=i+1; Goto met1; } // Просмотр набора вверх DbMoveLast id; // Встали на последнюю запись met2: If (!DbBOF(id)) // Пока не прошли все записи { DbMovePrevious id; // Переход на следующую вверх Goto met2; } // Быстрый возврат к пятой записи, если она была if bm!=0 // Сдвиг на 0 от записи с закладкой bm { DbMove 0, bm; } // Сдвиг вниз от текущей записи на 3 записи DbMove 3, 0; // Сдвиг вверх от текущей записи на 3 записи DbMove -3, 0; metend: DbClose id; // Закрываем набор