Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
Kotъ-Begemotъ
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Сообщение
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 как-то это делает?!? Я понимаю, что я могу запросить значение генератора, и потом сформировать запрос, но тогда и триггеры отменяются, получается?!? Как-то нехорошо...
-
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
этот пример кода и есть в статье, с объяснениями. Или ты наоборот, именно и процитировал? Так я про то, что просто так цитировать не надо. Если есть вопрос по тексту - цитируй на здоровье. Но тут-то цитата есть, а вопроса нет

Да, я именно процитировал решение предложенное в статье, назвав его вполне отвечающим на мой корневой вопрос

Который после этого собственно и отпал

))