Форум: "Базы";
Поиск по всему сайту: 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.039 c
14-20776          terra                 2003-07-20 23:51  2003.08.07  
Pascal и микроконтроллеры


14-20780          Зозуля Юрий           2003-07-21 02:20  2003.08.07  
Хватит засовывать иконки в трей!


3-20411           captive               2003-07-15 17:15  2003.08.07  
Преобразование типов в IB


14-20798          cjiohobaji            2003-07-22 13:28  2003.08.07  
ширина колонок у DBGrid a


3-20406           Филипп                2003-07-16 14:04  2003.08.07  
База данных ACCESS