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

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

Как в *.gdb в связанные таблицы добавить записи [D5, IB5.x]


AlexeyMir ©   (2007-01-22 11:51:00) 

Я использую базу *.gdb на Interbase5
Подскажите, у меня есть две связанные таблицы в отношении один-ко-многим RC_MNT(содержание документа) и HD_MNT(заголовок документа), причем поле ID_MNT таблицы RC_MNT ссылается на поле ID таблицы HD_MNT, а на ID таблицы HD_MNT стоит автоинкремент построенный на генераторе.
Мне нужно в одной транзакции добавить строку в HD_MNT, я это делаю так: insert into HD_MNT(num,dat) values(0,"now"), ID не указываю, он сам формируется, после этого мне нужно узнать какой же ID сформировался что бы указать его в RC_MNT в поле ID_MNT

  IBTransaction1.StartTransaction;
   IBQuery1.SQL.Clear;
   IBQuery1.SQL.ADD('insert into HD_MNT(num,dat)');
   IBQuery1.SQL.ADD('values(0,"now")');
   IBQuery1.ExecSQL;

   IBQuery1.SQL.Clear;
   IBQuery1.SQL.ADD('insert into RC_MNT(id_mnt,fg,df,...)');
   IBQuery1.SQL.ADD('values(???,fg,df,...)');
   IBQuery1.ExecSQL;
  IBTransaction1.Commit;


Johnmen   (2007-01-22 12:40:00) [1]

На эту тему существует несколько способов решения. Но суть их всех сводится к получению ID до вставки записи.
(исключая случай, когда кроме суррогатного есть и натуральный ключ или уникальный индекс)


unknown   (2007-01-22 12:09:00) [2]


> AlexeyMir   (22.01.07 11:51)

Надо просто предварительно получать значение генератора для HD_MNT.num
отдельным запросом:
select gen_id(тут_имя_генератора,1) from rdb$database


Наверх

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