КАТЕГОРИИ: Архитектура-(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);
Дата добавления: 2014-01-11; Просмотров: 601; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |