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