Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.007 c
1-20561
bkatrin
2003-07-23 19:02
2003.08.07
QReport


14-20782
Карлсон
2003-07-22 00:51
2003.08.07
Война и Мир - вольные каменщики.


1-20599
Pauk
2003-07-24 14:03
2003.08.07
Popup


14-20684
Nemra
2003-07-19 17:21
2003.08.07
OutLook


8-20633
Boriss
2003-04-14 15:31
2003.08.07
32 bits -> 24 bits





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский