Форум — Ответы ( К темам )
? | 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 // когда выполнить присвоение значания полю |