|
Состояния набора данных
В процессе своего функционирования
(от открытия методом 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.
|