Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вернуть значение поля после инсерта / 5 сообщений из 5, страница 1 из 1
24.08.2003, 11:32
    #32245547
Вернуть значение поля после инсерта
Имеется довольно приличная по количеству записей таблица, назовем ее MYTABLE. Добавляю в нее очередную запись, ну хотя бы так:

Код: plaintext
1.
INSERT INTO MYTABLE (MTB_DATE, MTB_NAME)
VALUES (:Today, :Name) 

Поле MTB_ID автогенериться при помощи связки триггер+генератор.

Так вот, очень хочется после добавления записи узнать значение, попавшее в MTB_ID.
Как его можно выцепить?
...
Рейтинг: 0 / 0
24.08.2003, 11:34
    #32245548
Вернуть значение поля после инсерта
Если мне не изменяет память на ORACLE это делается так:

Код: plaintext
INSERT bla-bla-bla RETURN ...
...
Рейтинг: 0 / 0
24.08.2003, 11:41
    #32245550
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть значение поля после инсерта
в иб/фб это делается иначе...
имхо, довольно геморно...

в триггере делаешь не
new.key_id=gen_id(gen_name,1);

a

if (new.key_id is null) then
new.key_id=gen_id(gen_name,1);

а на клиенте делаешь сначала
select gen_id(gen_name) from RDB$DATABASE

полученное значение инсеритшь вместе с остальными полями в таблицу....
...
Рейтинг: 0 / 0
25.08.2003, 14:53
    #32246340
oz
oz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть значение поля после инсерта
Тема очень актуальна. При работе например с Oracle через DOA ид для последней вставленной записи хранится в датасэте. Я использую FibPlus. Если кто знает, где плюсы хранят это занчение, то буду очень признателен за инф.
...
Рейтинг: 0 / 0
26.08.2003, 13:45
    #32247526
oz
oz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть значение поля после инсерта
Да, собственно, плюсы именно эту проблему решают просто.
В DataSet необходимо настроить AutoApdateOptions (GeneratorName - собственно имя генератора, KeyField - первичный ключ, WhenGetGenID - wgBeforePost).
При DataSet.Insert добавится пустая строка в датасэт, а в поле с первичным ключем - значение из генератора. Поскольку по умолч. при инсерте указатель будет именно на этой записи, значит новый ид можно брать прямо из датасэта.
ЗЫ: при использовании триггера не забыть поставить проверку на вставку нула в PK.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вернуть значение поля после инсерта / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]