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

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

Значение поля, полученное генератором [D6, IB6.x]


Страницы:   1 2

i ©   (2002-08-21 15:27:00) 

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


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

Thanks


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

В триггере ставишь проверку:
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.


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

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


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

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


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

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


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

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


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

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


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

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


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

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

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


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

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


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

i (21.08.02 16:54)

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


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

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


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

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


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

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


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

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


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

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


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

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

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

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


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

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


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

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


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

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


Страницы:   1 2

Наверх

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