C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
автоинкремент в IBExpert, как его использовать
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.

Вернуться в Работа с базами данных в C++Builder