Форум: "Базы";
Текущий архив: 2003.08.07;
Скачать: [xml.tar.bz2];
ВнизКак создать уникальное значение поля в InterBase Найти похожие ветки
← →
ruslan_as (2003-07-16 09:31) [0]Для создания кода абонента нужно создать поле в котором автоматически присваивался уникальный код.
Пользуюсь (select max(KOD) from Abonent)+1 - что весьма не корректно!!!
Пользуясь советами на странице http://www.codenet.ru/db/unique.php я создал генератор, но разобраться как сделать, что бы этот генератор добавлял значение в нужную таблицу и нужное мне поле не могу...
За ранее спасибо, всем кто поможет новичку в InterBase!
← →
Ann (2003-07-16 09:35) [1]а что именно не получается?
там же есть о том, как добавлять значение:
CREATE PROCEDURE <имя процедуры>
RETURNS (ID INTEGER)
AS
BEGIN
ID = GEN_ID( <имя генератора>, <приращение генератора>);
END !!
эта процедура вернет тебе приращенное значение генератора, вот и используй ее для записи в нужную таблицу...
← →
Жук (2003-07-16 09:40) [2]1) Триггер
2) Запрос на клиенте
3) Настроить TIBDataSet
ЗЫ.
> Ann © (16.07.03 09:35)
Это лишнее. Зачем процедуры городить ?
← →
SYSKeeper (2003-07-16 09:50) [3]Вот так создаёш генератор:
CREATE GENERATOR "имя_генератора";
SET GENERATOR "имя_генератора" TO 1;
здесь 1 - начальное значение ген-ра при его создании
А вот так тригер, который будет увеличивать значение инкрементного поля на 1 каждый раз при INSERT"e:
CREATE TRIGGER "имя_тригера" FOR "имя_таблицы"
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.имя_инкрементного_поля IS NULL) THEN
NEW.имя_инкрементного_поля = GEN_ID("имя_генератора",1);
END
здесь 1 - насколько увеличивать значение
← →
Ann (2003-07-16 09:51) [4]
> Жук © (16.07.03 09:40)
я просто кусок кинула из той ссылки которую он привел..
Кстати,не помню на каком сайте читала, что для генераторов лучше использовать процедуры.. Насколько это правильно?
← →
HSolo (2003-07-16 09:53) [5]Процедуры - может, и не лишнее, смотря какая задача. Только процедура от Ann ничего Вам не вернет, ибо пропущен suspend
CREATE PROCEDURE <имя процедуры>
(параметры)
RETURNS (ID INTEGER)
AS
BEGIN
...
ID = GEN_ID( <имя генератора>, <приращение генератора>);
...
SUSPEND;
END
← →
ruslan_as (2003-07-16 10:14) [6]>>Ann ©
1. Если я правильно понял, то для каждой таблицы свой генератор?
2. Как обнулить генератор после своих эксперементов?
← →
SYSKeeper (2003-07-16 10:19) [7]1. Один генератор можно использовать и в нескольких таблицах.
2. SET GENERATOR "имя_генератора" TO новое_значение;
← →
Ann (2003-07-16 10:19) [8]
> ruslan_as © (16.07.03 10:14)
> >>Ann ©
> 1. Если я правильно понял, то для каждой таблицы свой генератор?
> 2. Как обнулить генератор после своих эксперементов?
1. Да.
2.SET GENERATOR <имя генератора> TO 0
← →
Johnmen (2003-07-16 11:32) [9]>Жук © (16.07.03 09:40)
>ЗЫ.
>> Ann © (16.07.03 09:35)
>Это лишнее. Зачем процедуры городить ?
Ну почему же лишнее. Вполне приемлемый вариант. Лично я его тоже использую...:)
>SYSKeeper © (16.07.03 09:50)
>Вот так создаёш генератор:
>CREATE GENERATOR "имя_генератора";
>SET GENERATOR "имя_генератора" TO 1;
Зачем же устанавливать в 1 ? Какой смысл ?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.08.07;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c