Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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 ? Какой смысл ?




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2003.08.07;
Скачать: [xml.tar.bz2];




Наверх







Память: 0.76 MB
Время: 0.035 c
14-20783          Best Gun              2003-07-21 21:27  2003.08.07  
Вот это да. Что это?


14-20772          Gorlum                2003-07-21 17:11  2003.08.07  
Firebird


1-20481           Yuraz                 2003-07-25 10:24  2003.08.07  
Мастера, помогите, почему у меня в цикле не


6-20654           Basilio               2003-05-30 09:58  2003.08.07  
Проблемы с записью в сокет непосредственно после его открытия


14-20699          vidiv                 2003-07-23 13:23  2003.08.07  
Почему PHP так сказал?