Здравствуйте, Аноним, Вы писали:
А>Пишу:
Где именно пишешь? Кое-где может понадобиться
SET TERM ; ^
перед CREATE TRIGGER и
SET TERM ^ ;
после END;. Иначе парсер воспримет как команду только то, что до первой точки с запятой.
PS А вообще очень рекомендую
ibexpert. Для юзеров с локалью cp1251 — бесплатен.
Собстенно нужно сделать с помощью генератора и тригера Автоинкрементное поле...
Как это реализовать.... Уже все прописал.. Когда из Delphi подлючаю базу при вводе данных
автоинкрементное поле не создает порядковое значения и выдает ошибку о том что поле должно быть
заполнено
в таблице так:
CREATE TABLE F_TEST (
ID_F INTEGER NIT NULL PRIMARY KEY
NAME VARCHAR(24);
);
Почему не работает автоиктремент??
Здравствуйте, Аноним, Вы писали:
А>Почему не работает автоиктремент??
Варианта два.
Первый Отключить в дельфийском компоненте доступа 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
Минус — руками надо писать немного больше.