![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
AutoIncrement [D7, IB6.x]
Астроном © (2004-08-28 10:21:00)Как создать триггер/процедуру/генератор для правильного авто-инкремента для поля типа Integer?
Zacho (2004-08-29 14:26:00) [1]Прочитай http://www.ibase.ru/devinfo/generator.htm- там все очень подробно написано.
Сергей Бастрыгин (2004-08-29 11:26:00) [2]Триггер у тебя пропустил без внимания, он сработает только если не указывать никакого значения при вставке при проверке на NULL, у тебя где-то кто-то ставит 0, посмотри внимательно
Астроном (2004-08-29 04:27:00) [3]Пользуюсь IBExpert, создаю генератор:
CREATE GENERATOR GEN_AGENTS_CODE;
SET GENERATOR GEN_AGENTS_CODE TO 1;
затем создаю триггер:
CREATE TRIGGER AGENTS_BI FOR AGENTS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.CODE IS NULL) THEN
NEW.CODE = GEN_ID(GEN_AGENTS_CODE,1);
END
Создаю приложение на Делфях, создаю запись Query.Insert,
но полю CODE присваивается "0" :(
Что не так делаю?
З.Ы. Кстати, где можно достать FIBPlus для D7?
Koala (2004-08-28 19:17:00) [4]Воспользуйся IBExpert, там при создании таблицы тригер и генератор можно создать автоматически на автоинкрементное поле с указанием номера с какого нужно начать
Vemer (2004-08-28 17:37:00) [5]Варианты:
1) Триггер
2) Свойство GenetatorField IBQuery / IBDataset.
3) Select GEN_ID(My_Gen,1) при вставке из ХП.
Применение 2-х последних делают позволяет мне отказаться от первого. Но конечно зависит от задачи.
Сергей Бастрыгин (2004-08-28 12:39:00) [6]CREATE TRIGGER CALLS_BI FOR CALLS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.CDCALL IS NULL) THEN
NEW.CDCALL = GEN_ID(GEN_CALLS,1);
ELSE
IF(NEW.CDCALL > GEN_ID(GEN_CALLS,0)) THEN
NEW.CDCALL =GEN_ID(GEN_CALLS,NEW.CDCALL -GEN_ID(GEN_CALLS,0));
END