10. Переход на запись

Для перехода на определенную запись используются следующие методы:

  • MoveFirst, MoveLast, MoveNext, MovePrior – переход соответственно на первую, последнюю, следующую, предыдущую записи.
  • MoveBy(Distance: Integer) – перемещение на Distance записей вперед или назад (если значение отрицательное.
  • MoveTo(RecNo: Integer) – переход на запись под номером RecNo.
  • GotoRecord(RecId: Integer) – переход на запись с Id = RecId.
  • Locate(const FieldNames: String; FieldValues: array of Variant; Options: TLocateOptions) – переход на запись с определенными значениями полей.
    • FieldNames - имена полей, разделенные точкой с запятой;
    • FieldValues - массив значений; значения должны соответствовать перечисленным в первом параметре полям;
    • Options – опции поиска:
      • loCaseInsensitive – поиск без учета регистра,
      • loPartialKey – искать фрагмент текста.

Во время перехода возникают следующие события:

  • OnBeforeScroll – событие до перехода на запись,
  • OnAfterScroll – событие после перехода на запись. Если запись находится в состоянии вставки/изменения, то перед переходом запись сохраняется, т. е. неявно вызывается метод Post.

BoF и EoF

С методами перехода связаны еще два метода, которые также используются при перемещении – это BOF и EOF. BOF возвращает True, если достигнуто начало набора данных. EOF возвращает True, если достигнут конец набора данных.

Self.DisableControls;
Self.DisableScrollEvents;
Self.MoveFirst;
while not Self.Eof do
begin
  // Выполняем какие-то действияSelf.MoveNext;
end;
Self.EnableControls;
Self.EnableScrollEvents;

DisableControls, EnableControls, DisableScrollEvents, EnableScrollEvents

Пример показывает прохождение по всем записям формы. Для ускорения обработки отключается связь визуальных компонентов с набором данных (DisableControls), а также отключается реакция на события OnBeforeScroll и OnAfterScroll (DisableScrollEvents), в том числе штатная обработка (обновление подчиненных форм, запросов, вычисление надписей и т. д.). После обработки данных связь нужно включить (EnableControls, EnableScrollEvents).