
- •1. Наборы данных
- •Var I: integer;
- •1.1. Состояния наборов данных
- •If not CheckBoxl.Checked then Abort;
- •If not CheckBoxl.Checked then begin
- •If CheckBox2.Checked then
- •If CheckBox2.Checked then begin
- •1.2. Режимы наборов данных
- •1.3. Доступ к полям
- •Var n: integer;
- •Var X: integer;
- •Var X: integer;
- •1.4. Особенности набора данных Table
- •If OpenDialogl.Execute then begin
- •Var n: integer;
- •If Editl.CanFocus then Editl.SetFocus;
- •1.5. Особенности набора данных Query
- •Interface
- •Implementation
- •2. Объекты поля
- •2.1 Редактор полей
- •2.2. Операции с полями
- •Var X: integer;
- •Var s: string;
- •X: real;
- •Var s: string;
- •X: real;
- •If not Tablel.Fields[2].IsValidChar(Editl.Text[1]) then
- •If (TablelCode.Required) and (TablelCode.IsNull)
- •3. Источник данных
- •Var n: integer;
- •1. Отображение и редактирование значения логического поля
- •2. Отображение и выбор значения поля
- •3. Отображение и выбор значения поля из списка
- •3.1. Простой и комбинированный списки
- •3.2. Списки, сформированные по значениям поля набора данных
- •4. Представление записей в табличном виде
- •4.1 Характеристики сетки
- •Var r :tRect;
- •4.2. Столбцы сетки
- •Var c, n :integer;
- •4.3. Использование модифицированной сетки
- •5. Использование навигационного интерфейса
- •6. Вывод графических изображений
- •Interface
- •Implementat ion
- •If OpenPictureDialogl.Execute then
- •If SavePictureDialogl.Execute then
- •7. Построение диаграмм
- •Var n: integer;
If not CheckBoxl.Checked then Abort;
end;
Если переключатель CheckBoxl, управляющий возможностью открытия набора данных, не установлен, то открытие набора данных Table1 блокируется. Для этого с помощью вызова процедуры Abort генерируется "тихая" исключительная ситуация. В результате операции, связанные с открытием набора данных, отменяются, а пользователю не выдается никаких сообщений об ошибках. В подобных случаях выдача предупреждающих сообщений должна обеспечиваться программистом, как это реализуется, например, в приводимой ниже процедуре:
procedure TForml.TablelBeforeOpen(DataSet: TDataSet);
begin
If not CheckBoxl.Checked then begin
MessageDlg('Данные таблицы '+ Tablel.TableName+' недоступны!',
mtError, [mbOK], 0);
Abort;
end;
end;
Событие AfterOpen генерируется сразу после открытия набора данных. Это событие можно использовать, например, для выдачи пользователю сообщения о возможности работы с данными.
В примере демонстрируется открытие набора данных с выдачей соответствующего сообщения:
procedure TForml.TablelAfterOpen(DataSet: TDataSet);
begin
If CheckBox2.Checked then
MessageDlg('Данные таблицы '+Tablel.TableName+ ' доступны для работы.',
mtWarning, [mbOK], 0);
end;
Если переключатель CheckBox2, управляющий возможностью выдачи сообщений, включен, то при открытии набора данных Tablel пользователю выдается сообщение.
Как уже говорилось, при закрытии набора данных возникают события BeforeClose и AfterClose. Они так же, как и события BeforeOpen и AfterOpen, имеют тип TDataSetNotifyEvent.
Отметим, что закрытие набора данных автоматически не сохраняет текущую запись, т. е. если набор данных при закрытии находился в режимах редактирования или вставки, то произведенные изменения данных в текущей записи будут потеряны. Поэтому перед закрытием набора данных нужно проверять его режим и при необходимости принудительно вызывать метод Post, сохраняющий сделанные изменения. Одним из вариантов сохранения изменений является вызов метода Post в обработчике события BeforeClose, возникающего непосредственно перед закрытием набора данных.
Рассмотрим следующий пример:
procedure TForml.TablelBeforeClose(DataSet: TDataSet);
begin
if (Tablel.State = dsEdit) or (Tablel.State = dsInsert) then Tablel.Post;
end;
Если набор данных Tablel находится в режиме редактирования или вставки, то перед его закрытием внесенные изменения сохраняются.
Замечание
При закрытии приложения событие Beforeciose не генерируется, и несохра-ненные изменения теряются.
Событие Afterciose возникает сразу после закрытия набора данных, и его можно использовать для вьщачи пользователю соответствующих сообщений, как это сделано в приведенной ниже процедуре:
procedure TForml.TablelAfterClose(DataSet: TDataSet);
begin
If CheckBox2.Checked then begin
Beep;
MessageDlg('Таблица '+Tablel.TableName+' закрыта.', mtWarning, [mbOK], 0);
end; , ;
end;
Если включен переключатель CheckBox2, управляющий режимом выдачи сообщений, то после закрытия набора данных Tablel выдается сообщение о закрытии таблицы, связанной с этим набором данных.
Необходимо иметь в виду, что если при работе приложения используется большое число таблиц, то выдача подобных сообщений может затруднять действия пользователя. Поэтому программист должен предусмотреть возможность отключения вьщачи сообщений. В приведенных примерах для этой цели предназначен переключатель CheckBox2.