Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.07;
Скачать: CL | DM;

Вниз

Как создать уникальное значение поля в 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
1-20625
Zhuchok
2003-07-25 01:53
2003.08.07
TaskBar


7-20816
Sectey
2003-05-26 10:19
2003.08.07
Виртуальный файл.


1-20508
Саня
2003-07-23 12:54
2003.08.07
Memo


1-20468
R
2003-07-25 03:20
2003.08.07
Вопросы по PopupMenu


3-20388
td
2003-07-15 23:24
2003.08.07
Lookup