Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Состояния наборов данных



Наборы данных могут находиться в открытом или закрытом состояниях, на что указывает свойство Active типа Boolean. Если свойству Active установлено значение True, то набор данных открыт. Открытый компонент Table содержит набор данных, соответствующий данным таблицы, связанной с ним через свойство TableName. Для открытого компонента Query набор данных соответствует результатам выполнения SQL-запроса, содержащегося в свойстве SQL этого компонента. Если свойство Active имеет значение False (по умолчанию), то набор данных закрыт, и его связь с БД разорвана.

Набор данных может быть открыт на этапе разработки приложения. Если при этом к набору данных через источник данных DataSource подключены визуальные компоненты, например, DBGrid или DBEdit, то они отображают соответствующие данные таблицы БД.

Замечание.

На этапе проектирования приложения визуальные компоненты отображают данные записей набора данных, но перемещение по набору данных и редактирование записей невозможны. Исключение составляет возможность перемещения текущего указателя с помощью полос прокрутки компонента DBGrid. Если по каким-либо причинам открытие набора данных невозможно, то при попытке установить свойству Active значение True выдается сообщение об ошибке, а свойство Active сохраняет значение False. Одной из причин не возможности открытия набора данных может быть неправильное значение СВОЙСТВ TableName ИЛИ SQL.

Замечание

На этапе проектирования свойству A c t i v e наборов данных автоматически устанавливается значение False при изменении значения свойств DataBaseName, TableNameили SQL.

Пример. Управление состоянием набора данных.

Рассмотрим управление состоянием набора данных с помощью свойства Active, которое используется для открытия и закрытия набора данных Queryl.

procedure TForml.ButtonlClick(Sender: TObject);

194 Delphi. Быстрыйстарт

begin

Queryl.Active:= false;

Queryl.SQL.Clear;

Queryl.SQL.Add("select * from Examplel.db');

Queryl.Active:= true;

end;

Управлять состоянием набора данных можно также с помощью методов Open И Close.

Процедура Open открывает набор данных, ее вызов эквивалентен установке свойству Active значения True. Процедура close закрывает набор данных, ее вызов эквивалентен установке свойству Active значения False.

При открытии набора данных любым способом возникают события BeforeOpen И AfterOpen ТИПа TDataSetNotifyEvent, Который описывается следующим образом:

type TDataSetNotifyEvent = procedure(DataSet: TDataSet) of object;

В этом описании параметр DataSet определяет набор данных, для которого произошло событие.

При Закрытии Набора ДаННЫХ ВОЗНИКаЮТ СОбыТИЯ BeforeClose И AfterClose типа TDataSetNotifyEvent.

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

Пример. Сохранение изменений при закрытии набора данных.

procedure TForml.TablelBeforeClose(DataSet: TDataSet);

begin

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

end;

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

Замечание

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





Дата публикования: 2015-02-18; Прочитано: 645 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...