Форум: "Базы";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
ВнизВставка записи в таблицу Найти похожие ветки
← →
oradb (2005-09-05 13:33) [0]Есть таблица и генератор. Есть триггер на таблице BEFORE INSERT:
AS
begin
NEW.id = GEN_ID(productgroupgen, 1);
end
Если вставлять в таблицу запись через Query (insert into table(name) values("test")) - то все проходит нормально. Если я вставляю запись с помощью Table:
table.Active:=true;
table.Insert;
table.FieldByName("name").AsString:=NameEdit.Text;
table.Post;
то появляется сообщение о том, что не задано ключевое поле(id), то есть, такое ощущение, что не срабатывает триггер.
Почему так происходит и как этого избежать ?
← →
Zacho © (2005-09-05 14:07) [1]Читать http://www.ibase.ru/devinfo/generator.htm
← →
Anatoly Podgoretsky © (2005-09-05 14:21) [2]Так оно и есть, триггера срабатываю после проверки ограничений, а у тебя явно обязательное поле NOT NULL
А так ка ИБ не поддерживает автоинкриментных полей, то Дельфи не знает, что это автоинкриментное поле и пытается послать туда NULL.
А что тебя довело до жизни такой, как использование Table, возможно еще и БДЕ
← →
oradb (2005-09-05 14:28) [3]Прошу прощения за неточность - использую TIBTable.
Пока вижу такое решение - отдельной query получаю идентификатор, а потом использую TIBTable и полученный идентификатор.
← →
Os (2005-09-05 14:29) [4]AS
BEGIN
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(productgroupgen,1);
END
← →
Zacho © (2005-09-05 14:34) [5]Anatoly Podgoretsky © (05.09.05 14:21) [2]
Неверно. Триггер BEFORE срабатывает перед проверкой на NULL. А сообщение об ошибке выдаёт не IB, а Дельфи, поскольку у соответствующего поля Required:=true;
← →
Os (2005-09-05 14:44) [6]Тригер привязан к таблице в базе и срабатывает перед вставкой данных
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.034 c