А как в CS решается вопрос значения поля Master-table?

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

А как в CS решается вопрос значения поля Master-table?

Сообщение Kotъ-Begemotъ » 04 сен 2007, 02:50

Вот нужно добавить запись в Master и несколько записей в Detail. В Paradox я делаю просто. У меня есть функция, внутри которой происходит

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

MasterTable.Append;
MasterTable.Post;
Result := MasterTableKeyField.Value;
И после вызова этой функции, (если она вернула не ноль, то есть запись добавлена) я могу этот "Result" использовать для записи MasterKey в DetailTable и проблема вроде решена...
А в CS это как делается? Ну добавил я запросом (Query или через DataSet того же FibPlus) запись в Master и дальше? Ведь Table инкапсулирующая а общнем-то собой Query как-то это делает?!? Я понимаю, что я могу запросить значение генератора, и потом сформировать запрос, но тогда и триггеры отменяются, получается?!? Как-то нехорошо...

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 04 сен 2007, 07:50

Читай статью про генераторы.

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 05 сен 2007, 22:48

Dimitry Sibiryakov писал(а):Читай статью про генераторы.
Уже. Как я понял, чтобы не отказываться от триггеров, которые всё же удобны если в таблицу пишется из разных процедур, и не всегда нужно знать новое значение генератора, достаточно делать триггер в виде

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

CREATE TRIGGER TBI_CLIENTS FOR CLIENTS 
ACTIVE BEFORE INSERT POSITION 0 
AS 
  BEGIN 
   IF (NEW.CLIENT_ID IS NULL) THEN 
      NEW.CLIENT_ID = GEN_ID(NEWID, 1);
  END 
и соответственно вызывать Insert с заданным (полученным от генератора) новым значением, тогда триггер не сработает... Что ж, в принципе проблем нет, и волки сыты, и овцы целы... :)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 06 сен 2007, 00:23

только цитировать так статью не надо :)

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 06 сен 2007, 00:37

kdv писал(а):только цитировать так статью не надо :)
Погоди, а что, где-то я недопонял чего-то?!? Подскажи, будь добёр!

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 06 сен 2007, 01:27

www.ibase.ru/devinfo/generator.htm
этот пример кода и есть в статье, с объяснениями. Или ты наоборот, именно и процитировал? Так я про то, что просто так цитировать не надо. Если есть вопрос по тексту - цитируй на здоровье. Но тут-то цитата есть, а вопроса нет :)

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 06 сен 2007, 01:47

kdv писал(а):www.ibase.ru/devinfo/generator.htm
этот пример кода и есть в статье, с объяснениями. Или ты наоборот, именно и процитировал? Так я про то, что просто так цитировать не надо. Если есть вопрос по тексту - цитируй на здоровье. Но тут-то цитата есть, а вопроса нет :)
Да, я именно процитировал решение предложенное в статье, назвав его вполне отвечающим на мой корневой вопрос :) Который после этого собственно и отпал :)))

Ответить