Страница 1 из 1

Не обновляется detail таблица... И получаю FOREIGN KEY vio..

Добавлено: 07 дек 2007, 18:38
fmcoder
Что то не пойму в чем может быть дело.
Есть detail таблица, добавляем в нее новую запись:

Код: Выделить всё

DataSet.Insert;
DataSet.FieldValues[...] := ...
DataSet.FieldValues['id'] := xxx;
DataSet.Post;
Затем в master делаю

Код: Выделить всё

MDS.FieldValues['det_id'] := xxx; //тоже значение что и выше для только что добавленной записи
MDS.Post; //а здесь эксепшн
 "---------------------------
Debugger Exception Notification
---------------------------
Project BaseP.exe raised exception class EFIBInterBaseError with message 'DM.DataSet.UpdateQuery:
Violation of FOREIGN KEY constraint "".
Violation of FOREIGN KEY constraint "INTEG_15" on table "Tracks".
Foreign key reference target does not exist.
'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------
"
Причем, если перезапустить программу, и назначить тот же ID, То все нормально отрабатывает. Не работает только если добаывить новую запись и использовать ее в этом же сеансе работы с программой. Может, надо как-то явно обновить таблицу, или еще что то сделать?

Добавлено: 07 дек 2007, 19:03
Merlin
1. Не путать слова мастер и деталь.
2. Почетать што-небудь про транзакции.

Добавлено: 07 дек 2007, 19:41
fmcoder
Да я уже читал... Создана одна транзакция и внесена в св-ва компонентов fibplus (Transaction и UpdateTransaction). У датасетов также установлено св-во AutoCommit.
Если запустить программу 2 раза, в одной из них добавить запись, в другой - ее использовать то все нормально. Если же использовать ее в той же программе где создали, то получаю ошибку.
Уже не знаю что и делать.

И насчет терминов, я это понимаю так:
Detail - это в моем случае таблица где есть поле id - primary key и описание самого объекта (еще несколько полей).
Master - таблица с кучей других полей, среди которых есть например g_id references ... - ссылка на Detail.

Добавлено: 08 дек 2007, 03:20
kdv
наоборот. деталь имеет ссылку на таблицу мастер.
см. www.ibase.ru/devinfo/joins.htm
заказы - мастер. клиент - деталь. клиент делает заказЫ.
заказы - мастер, товары в заказе - деталь. в заказЕ присутствуют товарЫ.
Создана одна транзакция и внесена в св-ва компонентов
см примеры по мастер-детали в примерах FIBPlus и в
www.ibase.ru/devinfo/ibx.htm

Добавлено: 11 дек 2007, 03:03
fmcoder
Спасибо всем за ответы! Проблема решена, статьи, приведенные kdv действительно помогли :)