Навигация по набору записей

Материал из K3-Macro
Версия от 14:16, 30 июля 2021; Aleksandro (обсуждение | вклад) (Новая страница: «Категория:Работа_с_файлами_DBF_dBASE_IV Команды '''dbMove, dbMoveFirst, dbMoveLast, dbMoveNext, dbMovePrevious''' осущест...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Команды 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;        // Закрываем набор