ExplodeMan |
Отправлено: 11.08.2004, 13:25 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 18
|
совсем недавно взялся изучать interbase. сразу же весьма удивил громоздкий механизм реализации автоинкремента в этой БД. вроде разобрался, но запустить аутоинк не получается. хотя, вроде, всё правильно:
//создал таблицу
CREATE TABLE CLIENT (
ID INTEGER NOT NULL,
FIO CHAR(25) CHARACTER SET WIN1251 NOT NULL,
CONSTRAINT CLIENT_PK PRIMARY KEY (ID)
);
//триггер
CREATE TRIGGER TRIG_GEN_CLIENT
ACTIVE BEFORE INSERT POSITION 0
AS
begin
if(new.id is null) then
new.id=gen_id(gen_client,1);
end
//генератор
CREATE GENERATOR GEN_CLIENT
set generator GEN_CLIENT to 1
в качестве сервера использую fb 1.0.2.
кто знает, подскажите что здесь не так? третий день уже долблюсь с этой ерундой
|
|
olegenty |
Отправлено: 11.08.2004, 13:55 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
ну в приведённом сорце ошибка в синтаксисе реализации триггера.
а механизм не громоздкий, а замечательный, удобнее, чем где либо. потому что на одну таблицу можно назначать более одного генератора, т.е. более одного автоинкрементного поля.
поставь себе ibexpert, скачай с http://www.ibexpert.com/download — для русских бесплатен. он тебе всё это автоматически создаст.
|
|
Simai |
Отправлено: 11.08.2004, 13:58 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 15
|
У меня InterBase 6.0 и из оболочки (IB Expert) все работает.
Насколько я понял у тебя auto -increment не работет уже из проги.
Теоретически можно сделать процедуру вида
CREATE PROCEDURE GEN_ID
RETURNS (
N INTEGER)
AS
begin
N=GEN_CLIENT(gen_id,1);
end
и вызывать её при вставки новой записи
|
|
ExplodeMan |
Отправлено: 11.08.2004, 16:27 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 18
|
2olegenty
сорри, это я недописал. триггер у меня так описан:
CREATE TRIGGER TRIG_GEN_CLIENT for client
ACTIVE BEFORE INSERT POSITION 0
AS
begin
if(new.id is null) then
new.id=gen_id(gen_client,1);
end
ibexpert скачал, то же самое....
2Simai
в ibexpertе тоже при вставке поле id не заполняется.....
|
|
olegenty |
Отправлено: 12.08.2004, 07:06 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Там всё работает. Я проект щас сдаю на Yaffil...
Опиши подробно проблему: где и что не заполняется после каких действий...
|
|
ExplodeMan |
Отправлено: 12.08.2004, 15:12 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 18
|
olegenty, может я чё не так понимаю, но по идее, если в приведённом выше коде ошибок нет (а ibexpert все скрипты откомпилячил и говорит, что нет ошибок), то при добавлении новой записи:
1. запускается триггер TRIG_GEN_CLIENT
2. значение генератора увеличивается на единицу
3. в поле ID автоматом вставляется значение из генератора.
т.е. происходит то, что всем нам знакомо как банальный автоинкремент.
может я что то недопонимаю в идеологии интербейза?
|
|
olegenty |
Отправлено: 13.08.2004, 11:08 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
всё так, здесь я вижу только одни грабли:
CODE |
if(new.id is null) then...
|
у тебя точно NULL на входе? ты точно не воткнул туда значение по умолчанию???
|
|