Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как создать уникальное значение поля в InterBase [D6, IB6.x]


ruslan_as ©   (2003-07-16 09:31:00) 

Для создания кода абонента нужно создать поле в котором автоматически присваивался уникальный код.
Пользуюсь (select max(KOD) from Abonent)+1 - что весьма не корректно!!!

Пользуясь советами на странице http://www.codenet.ru/db/unique.phpя создал генератор, но разобраться как сделать, что бы этот генератор добавлял значение в нужную таблицу и нужное мне поле не могу...
За ранее спасибо, всем кто поможет новичку в InterBase!


Johnmen   (2003-07-16 11:32:00) [1]

>Жук © (16.07.03 09:40)
>ЗЫ.
>> Ann © (16.07.03 09:35)
>Это лишнее. Зачем процедуры городить ?

Ну почему же лишнее. Вполне приемлемый вариант. Лично я его тоже использую...:)


>SYSKeeper © (16.07.03 09:50)
>Вот так создаёш генератор:

>CREATE GENERATOR "имя_генератора";
>SET GENERATOR "имя_генератора" TO 1;

Зачем же устанавливать в 1 ? Какой смысл ?


SYSKeeper   (2003-07-16 10:19:00) [2]

1. Один генератор можно использовать и в нескольких таблицах.
2. SET GENERATOR "имя_генератора" TO новое_значение;


Ann   (2003-07-16 10:19:00) [3]


> ruslan_as © (16.07.03 10:14)
> >>Ann ©
> 1. Если я правильно понял, то для каждой таблицы свой генератор?
> 2. Как обнулить генератор после своих эксперементов?

1. Да.
2.SET GENERATOR <имя генератора> TO 0


ruslan_as   (2003-07-16 10:14:00) [4]

>>Ann ©
1. Если я правильно понял, то для каждой таблицы свой генератор?
2. Как обнулить генератор после своих эксперементов?



HSolo   (2003-07-16 09:53:00) [5]

Процедуры - может, и не лишнее, смотря какая задача. Только процедура от Ann ничего Вам не вернет, ибо пропущен suspend

CREATE PROCEDURE <имя процедуры>
(параметры)
RETURNS (ID INTEGER)
AS
BEGIN
...
ID = GEN_ID( <имя генератора>, <приращение генератора>);
...
SUSPEND;
END


Ann   (2003-07-16 09:51:00) [6]


> Жук © (16.07.03 09:40)

я просто кусок кинула из той ссылки которую он привел..
Кстати,не помню на каком сайте читала, что для генераторов лучше использовать процедуры.. Насколько это правильно?


SYSKeeper   (2003-07-16 09:50:00) [7]

Вот так создаёш генератор:

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 - насколько увеличивать значение


Жук   (2003-07-16 09:40:00) [8]

1) Триггер
2) Запрос на клиенте
3) Настроить TIBDataSet

ЗЫ.
> Ann © (16.07.03 09:35)

Это лишнее. Зачем процедуры городить ?


Ann   (2003-07-16 09:35:00) [9]

а что именно не получается?
там же есть о том, как добавлять значение:

CREATE PROCEDURE <имя процедуры>
RETURNS (ID INTEGER)
AS
BEGIN
ID = GEN_ID( <имя генератора>, <приращение генератора>);
END !!
эта процедура вернет тебе приращенное значение генератора, вот и используй ее для записи в нужную таблицу...


Наверх

Титульная страница Поиск, карта сайта Написать письмо