stikriz » 17.09.2010 09:27:00
Вообще, если с самого начала, то делать надо так:
CREATE SEQUENCE GEN_NEW_TABLE_ID;
ALTER SEQUENCE GEN_NEW_TABLE_ID RESTART WITH 0;
CREATE OR ALTER TRIGGER NEW_TABLE_BI FOR NEW_TABLE
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.id is null) then
new.id = gen_id(gen_new_table_id,1);
end
create trigger new_table_bi for new_table
active before insert position 0
as
begin
if (new.new_field is null) then
new.new_field = gen_id(gen_new_table_id,1);
end
И при вставке записи вызывать тригер, если нужно получить ID. Обычно, компоненты поддерживают вызов тригера автоматом. Если нет - ручками сами вызывайте.
Добавлено спустя 54 минуты 55 секунд:
Два раза тригер вставил, звиняйте.
create procedure sp_gen_new_table_id
returns (id integer)
as
begin
id = gen_id(gen_new_table_id, 1);
suspend;
end
Вот эту процедуру надо дергать перед вставкой записи и значение присваивать полю с ID.
Кстати, IBExpert так все сам называет, что вычислить имя процедуры можно по имени таблицы легко.