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

Вниз

Косяки в Master-Detail   Найти похожие ветки 

 
nick-from ©   (2002-10-19 11:19) [0]

Есть Master-Detail связь. В Master таблице при вставке новой записи ее ID создантся с помощью генератора и триггера:

CREATE GENERATOR NEW_CATEGORY;

CREATE TRIGGER NEW_CATEGORY_ID FOR CATEGORIES
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.ID = GEN_ID(NEW_CATEGORY, 1);
END

Проблема в том, что возникает ошибка при перечитывании только что вставленной записи клиентским приложением (Создаем запись в Master"е и сразу же для этой новой записи пытаемся создать записи в Detail, где требуется ID вставленной Master-записи для связки)
Как такой проблемы можно избежать.
Можно вызвать сразу после вставки новой записи Master.CloseOpen, но по-моему это косяк
P.S. при удалении только что вставленной Master-записи та же беда


 
lejik ©   (2002-10-19 19:04) [1]

ApplyUpdates
CommitRetaining для Master


 
kaif ©   (2002-10-19 20:16) [2]

Странно. Подобные вопросы возникают чуть ли не каждый день. Откуда берется эта повальная манера получать значение ID в триггере BEFORE INSERT? Видно, это рекомендует какая-то очень умная книжка...
Разумеется, если неизвестно ID на клиентской стороне сразу после вставки, то будут проблемы. Следовательно нет иного способа этот ID узнать как один из 2:
1. Делать INSERT при помощи хранимой процедуры, возвращающей значение ID в RESULTS.
2. Сначала запрашивать новое значение генератора клиентом и вставлять запись с уже явно присвоенным ID. Компоненты IBX содержат реализацию этого подхода. Достаточно прописать атрибуты свойства Generator. Перед вставкой (INSERT) клмпонент TIBDataSet или его потомок сам запросит новое значение генератора с помощью SQL-запроса:
SELECT GEN_ID(NEW_CATEGORY, 1) FROM RDB$DATABASE;
Затем, он присвоит это значение полю ID, указанному в свойстве Generator и только потом выполнит INSERT. Тогда проблем не будет.



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

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

Наверх




Память: 0.47 MB
Время: 0.021 c
14-21801
Николай Быков
2002-10-11 19:46
2002.11.07
Делаю на заказ програмки абсолютно БЕСПЛАТНО


3-21420
NeyroSpace
2002-10-18 16:55
2002.11.07
Help! Таблица повисла, ни записи ни ее саму не удалить!


3-21412
Vlad_K
2002-10-11 14:02
2002.11.07
RX library


3-21444
Макз
2002-10-19 05:02
2002.11.07
Field description


4-21862
CrazyAngel
2002-09-24 16:44
2002.11.07
dll наоборот :)