- •Базы данных в Delphi 7. Самоучитель
- •Наборы данных
- •Общие свойства компонентов Table и Query
- •Состояния наборов данных
- •Режимы наборов данных
- •Работа с полями наборов данных
- •Набор данных Table
- •Набор данных Query
- •Источник данных
- •Листинг 3.1. Установка и разрыв связи с наборами данных
- •Что нового мы узнали?
Состояния наборов данных
Как мы уже видели ранее, наборы данных могут принимать два состояния: открытое или закрытое. При установке свойства Active в true набор данных будет открыт. Для закрытия набора данных нужно присвоить свойству Active значение false.
Набор данных можно открыть как во время работы, так и во время создания приложения. В случае, когда открыть набор данных нельзя, генерируется исключительная ситуация и выдается сообщение об ошибке. Свойство Active при этом сохраняет значение false.
ВНИМАНИЕ. При изменении свойств DatabaseName или TableName необходимо обязательно закрыть набор данных, чтобы избежать исключительной ситуации.
Кроме того, вы можете открыть набор данных с помощью вызова метода Open и закрыть с помощью метода Close:
Table1.Close; // Закрываем набор данных
Query1.Open; // Открываем набор данных
Вызов этих методов имеет смысл, если вы хотите выполнить какие-либо действия перед открытием или после открытия набора данных, а также перед закрытием или после закрытия.
Итак, метод Open открывает набор данных. При вызове данного метода генерируются события BeforeOpen и AfterOpen. Вы можете написать программы-обработчики этих событий. Это очень полезно, если вы хотите не открывать набор данных до тех пор, пока не выполнились какие-либо условия. Ниже представлен пример такого обработчика:
procedure TForm1.Table1BeforeOpen(DataSet: TDataSet);
begin
if a<>true then Abort;
end;
В данном примере, если переменная a не имеет значение true, открытие набора данных Table1 будет прервано. Это достигается вызовом процедуры Abort, в результате работы которой генерируется исключительная ситуация и операция открытия данных отменяется. При этом на экран не будет выведено никаких сведений об ошибках. Естественно, вы можете добавить команды вывода сведений для пользователя о том, что данные недоступны.
Примером использования события AfterOpen может служить приведенный ниже листинг:
procedure TForm1.Table1AfterOpen(DataSet: TDataSet);
begin
ShowMessage(“Таблица “+Table1.TableName+” готова к работе’);
end;
Здесь после открытия набора данных выводится текстовое сообщение о готовности таблицы к работе. Имя таблицы содержится в свойстве TableName.
Метод Close закрывает набор данных. При его вызове генерируются события BeforeClose и AfterClose.
ВНИМАНИЕ. При закрытии набора данных необходимо принудительно сохранять сделанные изменения в текущей записи с помощью вызова метода Post, так как метод Close автоматически не сохраняет данные текущей записи.
Можно использовать обработчик события BeforeClose для вызова метода Post:
procedure TForm1.Table1BeforeClose(DataSet: TDataSet);
begin
if (Table1.State=dsInsert) or (Table1.State=dsEdit) then
Table1.Post;
end;
В данном примере сначала осуществляется проверка, в каком режиме находится набор данных Table1, при помощи значения свойства State. Если он находится в режиме вставки новой записи (dsInsert) или редактирования текущей записи (dsEdit), то перед закрытием набора данных все внесенные изменения сохраняются.
ВНИМАНИЕ. При выходе из приложения несохраненные данные теряются, и обработчик события BeforeClose не вызывается.
К обработке события AfterClose можно прибегать для выдачи пользователю сообщения о закрытии набора данных.
