Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > Триггеры и копмоненты Borland


Автор: rOOxus 26.6.2007, 15:01
Например компонент TIBTable призводит вставку новой зписи в таблицу БД. В БД прописан триггер, который инкрементирует генратор для первичного ключа этой при вставке новой записи и писваивает клюевому полю значение генератора таблицы. Но триггер не работает! Пустое пустое и как следствие violation of primary key.
Может снег не идет или...?

Автор: Rodman 26.6.2007, 16:29
как выглядет триггер и как добавляешь???

Автор: rOOxus 27.6.2007, 08:18
Ну например есть табличка A_TABLE (PK KEY_ID Integer, TEXT Varchar(10))

Простейший триггер:
Код

CREATE TRIGGER A_TABLE_BI0 FOR A_TABLE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
    NEW.KEY_ID = GEN_ID(GEN_A_TABLE_ID,1);
END

Ну а в клиентском приложении IBTable с ней связанный, ну там DataSourceи и DBGrid. По идее при вставке новой записи при помощи DBGrid должен срабатывать триггер заполнять поле KEY_ID новым инкрементированным значением генератора GEN_A_TABLE_ID. А хренушки. :(

Автор: Zan_ZaraBear 18.8.2007, 16:00
А вот и не хренушки smile

триггер:
Код

CREATE TRIGGER TR_TABLE1_B FOR TABLE1
ACTIVE BEFORE  INSERT POSITION 0
AS

begin
if (NEW.ID IS NULL) then
   NEW.ID = GEN_ID(GEN_TABLE1_ID,1);
end


Сгенерированное значение можно увидеть после подтверждения транзакции и refresh данных.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)