Навигация по набору записей
Команды 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; // Закрываем набор