![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вставка записи в таблицу [D7, IB6.x]
oradb © (2005-09-05 13:33:00)Есть таблица и генератор. Есть триггер на таблице 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), то есть, такое ощущение, что не срабатывает триггер.
Почему так происходит и как этого избежать ?
Os (2005-09-05 14:44:00) [1]Тригер привязан к таблице в базе и срабатывает перед вставкой данных
Zacho (2005-09-05 14:34:00) [2]Anatoly Podgoretsky © (05.09.05 14:21) [2]
Неверно. Триггер BEFORE срабатывает передпроверкой на NULL. А сообщение об ошибке выдаёт не IB, а Дельфи, поскольку у соответствующего поля Required:=true;
Os (2005-09-05 14:29:00) [3]AS
BEGIN
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(productgroupgen,1);
END
oradb (2005-09-05 14:28:00) [4]Прошу прощения за неточность - использую TIBTable.
Пока вижу такое решение - отдельной query получаю идентификатор, а потом использую TIBTable и полученный идентификатор.
Anatoly Podgoretsky (2005-09-05 14:21:00) [5]Так оно и есть, триггера срабатываю после проверки ограничений, а у тебя явно обязательное поле NOT NULL
А так ка ИБ не поддерживает автоинкриментных полей, то Дельфи не знает, что это автоинкриментное поле и пытается послать туда NULL.
А что тебя довело до жизни такой, как использование Table, возможно еще и БДЕ
Zacho (2005-09-05 14:07:00) [6]Читать http://www.ibase.ru/devinfo/generator.htm