На этом шаге мы рассмотрим вопросы, связанные с перемещением по записям, удовлетворяющими фильтру в неотфильтрованном НД.
Методы FindFirst, FindLast, FindNext, FindPrior позволяют перемещаться в неотфильтрованом НД (Filtered = False) между записями, удовлетворяющими условию фильтрации. Условие фильтрации задается событием OnFilterRecord и (или) свойством Filter. Если искомая запись найдена, метод возвращает True, в противном случае - False.
В отличие от этих методов, методы Find, Last, Next и Prior учитывают критерий фильтрации, только если НД находится в отфильтрованном состоянии.
До этого момента мы не добавляли на главную форму кнопку "Удалить", для удаления записи из НД TableClass. Как известно TableClass и TablePupils, связаны ссылочной целостностью по полю Class. Таблицы Paradox имеют могут осуществлять проверку целостности (Referential Integrity), что предотвращает добавление записей в дочернюю таблицу, для которых нет соответствующих записей в родительской таблице.
Также могут изменяться ключевые поля в дочерней таблице при изменениях в соответствующих ключевых полях родительской таблицы (обычно это называют каскадным обновлением). Эти события происходят автоматически, и не требуют никакого вмешательства со стороны Delphi-приложений, использующих эти таблицы. Однако таблицы Paradox не реализует автоматическое каскадное удаление: Delphi не позволит вам удалять записи в родительской таблице при наличии существующих записей в дочерней таблице. Это могут сделать только дочерние записи "без родителей", обходя проверку целостности. При попытке удаления такой родительской записи, Delphi сгенерирует исключительную ситуацию.
Для того чтобы выполнить такое удаление, нужно реализовать в приложении удаление соответствующих дочерних записей прежде, чем будет удалена родительская запись.
На следующем шаге мы продолжим совершенствовать разрабатываемое приложение.