Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа7.doc
Скачиваний:
5
Добавлен:
06.11.2018
Размер:
461.82 Кб
Скачать
    1. Задание ограничений на вводимые значения

Для задания диапазона допустимых значений у типа TField есть свойства MinValue и MaxValue. Также можно воспользоваться свойством CustomConstraint, например:

Table1.FieldByName('Prise').CustomConstraint := 'Prise >=0 and Prise <=9999.99';

Если введенное значение будет не удовлетворять заданным условиям, то будет генерироваться исключительная ситуация с текстом, указанном в свойстве ConstraintErrorMessage. Для более сложных ограничений используются обработчики событий OnSetText, OnValidate и OnChange. Например:

procedure TForm1.Table1NumberValidate(Sender: TField);

begin

with Table1 do

if (FieldByName('Number').AsInteger<0)

or((FieldByName('Name').AsString= '-') and (FieldByName('Number').AsInteger<>0))

then Abort;

end;

Кроме задания ограничений, можно задать и значение по умолчанию – свойство DefaultExpression.

Также можно задать вид отображения значения поля, т.е. его формат – свойство DisplayFormat. В качестве значения свойства DisplayFormat задается маска, определяющая формат отображения поля. Маска может состоять из одной или трех секций разделенных точкой с запятой, задающих отображение положительных, отрицательных и нулевых значений. Символы маски:

0 – цифра, незначащие нули отображаются;

# – цифра, незначащие нули не отображаются;

. – разделитель целой и дробной части числа;

, – разделитель тысяч;

E+ – разделитель мантиссы и порядка числа;

E- – разделитель мантиссы и порядка числа, отображается только отрицательный знак;

'Text' – символы, выводимые без изменений.

Примеры: 000E-00, ####0.00' р.' , ####0;-####0;'-'

Свойство EditFormat задает маску отображения числа при его редактировании, задание маски аналогично со свойством DisplayFormat.

Свойство EditMask задает маску отображения строкового поля. Для его задания используется Редактор маски.

Программист может также задавать и заголовок поля, используемый как название столбца – свойство DisplayLabel.

    1. Компонент Table

Компонент Table представляет набор данных, который может быть связан только с одной таблицей БД. Так как этот компонент использует навигационный способ доступа к данным, его не рекомендуется использовать для работы с удаленными базами данных.

На расположение БД (каталог или псевдоним) указывает их свойство DatabaseName. А на ее имя – свойство TableName. При изменении этих свойств – набор данных необходимо предварительно закрывать:

Table.Active:=False;

По умолчанию Delphi поддерживает многопользовательский доступ к локальным таблицам с разрешением редактирования данных. Чтобы запретить пользователям изменять содержимое записей, нужно установить свойство ReadOnly:=True. Для получения монопольного доступа к таблице – установите свойство Exclusive:=True. При этом другим приложениям (и даже другим компонентам Table и Query вашего приложения) доступ к таблице запрещается. Перед установкой значения свойства Exclusive набор данных должен быть закрыт (Active:=False). Если в каком-либо приложении эта таблица уже открыта, то попытка установить к ней монопольный доступ вызовет сообщение об ошибке.

Кроме этого блокировать доступ к таблице можно функцией LockTable, для отмены блокировки используйте функцию UnLockTable. Параметр функций может принимать следующие значения:

  • ltReadLock – запрет другим приложениям записи в и чтения из таблицы;

  • ltWriteLock – запрет только записи, читать данные из таблицы сторонние приложения могут.

Монопольный режим необходим при выполнении таких операций, как:

  • добавление индекса: метод AddIndex(Имя индекса, Индексные поля: string; Опции: TIndexOption);

  • удаление индекс: метод DeleteIndex(Имя индекса: string)

  • очистка таблицы методом EmptyTable.

Пример программного добавления индекса indName по полям Autor и Title:

procedure TForm1.Button1Click(Sender: TObject);

begin

with Table1 do begin

Active:=False;{закрыть таблицу}

try

Exclusive:=True; {задать монопольный режим}

Active:=True; {открыть таблицу}

AddIndex('indName','Autor;Title',[ixCaseInsensitive]); {добавить индекс}

finally

Active:=False; {закрыть таблицу}

Exclusive:=False; {отключить монопольный режим}

Active:=True; {открыть таблицу}

end;

end;

end;