- •Базы данных.
- •Проектирование базы данных
- •Шаги проектирования базы данных
- •Создание таблиц базы данных
- •Компоненты для работы с бд
- •Создание простейшего приложения
- •Режимы наборов данных
- •Команды навигации
- •Визуальные компоненты для работы с данными
- •Обзор компонент
- •Работа с полями таблицы
- •Создание статических полей
- •Задание ограничений на вводимые значения
- •Компонент Table
- •Сортировка и фильтрация
- •Поиск записей
- •If Table1.Locate ('Number',123,[]) {опции поиска отключены}
- •If not Table1.FindKey([EditGroup.Text,EditName.Text]){ищем соответствующие значения}
- •Связывание таблиц
- •Компонент Query
- •Чтение данных из таблиц (select)
- •Модификация записей (update, insert, delete)
- •Insert into Tovar.Db (Name, Price, Count) values (’Яблоки’, 20, 10)
- •Некоторые функции языка sql
- •Компоненты для построения отчетов
- •Основные свойства компоненты QuickRep
- •Методы компоненты QuickRep:
- •Свойства компоненты qrBand:
- •Создание простого отчета
- •Включение выражений в отчет
- •Отображение системной информации
- •Группировка данных в отчете
- •Построение отчета для связанных наборов данных
- •Комбинированный отчет
- •Упражнения:
-
Задание ограничений на вводимые значения
Для задания диапазона допустимых значений у типа 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.
-
Компонент 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;