Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 7.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.04 Mб
Скачать

1.2. Режимы наборов данных

Наборы данных могут находиться в различных режимах. Текущий режим набора данных определяется свойством State типа TDataSetState. Оно доступно для чтения во время выполнения приложения и может быть использовано только для текущего режима. Для перевода набора данных в требуемый режим исполь­зуются специальные методы. Они могут вызываться явно (указанием имени ме­тода) или косвенно (путем управления соответствующими визуальными компо­нентами, например, навигатором DBNavigator или сеткой DBGrid).

Набор данных может находиться в одном из перечисляемых ниже режимов.

  • dsInactive — неактивность; набор данных закрыт и доступ к его данным не­возможен. В этот режим набор данных переходит после своего закрытия, когда свойству Active установлено значение False.

  • dsBrowse — осуществляется навигация по записям набора данных и просмотр данных. В этот режим набор данных переходит следующим образом:

  • из режима dsInactive — при установке свойству Active значения True;

  • из режима dsEdit — при вызове метода Post или Cancel;

  • из режима dsInsert — при вызове метода Post или Cancel.

  • dsEdit — редактирование текущей записи. В этот режим набор данных пере­ходит из режима dsBrowse при вызове метода Edit.

  • dsInsert — вставка новой записи. В этот режим набор данных переходит из режима dsBrowse при вызове методов Insert, InsertRecord, Append или AppendRecord.

  • dsSetKey — поиск записи, удовлетворяющей заданному критерию. В этот режим набор данных переходит из режима dsBrowse при вызове методов SetKey, SetRangeXXX, FindKey, GotoKey, FindNearest или GotoNearest. Возможен только для компонента TTаblе, т. к. для компонента Query отбор записей осуществляется средствами языка SQL.

  • dsCalcFields — расчет вычисляемых полей. Используется обработчик собы­тия OnCalcFields.

  • dsFilter — фильтрация записей. В этот режим набор данных автоматически переходит из режима dsBrowse каждый раз, когда выполняется обработчик события OnFilterRecord. В режиме блокируются все попытки изменения записей. После завершения работы обработчика события OnFilterRecord на­бор данных автоматически переводится в режим dsBrowse.

  • dsNewValue — обращение к значению свойства TField.NewValue.

  • dsOldValue — обращение к значению свойства TField.OldVaiue.

  • dsCurValue — обращение к значению свойства TField.CurValue.

  • dsBlockRead — отсутствие модификации управляющих элементов и генерации событий при вызове метода Next.

  • dsInternalCalc — указание на необходимость вычислять значения полей, свойство TField.FieldKind которых имеет значение fkInternalCalc.

  • dsOpening — открытие набора данных.

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

Рис. 7.1. Взаимосвязи режимов наборов данных

Иногда при описании операций, выполняемых с записями набора данных, под режимом редактирования подразумевается не только режим dsEdit изменения полей текущей записи, но и режим dsInsert вставки новой записи. Тем самым режим редактирования понимается в широком смысле слова как режим модифи­кации набора данных.

Режимы dsNewValue, dsOldValue, dsCurValue, dsBlockRead и dsInternalCalc используются набором данных для собственных нужд, и программистом обычно не анализируются.

При выполнении программы определить режим набора данных можно с по­мощью одноименных свойств State типа TDataSetState самого набора данных и связанного с ним источника данных DataSource. При изменении режима набора данных для источника данных DataSource генерируется событие OnStateChange типа TNotifyEvent.

Рассмотрим следующий пример:

procedure TForml.DataSourcelStateChange(Sender: TObject);

begin

case DataSourcel.State of

dslnactive: Labell.Caption:='Ha6op данных закрыт';

dsBrowse: Labe1l.Caption:='Просмотр набора данных';

dsEdit: Labell.Caption:='Редактирование набора данных';

dsInsert: Labell.Caption:='Вставка записи в набор данных'

else Labell.Caption:='Режим набора данных не определен';

end;

end;

В приведенной процедуре определяется режим набора данных, связанного с ис­точником данных DataSource1, и информация об этом режиме выводится в надписи Label1. При этом используется свойство State источника данных. Код, выполняющий анализ режима, помещен в обработчик события OnStateChange компонента DataSource1.