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

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

Автоинкрементные поля в 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]

Получить следующее значение генератора заблаговременно, а не получать его в триггере...


Наверх

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