В начало

Создание генераторов в test

            Так как в базах Interbase нет автоинкрементальных полей. Вместо них с той же целью используются генераторы. И располагаются они в разделе «Generators»  дерева сервера.

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

            Для создания генераторов можно воспользоваться утилитой «Interactive SQL», которая вызывается из «IBConsole» в главном меню, в разделе «ToolsInteractive SQL…».

            Итак, создадим для базы «test» несколько генераторов и установим для них начальные значения, т.е. установим их в «0».

CREATE GENERATOR GEN_CAR;

SET GENERATOR GEN_CAR TO 0;

commit;

CREATE GENERATOR GEN_CLIENT;

SET GENERATOR GEN_CLIENT TO 0;

commit;

CREATE GENERATOR GEN_GRAFWORK;

SET GENERATOR GEN_GRAFWORK TO 0;

commit;

CREATE GENERATOR GEN_OPERATION;

SET GENERATOR GEN_OPERATION TO 0;

commit;

CREATE GENERATOR GEN_PERSONAL;

SET GENERATOR GEN_PERSONAL TO 0;

commit;

CREATE GENERATOR GEN_SERVICE;

SET GENERATOR GEN_SERVICE TO 0;

commit;

CREATE GENERATOR GEN_TSERVICE;

SET GENERATOR GEN_TSERVICE TO 0;

commit;

            В принципе установка в «0» мне кажется не особо нужна, т.к. при создании нового генератора его значение и так обнуляется.

            Таким образом были созданы семь генераторов, по одному на имеющуюся в базе «test» таблицу.

Рис. 1. Генераторы базы «test»

            Для того чтобы привязать генератор к конкретному полю надо выполнить в утилите «Intaractive SQL» следующий код

SET TERM !!;

CREATE TRIGGER "BEF_INS_CAR" FOR "CAR"

ACTIVE BEFORE INSERT

AS

BEGIN

NEW.CARID = GEN_ID(GEN_CAR,1);

END!!

SET TERM ;!!

commit;

            Также можно создать и другие триггеры.

SET TERM !!;

CREATE TRIGGER "BEF_INS_CLIENT" FOR "CLIENT"

ACTIVE BEFORE INSERT

AS

BEGIN

NEW.CLIENTID = GEN_ID(GEN_CLIENT,1);

END!!

SET TERM ;!!

commit;

SET TERM !!;

CREATE TRIGGER "BEF_INS_GRAFWORK" FOR "GRAFWORK"

ACTIVE BEFORE INSERT

AS

BEGIN

NEW.WORKID = GEN_ID(GEN_GRAFWORK,1);

NEW.DATA = 'TODAY';

END!!

SET TERM ;!!

commit;

SET TERM !!;

CREATE TRIGGER "BEF_INS_OPERATION" FOR "OPERATION"

ACTIVE BEFORE INSERT

AS

BEGIN

NEW.OPERID = GEN_ID(GEN_OPERATION,1);

NEW.DATA = 'TODAY';

END!!

SET TERM ;!!

commit;

SET TERM !!;

CREATE TRIGGER "BEF_INS_PERSONAL" FOR "PERSONAL"

ACTIVE BEFORE INSERT

AS

BEGIN

NEW.PERSONALID = GEN_ID(GEN_PERSONAL,1);

END!!

SET TERM ;!!

commit;

SET TERM !!;

CREATE TRIGGER "BEF_INS_SERVICE" FOR "SERVICE"

ACTIVE BEFORE INSERT

AS

BEGIN

NEW.SERVICEID = GEN_ID(GEN_SERVICE,1);

END!!

SET TERM ;!!

commit;

SET TERM !!;

CREATE TRIGGER "BEF_INS_TSERVICE" FOR "TSERVICE"

ACTIVE BEFORE INSERT

AS

BEGIN

NEW.TSERVICEID = GEN_ID(GEN_TSERVICE,1);

END!!

SET TERM ;!!

commit;

            То, что триггеры прописались, где надо можно посмотреть в свойствах таблицы.

Рис. 2. Триггер таблицы «CAR»