Главная страница
    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.008 c
1-35686
delpher_gray
2002-09-02 14:35
2002.09.12
Компоненты


1-35740
murza
2002-08-26 12:21
2002.09.12
TStrings * не считывается из DFM


1-35754
Дядя Будда
2002-08-30 15:35
2002.09.12
Experts для Delphi


8-35825
Doom
2002-03-21 12:21
2002.09.12
Анализ WAV - файла


1-35665
Begin
2002-09-02 03:41
2002.09.12
Теоретический вопрос... Ну не хватает мне теоретических знаний :)





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