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

Вниз

Значение поля, полученное генератором   Найти похожие ветки 

 
i   (2002-08-21 15:27) [0]

Подскажите пожалуйста. Как можно получить значение поля, только что вставленной записи, формируемое при помощи генератора? Заранее спасибо.


 
Johnmen   (2002-08-21 15:40) [1]

Сначала узнавать значение генератора, а потом вставлять его...

Какие компоненты доступа ?


 
i   (2002-08-21 15:48) [2]

А если между узнаванием и вставкой кто-то успеет вставить свою запись?


 
Reindeer Moss Eater   (2002-08-21 15:52) [3]

Наздоровье, пусть вставляет. Лишь бы и он брал значение из генератора


 
i   (2002-08-21 15:52) [4]

IBSQL


 
i   (2002-08-21 16:04) [5]

В том то все и дело что тот другой делает вставки с использованием того же генератора, прописанного в триггере на вставку!


 
Reindeer Moss Eater   (2002-08-21 16:05) [6]

В таком случае где же здесь ты нашел проблему?


 
i   (2002-08-21 16:13) [7]

В чем суть. Есть таблица с внешним ключом на саму себя. Как заполнить значение внешнего ключа при вставке новой записи значением первичного ключа предыдущей записи. Обе вставки проиисходят в одной транзакции.


 
Reindeer Moss Eater   (2002-08-21 16:15) [8]

Тебе же уже сказали как:
Johnmen © (21.08.02 15:40)


 
i   (2002-08-21 16:39) [9]

Ответ неправильный. Может получиться так, что вставленная запись будет ссылаться не на ту запись какую надо.


 
Reindeer Moss Eater   (2002-08-21 16:45) [10]

Ответ правильный.

Получил значение генератора.
Вставил парент-запись с этим значением.
Получил значение генератора.
Вставил чайлд запись исползуя оба получееных значения генератора.

И где тут "может получиться так ...." ?


 
i   (2002-08-21 16:50) [11]

А как же другие, работающие с этой же базой? Они выполняют такие же вставки и пользуются теми же генераторами.


 
Reindeer Moss Eater   (2002-08-21 16:51) [12]

Бля! Ну и что из этого??????


 
Reindeer Moss Eater   (2002-08-21 16:52) [13]

У них будет все то же самое, кроме значений генераторов!


 
i   (2002-08-21 16:54) [14]

пока я буду вставлять запись с зараннее узнаным значением первичного ключа этот генератор уже изменится


 
Reindeer Moss Eater   (2002-08-21 16:57) [15]

И это хорошо! Для этого генераторы нам и даны.


 
Johnmen   (2002-08-21 16:59) [16]

i (21.08.02 16:54)

И что ? В чем же криминал ?


 
i   (2002-08-21 17:02) [17]

понятно. Спасибо за дискуссию.


 
Johnmen   (2002-08-21 17:02) [18]

Кажись я понял...

Убрать работу с генератором из триггера !


 
i   (2002-08-21 17:04) [19]

Не хочу убирать генератор из триггера.


 
i   (2002-08-21 17:05) [20]

точнее нельзя убирать


 
Val   (2002-08-21 17:13) [21]

>i (21.08.02 17:05)
весело тут у вас...
а почему нельзя, можно вынести в процедурку, натворить в ней дел и вызывать из триггера.


 
Johnmen   (2002-08-21 17:13) [22]

Тогда придется гиморойничать...:0)
вариант №1 - если есть уникальный индекс, вытащить по нему запись
вариант №2 - в триггер добавить соответствующий POST_EVENT и обрабатывать его


 
Reindeer Moss Eater   (2002-08-21 17:19) [23]

Да все просто на самом деле.
Нельзя убирать получение значения генератора из триггера - не убирай это.
НО!
В триггере анализируй новое значение ключевого поля. Если оно не NULL, не дергай генератор, а вставляй то, что пришло с клиента. Если нулл то получи новое значение генератора и вставь его.


 
Reindeer Moss Eater   (2002-08-21 17:21) [24]

При этом все записи, вставляемые приложением, которое "знает" о том, что в таблице "дерево" получат правильные ключи. А все записи, вставляемые например из WISQL не останутся без PK


 
Mambet   (2002-08-22 06:58) [25]

В триггере ставишь проверку:
if (new.NNN is null) then new.NNN = gen_id(TALMNNN, 1);

Перед вставкой записи получаешь значение генератора и увиличиваешь его на 1:
SELECT GEN_ID(TalmNnn,1) AS NEW_ID FROM RDB$DATABASE

Это значение и присваиваешь полю Nnn.


 
i   (2002-08-22 08:00) [26]

Thanks



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

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

Наверх




Память: 0.49 MB
Время: 0.007 c
14-35884
Вадим
2002-08-16 14:46
2002.09.12
Как реализовать?


14-35871
Карлсон
2002-08-17 23:40
2002.09.12
Какие книги стоит покупать, а какие - нет?


14-35863
BAY
2002-08-15 23:24
2002.09.12
Модемное соединение


3-35631
michael_b
2002-08-23 10:14
2002.09.12
Связывание таблиц


1-35666
DmitryNM
2002-08-31 18:38
2002.09.12
Ошибка вызова метода COM-сервера.





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