триггеры

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Guard
Сообщения: 11
Зарегистрирован: 31 июл 2006, 12:00

Сообщение Guard » 31 июл 2006, 16:58

Дева писал(а):Во-первых я не блондика
Во-вторых азы я знаю
В-третьих вы не поняли вопроса, посему отправляли меня изучать не то, что надо, поэтому я по-прежнему задавала свои глупые вопросы, потому что ответа не было! Вот такая вот билеберда и вышла!
Я например просил вопрос переформулировать, если бы ты это сделала, возможно кто-нибудь все-таки понял и ответил :?

SAMZ
Сообщения: 128
Зарегистрирован: 21 мар 2005, 08:17

Сообщение SAMZ » 01 авг 2006, 10:27

Уважаемая Дева!
Примите несколько советов по теме поста
1. Вам уже писали и Вам надо принять это как абсолютную истину. Триггры никогда никто не вызывает. Сервет сам инициирует их работу в зависимости от событий и фазы из возникновения.
2. Значения первичному ключу никогда не надо присваивать запрашивая максимальное его значение с последующим увеличением на 1. И не потому, что Вы не хотите дублировать код, просто это грабли и об этом на сайте написано.
3. Триггер у Вас написан правильно, но окружение Дельфи для полей not null свойство Required устанавливает в true и не позволяет отправить серверу запись с null значением поля с тем, что-бы на сервере триггер дернул генератор и присвоил ему значение. Все, что Вам надо сделать, это свойству Required присвоить false.
4. Имейте ввиду, что присваивать по такой схеме значения суррогатным ключам корректно, но неудобно (в большинстве случаев). Как правило разработчики предпочитают дергать генератор на клиенте, получить уникальное значение ключа, присвоить полю и.т.д

Дева
Сообщения: 19
Зарегистрирован: 26 июл 2006, 16:58

Сообщение Дева » 01 авг 2006, 11:15

CyberMax писал(а):P.S. Повезло тебе, что я не модер на этом разделе, и Дмитрий на отдыхе. Иначе этой темы уже не было бы.
Не, не повезло ;-)
Guard писал(а): Я например просил вопрос переформулировать
уже давно:
Дева писал(а): Вообще я интересовалась, могу ли я методоми Insert.....Post вызвать триггер.
Все что я хотела узнать в данной теме, это какие методы и когда вызывают триггер
Ты мне уже ответил на вопрос:
Добавлено: Пн Июл 31, 2006 1:50 pm
а дальше были только обсуждения цвета моих волос.
Вообще-то я сделала генератор, триггер, попыталась воспользоваться, - не получилось. Предположила, что, возможно, не всякий код может вызвать триггер, вот и спрашивала, в какой ситуации будет срабатывать триггер. И все! Никакой конкретики. А вы стали посылать меня в сторону литературы, которую я уже прочла
SAMZ писал(а):Уважаемая Дева!
Хочется верить :wink:
SAMZ писал(а):1. Вам уже писали и Вам надо принять это как абсолютную истину.
А я и не спорю!
SAMZ писал(а): Триггры никогда никто не вызывает. Сервет сам инициирует их работу в зависимости от событий и фазы из возникновения.
НИ В ОДНОМ СВОЕМ ВЫСКАЗЫВАНИИ Я НЕ УТВЕРЖДАЛА!!!!!!! ЧТО ТРИГГЕРЫ Я ВЫЗЫВАЮ!!!! ПЕРЕЧИТАЙТЕ ВНИМАТЕЛЬНО!!!!!
SAMZ писал(а):2. Значения первичному ключу никогда не надо присваивать запрашивая максимальное его значение с последующим увеличением на 1. И не потому, что Вы не хотите дублировать код, просто это грабли и об этом на сайте написано.
Про грабли не знала, поищу на сайте
SAMZ писал(а):3. Триггер у Вас написан правильно, но окружение Дельфи для полей not null свойство Required устанавливает в true и не позволяет отправить серверу запись с null значением поля с тем, что-бы на сервере триггер дернул генератор и присвоил ему значение. Все, что Вам надо сделать, это свойству Required присвоить false.
Спасибо, это конечно не ответ на мучавший меня вопрос темы, но ответ на другой вопрос. Спасибо
SAMZ писал(а):4. Имейте ввиду, что присваивать по такой схеме значения суррогатным ключам корректно, но неудобно (в большинстве случаев). Как правило разработчики предпочитают дергать генератор на клиенте, получить уникальное значение ключа, присвоить полю и.т.д
А зачем тогда нужен триггер????? (Это был реторический вопрос!!!)
Почему неудобно, можно спросить?

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 01 авг 2006, 11:24

Дева писал(а):Про грабли не знала, поищу на сайте
Об этом написано в статье про генераторы, ссылку на которую я вам давал почти в самом начале. Вы читали ее? Даю еще раз:
http://www.ibase.ru/devinfo/generator.htm

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 01 авг 2006, 11:26

Дева писал(а):А зачем тогда нужен триггер????? (Это был реторический вопрос!!!)
Риторический вопрос - вопрос, на который не надо отвечать. Вы думаете, что пишете?

Дева
Сообщения: 19
Зарегистрирован: 26 июл 2006, 16:58

Сообщение Дева » 01 авг 2006, 11:33

CyberMax писал(а): Риторический вопрос - вопрос, на который не надо отвечать.
Я знаю, что такое риторический вопрос.
Вопрос, на который я хотела получить ответ я написала ниже

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 01 авг 2006, 11:48

Дева писал(а):Вопрос, на который я хотела получить ответ я написала ниже
Ответ в статье про генераторы...

SAMZ
Сообщения: 128
Зарегистрирован: 21 мар 2005, 08:17

Сообщение SAMZ » 01 авг 2006, 11:50

Дева писал(а): А зачем тогда нужен триггер????? (Это был реторический вопрос!!!)
Почему неудобно, можно спросить?
Я рискую вызвать если не гнев, то по крайней мере неудовольствие гуру и модераторов этого форума, к знаниям которых отношусь с великим уважением, но постараюсь вкратце ответить.
Как правило БД - это некоторое множество таблиц, связанных реляционными отношениями (вторичными ключами). Чаще всего, после ввода новой записи в некую таблицу Вам немедленно надо знать первичный ключ для работы с подчиненными таблицами. Если Вы присваиваете значение первичного ключа триггером, то немедленно после ввода Ваше приложение этого ключа не знает. Это и неудобно в этой схеме. Это как пример, думаю можно придумать и другие примеры. Именно поэтому значения первичного ключа присваивают чаще на клиенте. Если Вы будете продолжать работать с FB, обратите внимание на то, что в некоторых библиотеках доступа (FIB), возможность настоек взаимодействия набора с генераторам встроена на уровне DataSet.
На вопрос зачем нужны триггеры отвечать в деталях не буду. Есть мульен случаев, когда с помощью триггеров красиво решаются задачи на сервере. Изучайте матчасть.

Ответить