Самый общий случай взаимодействия компонента с базой данных иллюстрирует рис. 12.1.

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

12.1. Канал связи с данными

Рис. 12.1. Связь компонента с данными

12.1.1. Класс TDataLink

Класс TDataLink обеспечивает связь компонента с данными. Его свойства перечислены далее.

property Active: Boolean;

Это свойство предназначено только для чтения. Указывает, активен ли связанный с компонентом набор данных.

property ActiveRecord: Integer;
Определяет номер активной записи, property Bof: Boolean;

Содержит True, если активна первая запись в наборе данных.

property BufferCount: Integer;

Определяет количество буферизуемых записей. Например, сетка в этом свойстве задает количество видимых в ней рядов.

property DataSet: TDataSet;
Указывает на связанный с компонентом набор данных, property DataSource: TDataSource;

Определяет связанный с компонентом источник данных.

property DataSourceFi'xed: Boolean;

Определяет, является ли свойство DataSource изменяемым. Обычно имеет значение False, но при асинхронных операциях с данными в него следует устанавливать значение True вплоть до завершения текущей операции.

property Editing: Boolean;
Содержит True, если источник данных находится в режиме редактирования, property Eof: Boolean;
Содержит True, если достигнута последняя запись набора данных, property Readonly: Boolean;
Содержит True, если компонент способен редактировать данные, property RecordCount: Integer;

Указывает истинное количество буферизуемых записей.

property VisualControl: Boolean;

Указывает, будет ли компонент, использующий данный канал связи, визуальным.

Если свойства Bof и Eof одновременно содержат значение True, набор данных DataSet пуст.

Ниже перечислены методы класса TDataLink.

procedure ActiveChanged;
virtual;
Реализует отклик на изменение свойства Active набора данных, procedure CheckBrowseMode;
virtual;

Этот метод вызывается перед изменением состояния набора данных.

procedure DataEvent(Event: TDataEvent;
Info: Longint); virtual;

Реализует отклик на многие события, связанные с обработкой данных (см. далее).

t.

procedure DataSetChanged;
virtual;

Реализует отклик на изменение содержимого набора данных.

procedure DataSetScrolled(Distance: Integer); virtual;

Реализует отклик на прокрутку данных. Игнорирует параметр Distance и вызывает метод DataSetChanged.

function Edit: Boolean;
Возвращает True, если набор данных находится в режиме редактирования, procedure EditingChanged;
virtual;
Реализует отклик на изменение режима редактирования набора данных, function ExecuteAction(Action: TBasicAction): Boolean;
dynamic;

Проверяет возможность выполнения действия Action над набором данных и выполняет его. Возвращает True, если действие выполнено.

procedure FocusControl(Field: TFieldRef); virtual;

Метод предназначен для перекрытия в потомках и реализует передачу компоненту фокуса ввода.

procedure LayoutChanged;
virtual;

Реализует отклик на изменение представления данных в компоненте (например, порядка следования столбцов в TDBGrid).

function MoveBy(Distance: Integer): Integer;
virtual;

Изменяет активную запись связанного набора данных в соответствии с параметром Distance: если он больше 0, активизирует соответствующую запись после текущей, иначе - перед ней. Возвращает количество записей, на которое произошло перемещение активности.

procedure RecordChanged(Field: TField); virtual;

Вызывается при изменении содержимого текущей записи после того, как выполнена операция Post. Параметр Field показывает, какое именно поле изменило значение. Если он содержит NIL, изменились несколько полей или записей.

function UpdateAction(Action: TBasicAction): Boolean;
dynamic;

Вызывается при обновлении набора данных. Параметр Action указывает связанное с этим действие. Возвращает True, если действие выполнено успешно.

procedure UpdateData;
virtual;

Предназначен для перекрытия в потомках и обеспечивает фиксирование в наборе данных изменений в текущей записи.

procedure UpdateRecord;

Реализует отклик на обновление набора данных.

В методе DataEvent параметр Event определяется следующим перечислением:

type TDataEvent - (deFieldChange, deRecordChange, deDataSetChange, deDataSetScroll, deLayoutChange, deUpdateRecord, deUpdateState, deCheckBrowseMode, dePropertyChange, deFieldListChange, deFocusControl, deParentScroll, deConnectChange, deReconcileError);

Элементы перечисления имеют следующий смысл:

• deFieldChange - изменилось значение поля;
• deRecordChange - изменилось содержимое текущей записи;
• deDataSetChange - изменилось содержимое набора данных (вставлена или удалена запись);
• deDataSetScroll - был прокручен набор отображаемых записей;
• deLayoutChange - изменилось представление данных в компоненте;
• deUpdateRecord - произошло подтверждение изменения текущей записи;
• deUpdateState - изменилось состояние набора данных;
• deCheckBrowseMode - изменяется состояние набора данных;
• dePropertyChange - изменилось свойство набора данных или одно из его полей;
• deFieldListChange - изменился список полей набора данных;
• deFocusControl - изменяется фокус ввода;
• deParentScroll - прокручен главный набор данных (текущий набор - детальный);
• deConnectChange - изменилось соединение с удаленной базой данных;

• deReconcileError - устранена ошибка подтверждения изменений.

Параметр Info уточняет произошедшее событие. Метод DataEvent осуществляет диспетчеризацию некоторых событий путем вызова того или иного метода, как это показано в табл. 12.1.

Таблица 12.1. Диспетчеризация событий в методе DataEvent

Событие

Содержание параметра Info

Вызываемый метод

deFieldChange

Изменившееся поле

RecordChanged

deRecordChange

Изменившееся поле

RecordChange

deDataSetChange

Индекс текущей записи в буфере

DataSetChanged

deDataSetScroll

Индекс текущей записи в буфере

DataSetScrolled

deLayoutChange

Индекс текущей записи в буфере

LayoutChanged

dellpdateRecord

UpdateRecord

deUpdateState

EditingChanged или ActiveChanged

deCheckBrowseMode

CheckBrowseMode

deFocusControl

FocusControl

Особенности компонентов для работы с базами данных || Оглавление || 12.1.2. Наследники класса TData


Искусство создания компонентов Delphi



Новости за месяц

  • Апрель
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс