Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

If CheckBox2.Checked then begin

Begin

Begin

If CheckBox2.Checked then

Begin

MessageDlg('Данные таблицы '+Tablel.TableName+ ' доступны для работы.',

mtWarning, [mbOK], 0);

end;

 

Если переключатель CheckBox2, управляющий возможностью выдачи сообще­ний, включен, то при открытии набора данных Tablel пользователю выдается сообщение.


Как уже говорилось, при закрытии набора данных возникают события BeforeClose и AfterClose. Они так же, как и события BeforeOpen и AfterOpen, имеют тип TDataSetNotifyEvent.

Отметим, что закрытие набора данных автоматически не сохраняет текущую запись, т. е. если набор данных при закрытии находился в режимах редактиро­вания или вставки, то произведенные изменения данных в текущей записи бу­дут потеряны. Поэтому перед закрытием набора данных нужно проверять его режим и при необходимости принудительно вызывать метод Post, сохраняющий сделанные изменения. Одним из вариантов сохранения изменений является вы­зов метода Post в обработчике события BeforeClose, возникающего непосредст­венно перед закрытием набора данных.

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

procedure TForml.TablelBeforeClose(DataSet: TDataSet);

if (Tablel.State = dsEdit) or (Tablel.State = dsInsert) then Tablel.Post;

end;

 

Если набор данных Tablel находится в режиме редактирования или вставки, то перед его закрытием внесенные изменения сохраняются.

Замечание

При закрытии приложения событие Beforeciose не генерируется, и несохра-ненные изменения теряются.

 

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

procedure TForml.TablelAfterClose(DataSet: TDataSet);

Beep;

MessageDlg('Таблица '+Tablel.TableName+' закрыта.', mtWarning, [mbOK], 0);

end;,;

end;

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

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


Наборы данных могутнаходиться в различных режимах. Текущий режим набора данных определяется свойством 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);

<== предыдущая лекция | следующая лекция ==>
If not CheckBoxl.Checked then begin | If OpenDialogl.Execute then begin
Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 601; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.