Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Вниз

Автоинкрементное поле   Найти похожие ветки 

 
Erich   (2005-06-07 22:46) [0]

Требуется помощь: в таблице, используя IBExper задаю автоинкрементное поле ID,
задавая генератор :

CREATE GENERATOR "GEN_Students_ID";
SET GENERATOR "GEN_Students_ID" TO 1;

При этом, никак не вижу его работы : в программе, при вставке новой записи "INSERT INTO "Students" SET ... ", приходится задавать значение поля ID, хотя как я думаю оно должно автоматически теперь генерится?!

Запросы шлю через IBQuery.

Как тут правильно плясать?


 
ANB ©   (2005-06-08 00:01) [1]

Ответ не дам, но по сути - запости скрипт, которым таблицу создавал.


 
Erich   (2005-06-08 01:49) [2]

Мммда...


 
ЮЮ ©   (2005-06-08 04:13) [3]

>хотя как я думаю оно должно автоматически теперь генерится?!

а что, в CREATE GENERATOR видно для каких целей он должен пользоваться? :)


 
Erich   (2005-06-08 07:27) [4]

Для реализации автоинкремента :)
Но не происходит этого при вставке новой записи :(


 
Zacho ©   (2005-06-08 07:31) [5]

2 Erich : читать http://www.ibase.ru/devinfo/generator.htm


 
Desdechado ©   (2005-06-08 11:04) [6]

1. в INSERT можно указыватьне все поля
2. в INSERT нет токена SET
3. создай триггер BEFORE INSERT на таблицу
4. www.ibase.ru до полного просветления


 
TAN_K   (2005-06-08 11:37) [7]

Если создать триггер перед вставкой , то генератор не надо увеличивать на 1 :
IF (NEW.KOD IS NULL) THEN
   NEW.KOD = GEN_ID(GEN_DOK_OBR_ID,0);
В хранимой процедуре вставки записи надо добавить значение кода :
KOD = gen_id(gen_dok_id,1);
 INSERT INTO DOK_OBR (
   NAIM)
 VALUES (
   :NAIM);


 
Sergey13 ©   (2005-06-08 11:46) [8]

2[7] TAN_K   (08.06.05 11:37)
>Если создать триггер перед вставкой , то генератор не надо увеличивать на 1 :
IF (NEW.KOD IS NULL) THEN
  NEW.KOD = GEN_ID(GEN_DOK_OBR_ID,0);

Это почему же?


 
Johnmen ©   (2005-06-08 13:58) [9]

>Sergey13 ©   (08.06.05 11:46) [8]
>Это почему же?

Чтобы код почти всех записей был одинаков...:)))


 
Erich   (2005-06-08 18:52) [10]

2 Desdechado,
Ошибся :)


 
kaif ©   (2005-06-08 19:08) [11]

1.Генератор - это просто глобальная переменная, находящаяся вне транзакций.
2.Автоинкрементных полей в IB не существует.
3.Значение генератора следует запросить так, чтобы заодно его увеличить gen_id(<генератор>, 1), чтобы другие транзакции уже сразу имели дело с новым значением и так гарантировалась уникальность значения, присвиваемого полю ID.
4. Полю значение присваивается при помощи SQL-запросов, например, в команде INSERT.
5. Запросить значение генератора можно в хранимой процедуре, которая делает вставку записи в таблицу и вернуть это значение через выходной параметр хранимой процедуры в клиентское приложение. Или же можно использовать свойство Generator компонентов IBX, тогда клиентское приложение, прежде, чем делать вставку, само запросит генератор. Как правило клиентскому приложению бывает нужно знать значение ID, чтобы суметь найти только что вставленную запись и отобразить ее в своих формах или сетках. Поэтому я не рекомендую заниматься этим делом в триггерах. Хотя масса литературы почему-то рекомендует именно заниматься эти в триггерах. ИМХО, это глупость. В триггерах обращаться к генератору можно лишь в совершенно определенных задачах - где нет необходимости сразу после вставки записи знать ID. Например, если запись имеет некий альтернативный ключ, по которому ее можно однозначно найти или же если это какая-то массовая вставка данных, когда ID вообще не важно знать on-line.



Страницы: 1 вся ветка

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

Наверх





Память: 0.47 MB
Время: 0.039 c
14-1118898728
syte_ser78
2005-06-16 09:12
2005.07.18
Опять аквариумом решил занятся.


1-1120045416
KorD
2005-06-29 15:43
2005.07.18
Как получить сокращенный путь к каталогу?


3-1118161850
Alex Romanskiy
2005-06-07 20:30
2005.07.18
Как в InterBase получить текущее значение генератора?


3-1118169990
Erich
2005-06-07 22:46
2005.07.18
Автоинкрементное поле


3-1118052125
Леонид
2005-06-06 14:02
2005.07.18
SQL запрос





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский