Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.08;
Скачать: CL | DM;

Вниз

Как в *.gdb в связанные таблицы добавить записи   Найти похожие ветки 

 
AlexeyMir   (2007-01-22 11:51) [0]

Я использую базу *.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;


 
unknown ©   (2007-01-22 12:09) [1]


> AlexeyMir   (22.01.07 11:51)

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


 
Johnmen ©   (2007-01-22 12:40) [2]

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



Страницы: 1 вся ветка

Текущий архив: 2007.04.08;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.03 c
15-1173902441
eXPell
2007-03-14 23:00
2007.04.08
От нечего делать....


15-1173701976
ArtemESC
2007-03-12 15:19
2007.04.08
Office: Access


3-1169113342
Castlevania
2007-01-18 12:42
2007.04.08
InterBase SQL и память


2-1173768132
DimonS
2007-03-13 09:42
2007.04.08
Like в Access


2-1174142625
Roman_S
2007-03-17 17:43
2007.04.08
Как создать/удалить ярлык на рабочем столе?