![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Уникальный PK и "авто-FK" [D7, Firebird]
HydraMarat © (2004-11-09 00:41:00)Здорово, Мастера! Созрел до очередного вопроса...
Ситуация: есть форма, на ней два TDBGrid'а и TDBNavigator'а, подключаемые через TIBTable. Обе таблицы связаны через FK, плюс каждая имеет PK. Ясно видно, что обе управляются через навигаторы... Так вот:
1) Как сгенерировать уникальный PK при добавлении записи и когда его записывать? Говорят, что надо использовать генератор. А как?
2) Надо ли "вручную" добавлять значения в FK второй таблицы или компонент сделает это сам? (все-таки связь "зарегистрирована")
3) Нарушит ли добавление этих самых значений связь, которую устанавливают компоненты?
Да, и БД'шка Firebird, то бишь Interbase
Извините, если чё глупого написал, просто плохо разбираюсь.
Заранее, Спасибо!
HydraMarat (2004-11-11 03:41:00) [1]Собственно все решилось использованием SQL запросов с GEN_ID (запросы возвращают значение генераторов), а FK компонент ставит автоматически.
Deniz (2004-11-10 08:21:00) [2]И вот еще
http://www.sql.ru/forum/actualthread.aspx?tid=136637
Vemer (2004-11-09 20:21:00) [3]Если интересно посмотри FAQ в файлах архиве на DevPortal.Ru. Там несколько способов получения ID описано.
jack128 (2004-11-09 17:11:00) [4]jack128 © (09.11.04 17:03) [3]
это ГлЮки компонента.
И еще - как ты в приложениии собираешься узнавать сгенерированное значение ID?
Посмотри - есть ли у Table свойство GeneratorField?? в IBX 5.04 это свойство у IbTable неопубликованно (кстати - очень странно - почему??) может в твой версии это исправлено. Если нет, то нужно вручную узновать значение ID..
jack128 (2004-11-09 17:03:00) [5]HydraMarat (09.11.04 10:34) [2]
это клики компонента. Поставь для поля ID Required := False;
И вообще - забей на TIBTable, переходи на TIBDataSet. SQL подучишь, производительность приложения повысишь..
2) Надо ли "вручную" добавлять значения в FK второй таблицы или компонент сделает это сам? (все-таки связь "зарегистрирована")где зарегестрирована? на сервере? Этот не важно. Если ты имеешь в виду связку двух IbTable - то хз, но вероятность того, что id подчиненной таблички подставляешься автоматом стремиться к нулю. Собственно, это легко проверить эксперементом.
HydraMarat (2004-11-09 10:34:00) [6]Прописал триггер на BeforeInsert:
NEW.QUESTID=GEN_ID(QUESTGEN, 1);
и ничего... во время POST компонент ругается, что нет значения для QUESTID
Наталия (2004-11-09 06:54:00) [7]Почитай здесь http://www.ibase.ru/develop.htm