Ошибка создания тригера в Interbase!
От: Аноним  
Дата: 15.04.06 07:17
Оценка:
При создании тригера в Interbase возникает ошибка:

Пишу:

CREATE TRIGGER TTT FOR MYTABLE
ACTIVE
BEFORE INSERT AS
BEGIN
NEW.ITEMNO=GEN_ID(MY_GEN, 1);
END;

В ответ выдает ошибку:

Dynamic SQL Error
SQL error code = -104
Unexpected end of command
Statement: CREATE TRIGGER TTT FOR MYTABLE
ACTIVE
BEFORE INSERT AS
BEGIN
NEW.ITEMNO=GEN_ID(MY_GEN, 1)

В чем дело?? Помогите решить проблему!
Re: Ошибка создания тригера в Interbase!
От: Пацак Россия  
Дата: 15.04.06 07:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Пишу:


Где именно пишешь? Кое-где может понадобиться

SET TERM ; ^


перед CREATE TRIGGER и

SET TERM ^ ;


после END;. Иначе парсер воспримет как команду только то, что до первой точки с запятой.

PS А вообще очень рекомендую ibexpert. Для юзеров с локалью cp1251 — бесплатен.
Ку...
Re[2]: Ошибка создания тригера в Interbase!
От: Аноним  
Дата: 15.04.06 07:57
Оценка:
Собстенно нужно сделать с помощью генератора и тригера Автоинкрементное поле...

Как это реализовать.... Уже все прописал.. Когда из Delphi подлючаю базу при вводе данных
автоинкрементное поле не создает порядковое значения и выдает ошибку о том что поле должно быть
заполнено

в таблице так:


CREATE TABLE F_TEST (
ID_F INTEGER NIT NULL PRIMARY KEY
NAME VARCHAR(24);
);

Почему не работает автоиктремент??
Re[3]: Ошибка создания тригера в Interbase!
От: Пацак Россия  
Дата: 15.04.06 08:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Почему не работает автоиктремент??


Варианта два.

Первый Отключить в дельфийском компоненте доступа Required у поля ID_F. После чего передавать в него NULL, а в триггере обрабатывать, примерно так (не проверял, но на вид вроде оно)
SET TERM ^ ;
CREATE TRIGGER TTT FOR MYTABLE
ACTIVE BEFORE INSERT AS
BEGIN
  if (NEW.ID_F is NULL) 
    NEW.ID_F=GEN_ID(MY_GEN, 1);
END;
SET TERM ; ^

Плюс — меньше мороки
Минус — ключ будет получаться на сервере и клиенту придется рефрешить весь датасет чтоб обновить нужную запись.

Второй Получать ключ на клиента и задавать его руками через присвоение значения нужному TField. Получать — примерно так:
SELECT GEN_ID(MY_GEN, 1) as NEW_ID FROM RDB$DATABASE

Плюс — если компонент доступа это поддерживает, то при вставке будет рефрешиться только одна запись, та, для которой мы задали ID_F
Минус — руками надо писать немного больше.
Ку...
Re: Ошибка создания тригера в Interbase!
От: ShPRO_TT Россия  
Дата: 15.04.06 18:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>При создании тригера в Interbase возникает ошибка:


А>Пишу:


А>CREATE TRIGGER TTT FOR MYTABLE

А>ACTIVE
А>BEFORE INSERT AS
А>BEGIN
А> NEW.ITEMNO=GEN_ID(MY_GEN, 1);
А>END;

А>В ответ выдает ошибку:


А>Dynamic SQL Error

А>SQL error code = -104
А>Unexpected end of command
А>Statement: CREATE TRIGGER TTT FOR MYTABLE
А>ACTIVE
А>BEFORE INSERT AS
А>BEGIN
А> NEW.ITEMNO=GEN_ID(MY_GEN, 1)

А>В чем дело?? Помогите решить проблему!


Необходимо зайти в Edit->Option...и поле Terminator оставить пустым!
У меня так заработало!
По вопрсам InterBase обращайтесь на ICQ#: 283-816-077
Чем смогу — помогу!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.