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

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

IBx - Master & Detail [D6, IB6.x]


Normal ©   (2002-05-17 13:44:00) 

Вот такой вопро - есть две таблицы, связанные как Master & Details. Такой вопрос - добавляю в detail таблицу запись. А как обеспечить значение foreign ключа ? В триггере почему-то ругается, когда ему говорят :
NEW.IdSecond = MASTER.IdSecond
Как сие разрулить ?


Johnmen   (2002-05-18 09:11:00) [1]

Никак, поскольку в базе нет никаких взаимосвязей (кроме ограничения целостности) между двумя таблицами !
Такие всаимоствязи (Master-Detail) всегда организуются в приложении.


normal   (2002-05-18 07:48:00) [2]

Хорошо. Предположим я добавил записи в Master. Их скажем 10. Теперь мне нужно добавить 2 записи в Detail, ориентируясь на запись 3 в Master. Теперь я добавляю запись в Detail. Соответственно, чтобы обеспечить целостность, я должен указать в качестве значения вторичного ключа в Detail значение ключа в Master, которое соответствует записи N 3. Средствами Delphi это просто - Detail.OnNewRecord : DetailIdSecond.AsInteger := MasterIdSecond.Value. А как это сделать на самом сервере IB ???


Desdechado   (2002-05-17 19:05:00) [3]

похоже, ты недопонимаешь понятие мастер-деталь.
мастер - проще говоря, справочник. в нем значение уже должно быть.
деталь - таблица, которая одним из полей включает ссылку на справочник. при добавлении в нее берется уже готовое значение из справочника и заполняются остальные поля.

вот и сформулируй теперь вопрос по-новому


Val   (2002-05-17 16:06:00) [4]

причем тут max..? вы ведь запись в дочерней таблице к какой-то конкретной мастер-записи создаете, а не к последней? Так из нее (конкретной)и берите этот самый ID. Запросы для чего?


Normal   (2002-05-17 15:29:00) [5]

Дык а как его узнать-то конкретный ключ ? Select max(idsecond) from master ? так что ли ?


Desdechado   (2002-05-17 15:13:00) [6]

дык, запись должна добавляться с конкретным ключом из Master, а не с каким-попало. Поэтому это присваивается не в триггере, а в операторе добавления записи.


Наверх

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