![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Автоинкрементные поля в Interbase [D5, IB5.x]
kalliopiy © (2003-01-24 16:13:00)Здравствуйте!
Существует следующая проблема: при работе с таблицей Interbase через спец. компоненты (TIBDatabase, TIBTransaction, TIBTable), делаю для нее сначала Insert, потом после заполнения полей делаем Post, но что-то автоинкрементное поле (для которого должен срабатывать триггер и он таки срабатывает) не обновляет своего значения, т.е. так и остается Null-ом. Что же делать?
Sergey Masloff (2003-01-24 20:37:00) [1]kalliopiy ©
>Странно, но попробую!
Ничего странного. Абсолютно стандартный метод работы...
kalliopiy (2003-01-24 18:58:00) [2]Странно, но попробую!
Т.е. с использованием триггера эту проблему не решить?
jack128 (2003-01-24 18:37:00) [3]совсем :)
select gen_id(<generator_name>,1) from rdb$database
kalliopiy (2003-01-24 18:35:00) [4]Хорошо, а как заранее получить этот самый ID?
Что, получается триггер совсем не нужен?
jack128 (2003-01-24 18:26:00) [5]Может я туплю, но если ты заранее получаешь ID заявки то проблем не будет... requestT["id"] будет равен полученному тобой значению, а не Null"ю
kalliopiy (2003-01-24 18:06:00) [6]Вобщем-то, тут проблема не совсем в этом... Объясню поконкретнее.
Итак, есть некоторая таблица заявок requestsT и подчиненная таблица, скажем, товаров goodsT. Есть кнопочка "Новая заявка" - жмем на нее и в соотв. обработчике выполняется
requestsT.Insert
Ну, на форме заполняем всяческие атрибуты этой заявки, а также на этой форме есть список товаров для данной заявки и кнопочка (среди прочих) "Добавить товар". Поскольку таблицы связаны, то хочется написать в OnClick"e этой кнопки что-то типа
goodsT.Insert;
goodsT["requestID"]:=requestsT["id"];
good.ShowGoodForm; //показываем форму для добавляемого товара
Но вот тут-то и происходит неприятность, т.к. requestsT["id"]=Null (ведь заявка сама только что была добавлена). Пробую передgoodsT.InsertсделатьrequestsT.Post- все равно не помогает, т.е. requestsT["id"] и после Поста равно Null.
Вот что происходит, вкратце... Что посоветуете?
jack128 (2003-01-24 17:39:00) [7]не понял проблемы
ты получил новый id(допустим 66)
другой юзер получил новый Id(67) и вставил запись в таблицу.
ты вставил свою запись в таблицу.
И чего здесь н катит?
kalliopiy (2003-01-24 17:21:00) [8]Не-а, это не решение...
Сначала (забалговременно) получим следующее значение генератора, а сразу после этого какой-нибудь другой юзер возьмет и запишет чего-то в таблицу. И что делать? Наше полученное значение уже не покатит, т.к. будет меньше на 1 чем нужно...
Johnmen (2003-01-24 16:43:00) [9]Получить следующее значение генератора заблаговременно, а не получать его в триггере...