Dizapp |
Отправлено: 09.05.2006, 07:32 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
Создаю автоинкрементное поле средствами ibexpert. получаю CODE |
SET TERM ^;
CREATE TRIGGER DESCRIPTION_BI FOR DESCRIPTION
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.IDMODEL IS NULL) THEN
NEW.IDMODEL = GEN_ID(GEN_DESCRIPTION_ID,1);
END
^
SET TERM; ^
CREATE GENERATOR GEN_DESCRIPTION_ID;
SET GENERATOR GEN_DESCRIPTION_ID TO 1;
|
А как теперь с этим работать? Вот, например, нужно мне вставить новую запись в табличку, где это поле. Как записать значение в это поле, как вызвать эту процедуру из билдера? |
|
Dizapp |
Отправлено: 09.05.2006, 07:39 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
кстати С ДНЕМ ПОБЕДЫ !!!! |
|
Valdemar |
Отправлено: 10.05.2006, 08:04 |
|
Мастер участка
Группа: Участник
Сообщений: 433
|
Если вы создали триггер, который будет генерировать новое значение для поля, то при вставке новой записи значение этого поля задавать не надо. Оно само будет генерироваться и вставлятся.
Найдите книгу Мир Interbase. Посмотрите сайт http://www.ibase.ru. |
|
AVC |
Отправлено: 10.05.2006, 08:53 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE (Dizapp @ 09/05/2006, 06:32) | Создаю автоинкрементное поле
А как теперь с этим работать? Вот, например, нужно мне вставить новую запись в табличку, где это поле. |
Insert Into DESCRIPTION (IDMODEL) Values (Null)
Сработает условие
IF (NEW.IDMODEL IS NULL) THEN
NEW.IDMODEL = GEN_ID(GEN_DESCRIPTION_ID,1);
END
|
|
olegenty |
Отправлено: 11.05.2006, 09:51 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
от себя замечу, что при параметрическом запросе с числовым полем с клиента может прийти не NULL, а 0 (зависит от компонентов доступа).
Отредактировано olegenty — 11/05/2006, 10:51
|
|
avc* |
Отправлено: 11.05.2006, 10:47 |
|
Не зарегистрирован
|
Это бывает и не при параметрическом. Надо разбирать систему умолчаний (не занимался для FB)
Бывает так: при описании таблицы
Create table a22
(aaid integer default 0 not null
,aastr varchar2(20)
)
Команда Insert Into avc.a22 (aastr) Values ('qqq')
добавляет строку 0. qqq
Команда Insert Into avc.a22 (aaid, aastr) Values (Null, 'www')
если триггер проанализирует aaid is null — то как скажет триггер
иначе сработает костраинт not null
|
|
olegenty |
Отправлено: 11.05.2006, 11:50 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
ну про умолчания отдельная история, я именно про компоненты доступа говорю: нарывался.
а умолчания в Firebird применяются ПЕРЕД срабаыванием триггера на INSERT.
|
|