Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектирование БД в Delphi ВТиП.doc
Скачиваний:
53
Добавлен:
17.03.2016
Размер:
3.62 Mб
Скачать
  1. Наборы данных

Под набором данных (НД) понимается группа записей из одной или нескольких таблиц физической БД, доступная для компонент-наборов TTable, TQuery или TStoredProc. Указанные компоненты порождены от общего родительского классаTDBDataSet, который рассматривается в этом разделе.

Все излагаемые в этом разделе сведения в равной степени относятся к любому из указанных компонент-наборов - TTableилиTQuery, и составляют основу организации программного доступа к данным этих компонент.

Кроме того компоненты TTableилиTQueryTStoredProcимеют свои методы и свойства, направленные на повышение гибкости проектирования программ и программной обработки данных.

Примечание. Следует подчеркнуть, что родительскому классуTDBDataSetне сопоставляется компонент и поэтому он не имеет графического изображения. Однако этот класс доступен в программе, а его методы являются основой доступа к данным вНД.

    1. Обзор событий класса tdbDataSet

Все НД получают в свое распоряжение большое количество событий, унаследованных ими от родительского класса TDBDataSet. Ниже рассматриваются наиболее важные из них.

      1. Реализация каскадных изменений и бизнес-правил

Для реализации каскадных изменений и бизнес-правил в локальных или файл-серверных БД обычно используются обработчики событий AfterXXXX и BefогеХХХХ. Эти две группы событий связаны с изменениями НД (вставка, удаление или редактирование записи) и отличаются тем, что события BefогеХХХХ наступают непосредственно перед изменением НД, а события AfterXXXX - сразу после изменения НД. К ним относятся:

  • property After/BeforeCancel - возникает после/до отмены изменений в текущей записи;

  • property After/BeforeClose - возникает после/до закрытия НД;

  • property After/BeforeDelete - возникает после/до удаления текущей записи;

  • property After/BeforeEdit - возникает после/до редактирования текущей записи;

  • property After/Beforelnsert - возникает после/до вставки новой записи;

  • property After/BeforeOpen - возникает после/до открытия НД;

  • property After/BeforePost - возникает после/до выполнения метода Post;

  • property After/BeforeScroll - возникает после/до перехода к новой записи.

Обработчики этих событий в качестве параметра получают ссылку на НД, вызвавший соответствующее событие. Если необходимо прервать работу обработчика и предотвратить изменение таблиц БД, нужно возбудить исключение или вызвать процедуру Abort.

Безусловным достоинством реализации каскадных изменений и бизнес-правил именно в обработчиках этих событий является концентрация их в одном месте - в модуле данных (если, разумеется, все компоненты-наборы сосредоточены в едином модуле данных), что облегчает программисту отслеживание их и внесение в них необходимых изменений.

      1. Другие события

Событие OnCalcFields возникает в момент, когда программа должна сформировать значения для вычисляемых полей. Следует заметить, что это событие возникает в момент открытия НД и при любом его изменении. Если пользователь интенсивно работает с НД, а алгоритм получения вычисляемых значений достаточно сложен, обработчик этого события может снизить производительность системы. Событие OnCalcFields в этом случае следует предварительно отключать, устанавливая значение False в свойство НД AutoCalcFields.

Следующее событие возникает в момент фильтрации записей:

type TFilterRecordEvent:

procedure(DataSet: TDataSet; var Accept: boolean) of object;

property OnFilterRecord: TFilterRecordEvent;

Обработчик должен поместить в параметр Accept значение True, если запись удовлетворяет условиям фильтрации.

Событие OnNewRecord возникает при вставке новой записи. В его обработчике программа может поместить в запись значения полей, заданные по умолчанию.