Состояния набора данных
В процессе своего функционирования (от открытия методом
Open и до закрытия методом
close) набор данных может выполнять самые разнообразные операции. Можно просто перемещаться по записям, можно редактировать данные и удалять записи, можно проводить поиск по различным параметрам и т. д. При этом желательно, чтобы все операции выполнялись как можно быстрее и эффективнее.
Набор данных в любой момент времени находится в некотором состоянии, т. е. подготовлен к выполнению действий строго определенного рода. И для каждой группы операций набор данных выполняет ряд подготовительных действий.
Все состояния набора данных делятся на две группы.
- К первой группе относятся состояния, в которые набор
данных переходит автоматически, а также непродолжительные по времени состояния,
сопровождающие функционирование полей набора данных (табл. 12.1).
- Во вторую группу входят состояния, которыми можно управлять
из приложения, например, перевод набора данных в режим редактирования (табл.
12.2).
Базовый класс TDataSet, инкапсулирующий свойства набора данных, позволяет изменять состояние, а также проверять текущее состояние набора данных.
Текущее состояние набора данных передается в свойство
state, имеющее тип
TDataSetState:
type TDataSetState = (dslnactive, dsBrowse, dsEdit, dslnsert, dsSetKey, dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead, dsInternalCalc);
Для управления состояниями набора данных используются методы
open, Close, Edit, Insert.
Таблица 12.1. Автоматические
состояния набора данных
|
|
|
Включается при обращении к свойству NewValue поля набора данных
|
|
Включается при обращении к свойству OldValue поля набора данных
|
|
Включается при обращении к свойству CurValue поля набора данных
|
|
Включается при расчете значений полей, для которых
FindKind = fklnternalCalc
|
|
Включается при выполнении метода onCalcFields
|
|
Включается механизм ускоренного перемещения по набору данных
|
|
Существует при открытии набора данных методом
Open или свойством Active
|
|
Включается при выполнении метода OnFilterRecord
|
Таблица 12.2. Управляемые
состояния набора данных
|
|
|
|
|
|
|
|
Данные доступны для просмотра, но недоступны для редактирования
|
|
|
Данные можно редактировать
|
|
|
К набору данных можно добавлять новые записи
|
|
|
Включается механизм поиска по ключу. Также могут использоваться диапазоны
|
Рассмотрим, как изменяется состояние набора данных при выполнении
стандартных операций.
Закрытый набор данных всегда имеет неактивное состояние
dsinactive.
При открытии набор данных переходит в состояние просмотра данных
dsBrowse. В этом состоянии по записям набора данных можно перемещаться и просматривать их содержимое, но редактировать данные нельзя. Это основное состояние открытого набора данных, из него можно перейти в другие состояния, но любое изменение состояния происходит через просмотр данных (рис. 12.4).
Рис. 12.4. Схема изменения
состояний набора данных
При необходимости редактирования данных набор
должен быть переведен в состояние редактирования dsEdit,
для этого используется метод Edit. После
выполнения метода можно изменять значения полей для текущей записи. При перемещении
на следующую запись набор данных автоматически переходит в состояние просмотра.
Для того чтобы вставить в набор данных новую
запись, необходимо использовать состояние вставки dsinsert.
Метод insert переводит набор данных в
это состояние и добавляет на месте текущего курсора новую пустую запись. При
переходе на другую запись, после проверки на уникальность первичного ключа (если
он есть) набор данных возвращается в состояние просмотра.
Состояние установки ключа
dsSetKey используется только в табличных компонентах при необходимости
поиска методами FindKey и FindNext,
а также при использовании диапазонов (метод setRange).
Это состояние сохраняется до момента вызова одного из методов поиска по ключу
или метода отмены диапазона. После этого набор данных возвращается в состояние
просмотра.
Состояние просмотра по блокам dsBlockRead
используется набором данных при реализации быстрого перемещения по большим массивам
записей без показа промежуточных записей в компонентах отображения данных и
без вызова обработчика события перемещения по записям. Для реализации быстрого
перемещения по набору данных можно использовать методы
DisableControls И EnableControls.
|