Форум — Ответы     (  К темам )
 ?  Antey: Работа с автоинкриментными полями в FireBird (11-03-2003 10:23:09)
Господа помогите разобратся с автоинкриментніми полями.
Как с ними работать
 Владимир (11-03-2003 14:20:08)
Как таковых, autoinc полей в InterBase(FireBird) нет, для их
эмуляции обычно используют механизм генераторов и
триггеров или хранимых процедур.

Удобнее всего (для меня и моих знакомых) работать с FireBird,
используя компоненты прямого доступа (без BDE) FIBPlus, которые нужно
установить в палитру компонентов C++Builder
и используя IBExpert для создания объектов базы данных:
таблиц и их полей, генераторов, хранимых процедур, и т.д.

Далее, (например в IBExpert)
1/ создаете обычное целое поле (типа int), например
CREATE TABLE "Comp" (
ID INTEGER NOT NULL,
....

2/ Создаете генератор для этого поля
CREATE GENERATOR "GEN_Comp_ID";
SET GENERATOR "GEN_Comp_ID" TO 1;

3/ создаете хранимую процедуру SP_GEN_Comp_ID

CREATE PROCEDURE "SP_GEN_Comp_ID"
RETURNS (ID INTEGER)
AS
BEGIN
ID = GEN_ID("GEN_Comp_ID", 1);
END
которая будет изменять значение генератора (+1)
и присваивать новое значение вашему полю ID

(Все эти действия 1-3 выполняются автоматически в IBExpert при создании таблицы
и поля, в свойствах которого указываете AutoInc)

4/ В программе на С++Buider в компоненте TFIBDataSet (из FIBPlus)
указываете в свойствах инспектора объектов в AutoUpdateOptions:
например, компонент FIBDataSetComp для таблицы Comp

GeneratorName = GEN_Texnica_ID // имя генератора для autoinc поля
KeyFields = ID // имя autoinc поля
UpdateOnlyModifiedFields = true
UpdateTableName = "Comp" // имя таблицы с этим полем
WhenGetGenID = wgBeforePost // когда выполнить присвоение значания полю