Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > Обновление запроса после добавления записи


Автор: former 20.5.2009, 00:50
Есть связка master-detail вида:

Таблица Countries

CountryID,
CountryName

Таблица Companies

CompanyID,
CountryID,
CompanyName

После добавления записи в таблицу Countries, не используя
Код

CountryDataSet.Active:=false;
CountryDataSet.Active:=true;

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

Возникает вопрос. Каким образом получить значение CountryID добавленной записи без обновления всего запроса?

Автор: Экскалупатор 20.5.2009, 08:10
Цитата

Возникает вопрос. Каким образом получить значение CountryID добавленной записи без обновления всего запроса? 


что то не совсем понял, что вы имеете в виду, но почему нельзя сначала получить CountryID, а затем добавить его в запись Companies?
По моему если у вас таблица Companies зависит от Country, то вполне логично сначала узнать к какой стране относиться компания, а потом заносить ее(компанию) в базу.

Автор: Akella 20.5.2009, 10:20
Цитата(former @  20.5.2009,  00:50 Найти цитируемый пост)
Возникает вопрос. Каким образом получить значение CountryID добавленной записи без обновления всего запроса? 

1. Фибы отлично с этим справляются.
2. Почитай в документации. Раздел Master-detail.
3. А примеров разве нет?

Добавлено через 1 минуту и 51 секунду
Если не разберёшься, сделаю пример. smile 

Автор: former 20.5.2009, 15:02
Цитата(Akella @  20.5.2009,  10:20 Найти цитируемый пост)
1. Фибы отлично с этим справляются.
2. Почитай в документации. Раздел Master-detail.
3. А примеров разве нет?

Делал все по документации.

Наверно я плохо объяснил. 
1. Добавляем запись в таблицу Countries через CountryDataSet (AutoCommit:=true, poRefreshAfterPost:=true). 
2. Добавленная запись появляется в Grid-е (EhLib).
3. В CompanyDataSet (dcForceOpen:=true, dcWaitEndMasterScroll:=true) и соответствующем Grid-е происходит обновление.
4. При попытке добавить в таблицу Country запись и записать в поле CountryID данные из CountryDataSet, текущей записи, появляется сообщение об ошибке (значение внешнего ключа равно 0).

При выполнении 
Код

CountryDataSet.Active:=false;
CountryDataSet.Active:=true;

ошибка (п. 4) не возникает.

Автор: Akella 20.5.2009, 17:17
Цитата(former @  20.5.2009,  15:02 Найти цитируемый пост)
Наверно я плохо объяснил. 

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

Добавлено через 7 минут и 53 секунды
former, ты про MAS_ID прочитал? Ты заполнил свойства autoupdate?

Автор: former 20.5.2009, 18:30
Цитата(Akella @  20.5.2009,  17:17 Найти цитируемый пост)
ты про MAS_ID прочитал?

Читал, читал. Master-detail настроена по мануалу.

Цитата(Akella @  20.5.2009,  17:17 Найти цитируемый пост)
Ты заполнил свойства autoupdate?

А вот здесь, Akella, тыпопал в самую точку.  smile  Параметры autoupdate не были настроены.  smile smile 

Akella, +1 (правда, только завтра - форум не дает).

P.S. Никак не найду время полностью изучить мануал по Fib-ам. Буду исправляться. smile 

Автор: Akella 20.5.2009, 20:01
На сайте devrace.com есть примеры, если не найдёшь, то могу скинуть.

Автор: former 20.5.2009, 20:37
Akella, они у меня есть. Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)