Шаг 21.
Основные компоненты Delphi. Вкладка InterBase.
Создание таблиц и генераторов

    На этом шаге мы рассмотрим SQL-запросы, используемые для создания таблиц и генераторов.

    Разработаем простое клиент-серверное приложение "Продажа товара". В базе данных будут следующие таблицы:

    После создания файла базы данных переходим к созданию структуры указанных таблиц. Это можно сделать с помощью следующих запросов:

CREATE TABLE  TOVAR
(
TOVARID INTEGER NOT NULL,
NAME VARCHAR(100) NOT NULL COLLATE PXW_CYRL, 
PRICE INTEGER NOT NULL,
PRIMARY KEY (TOVARID)
);

    Вот как этот запрос выглядит в утилите InteractiveSQL:


Рис.1. Запрос на создание таблицы Товары

    В InterBase нет такого типа как счетчик или Autoincrement. Выход из этой ситуации обеспечивается созданием так называемого генератора. Генератор - это хранящаяся в базе данных программа, выдающая при каждом обращении к ней уникальное число. Для каждого автоинкрементного поля в базе данных создадим свой генератор.

    Для создания генератора используем запрос:

CREATE GENERATOR GEN_TOVAR;
где GEN_TOVAR - имя генератора.

    Создали генератор GEN_TOVAR. Теперь нам надо установить начальное значение генератора. Делается это следующим образом:

SET GENERATOR GEN_TOVAR TO 1;

    В этом случае начальное значение генератора установлено в 1.

    Свяжем генератор с конкретным полем у конкретной таблицы. Пусть это будет генератор для поля TOVARID таблицы TOVAR. Это можно сделать с помощью триггера. Триггер - это небольшая программа, которая выполняется в ответ на возникновение какого-либо события. В нашем случае сделаем так, чтобы триггер запускался перед вставкой новой строки в таблице TOVAR. Пишем запрос:

SET TERM !! ;
CREATE TRIGGER BEF_INS_TOVAR FOR TOVAR
ACTIVE 
BEFORE INSERT
AS
BEGIN
  NEW.TOVARID=GEN_ID(GEN_TOVAR, 1);
END!!
SET TERM ; !!

    Oсталось создать еще две таблицы - Организации и Продажи.

    Для создания справочника организаций пишем запрос:

CREATE TABLE FIRM
(
FIRMID INTEGER NOT NULL,
NAME VARCHAR(100) NOT NULL COLLATE PXW_CYRL,
PRIMARY KEY (FIRMID)
);

    Создаем генератор для таблицы:

CREATE GENERATOR GEN_FIRM;

    Устанавливаем начальное значение для генератора

SET GENERATOR GEN_FIRM TO 1;

    Привязываем генератор к таблице FIRM:

SET TERM !! ;
CREATE TRIGGER BEF_INS_FIRM FOR FIRM
ACTIVE 
BEFORE INSERT
AS
BEGIN
  NEW.FIRMID=GEN_ID(GEN_FIRM, 1);
END!!
SET TERM ; !!

    Теперь создаем таблицу Продажи и, соответственно, генератор для нее:

CREATE TABLE SALE
(
SALEID  INTEGER NOT NULL,
FIRMKOD   INTEGER NOT NULL,
TOVARKOD   INTEGER NOT NULL,
REM VARCHAR(100) COLLATE PXW_CYRL,
PRIMARY KEY (SALEID)
);

    Создаем генератор для таблицы:

CREATE GENERATOR GEN_SALE;

    Устанавливаем начальное значение для генератора:

SET GENERATOR GEN_SALE TO 1;

    "Привязываем" генератор к таблице SALE:

SET TERM !! ;
CREATE TRIGGER BEF_INS_SALE FOR SALE
ACTIVE 
BEFORE INSERT
AS
BEGIN
  NEW.SALEID=GEN_ID(GEN_SALE,1);
END!!
SET TERM ; !!

    База создана.

    На следующем шаге мы рассмотрим структуру приложения для работы с созданной базой.




Предыдущий шаг Содержание Следующий шаг