Программы "Простой софт" www.prostoysoft.ru

ВНИМАНИЕ! РЕКЛАМНЫЕ СООБЩЕНИЯ И ГИПЕРССЫЛКИ В ФОРУМЕ ЗАПРЕЩЕНЫ (посты удаляются автоматически)
Текущее время: 23.11.2024 02:57

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 45 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Отмена добавления записи
СообщениеДобавлено: 24.06.2014 10:53 
Не в сети

Зарегистрирован: 15.04.2014 04:02
Сообщения: 39
Есть триггер, который срабатывает при добавлении записи. Есть какой-нибудь способ манипуляции с добавляемой записью? Например, хочется изменить данные записи или и вовсе сделать отмену её добавления. В Oracle SLQ есть, например, такая конструкция:
Код:
:new.<имя поля таблицы в которую вставляешь запись> := новое значение

Есть ли что-нибудь такое тут и будет ли это работать, если используется в качестве БД - Access?

UPDATE: в MS SQL, например, есть триггер INSTEAD OF INSERT и ключевое слово inserted для обращения к вставляемой записи. Можно ли его как-то использовать в программе?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отмена добавления записи
СообщениеДобавлено: 24.06.2014 12:26 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
>Например, хочется изменить данные записи
Вы можете в триггере написать инструкцию UPDATE SET

>вовсе сделать отмену её добавления
Вы можете в триггере написать инструкцию DELETE FROM

Пожалуйста, приводите конкретный пример с конкретой ситуацией из бизнеса и данными. А также желательно предоставлять поясняющие скриншоты.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отмена добавления записи
СообщениеДобавлено: 24.06.2014 12:43 
Не в сети

Зарегистрирован: 15.04.2014 04:02
Сообщения: 39
Я понимаю. Но речь идёт о текущей записи. Как не допустить её добавления? DELETE -удаляет уже добавленные записи, UPDATE - обновляет уже добавленные записи. А нужно не допустить добавления текущей записи, при этом воспользовавшись её данными. Данными мы воспользоваться можем, для этого есть угловые скобки <>. А вот как не допустить добавления текущей записи - не понятно.

Пример:
Есть таблица со счетами. Добавляем новую строку. Что должен сделать триггер? Он должен воспользовавшись данными этой текущей строки и добавить новые строки (а не оригинальную строку), содержащие их (данные). Для этого вполне подойдёт INSERT INTO. Но кроме того, он должен не допустить добавление этой самой текущей оригинальной записи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отмена добавления записи
СообщениеДобавлено: 24.06.2014 13:27 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
>Пример: Есть таблица со счетами. Добавляем новую строку.
Продолжайте, пожалуйста, с вашим примером...
В чем конкретная причина, по которой не должна добавляться запись в таблицу "Счета"?

Если не будут заполнены обязательные поля, если Условие на значение любого поля не соблюдается... - запись и так не добавится.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отмена добавления записи
СообщениеДобавлено: 24.06.2014 15:22 
Не в сети

Зарегистрирован: 15.04.2014 04:02
Сообщения: 39
Ну просто она будет "пилиться" (дробиться) на несколько записей, которые и должны попасть в таблицу, а оригинал не нужен.
Ivan писал(а):
Если не будут заполнены обязательные поля, если Условие на значение любого поля не соблюдается... - запись и так не добавится.

И это хорошо. Нужно чтобы валидация отрабатывала как положено, а уже после неё срабатывал триггер, который "расщепил" бы запись на несколько, удалив оригинал. При этом "расщеплённые" записи тоже будут вполне валидными, так как всё необходимое будет браться из оригинала, который успешно прошёл валидацию.

UPDATE: ладно уж, что темнить. Опишу полнее задачу. Дело в том, что в таблице счета, есть поле сотрудник, где возможен множественный выбор, а также сумма и зп сотрудника. Дык вот, при множественном выборе хочется чтобы появилась не одна строка с несколькими сотрудниками и общей для них суммой и ЗП, а для каждого отдельно, то есть раздробилась (строка) на столько частей, сколько сотрудников выбрали.
Грубо говоря, всё это костыль для того чтобы связать интерфейс Вашей программы, у которого есть возможность множественного выбора, с необходимой нам структурой БД и записей в ней.
Можно конечно по отдельности строчки создавать, вбивая вручную нужную сумму, выбирая по одному сотруднику. А хочется автоматизировать. Выбрал сразу несколько сотрудников, вбил общую сумму, а он (триггер) раздробил их на количество, соответствующее сотрудникам, и каждому посчитал свою сумму и ЗП.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отмена добавления записи
СообщениеДобавлено: 24.06.2014 15:43 
Не в сети

Зарегистрирован: 25.04.2012 10:09
Сообщения: 2233
Откуда: Жуковский, Московская область
А не проще вести отдельную (можно в т.ч. и подчиненную) таблицу, куда будут вноситься записи с з/п сотрудников по триггеру, срабатывающему при добавлении в таблицу Счета записи, после Сотрудник которой содержит несколько имен?

_________________
90% ответов на ваши вопросы находятся в руководстве, разделах "Вопросы" и "Видео" на нашем сайте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отмена добавления записи
СообщениеДобавлено: 24.06.2014 15:50 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
Рекомендую вам посмотреть:
1. Конфигурацию "Учет зарплаты и кадров" в разделе "Конфигурции".
2. В Галерее, в самом низу короткое видео №4 "Продажи в рассрочку", где показывается генерация и вставка записей в подчиненную таблицу при изменении записи в главной.

В форме для редактирования можно отображать подтаблицы. И даже подтаблицы второго уровня.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отмена добавления записи
СообщениеДобавлено: 29.06.2014 15:53 
Не в сети

Зарегистрирован: 15.04.2014 04:02
Сообщения: 39
То, что Вы предложили - вполне логично и красиво. Кроме того, я в курсе обо всех этих вариантах с подчинённой таблицей.
Но это решение не подходит.

Во-первых, мы уже давно активно ведём БД и потребуется её переделка (всех старых записей) в соответствии с новой структурой.
Во-вторых, а что будет у нас при изменении главной записи? (например изменили общую сумму, или вдруг объявился неожиданно ещё один сотрудник и т.п.) В подчинённой тогда ничего не измениться, а если делать по изначальному варианту, который предложил я, то у нас там сразу строки получаются по одному сотруднику и их можно изменять, удалять... (Я понимаю, что и здесь есть выход, он есть почти всегда, можно сделать вычисляемое поле, а в триггерах его использующих использовать сумму подчинённых записей и т.п.)
В-третьих, куча триггеров, вычисляемых полей и всего прочего уже заточено под существующую структуру Счетов.
В-четвертых, сам вид решения не очень нравится. Хочется одну таблицу, где каждая строка - один сотрудник, а интерфейс ввода при этом, позволяет выбрать сразу нескольких с указанием общей суммы.
В-пятых, поверьте на слово, сложностей ещё полным-полно. В счетах, например, есть поле, состоящие из двух возможных значений, при выборе которого происходит пересчёт по разным формулам ЗП сотрудника...

В итоге, возвращаемся к моему изначальному вопросу: есть ли способ в теле триггера, отменить вставку текущей записи, срабатывающий при её добавлении?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отмена добавления записи
СообщениеДобавлено: 29.06.2014 16:17 
Не в сети

Зарегистрирован: 15.04.2014 04:02
Сообщения: 39
Orion33 писал(а):
RRRPro писал(а):
сначала внести, а потом сразу удалить.

Такой вариант я припас для себя на последок. Тут есть один момент, а при удалении триггером, сработают ли другие триггеры на удаление? То есть удалили триггером изначальную запись, но у нас есть другие триггеры, и нужно чтобы они сработали и пересчитали то что нужно. Насколько я понимаю, когда мы удаляем, изменяем, добавляем триггером, - триггеры на удаление, изменение, добавление - не срабатывают.

ПС: И к сожалению это не принципиальное упорство, а попытка найти, пока как я вижу, одно единственно верное решение. А на id-шник - вообще по барабану.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отмена добавления записи
СообщениеДобавлено: 29.06.2014 16:22 
Не в сети

Зарегистрирован: 15.04.2014 10:50
Сообщения: 58
RRRPro писал(а):
То есть удалили триггером изначальную запись, но у нас есть другие триггеры, и нужно чтобы они сработали и пересчитали то что нужно. Насколько я понимаю, когда мы удаляем, изменяем, добавляем триггером, - триггеры на удаление, изменение, добавление - не срабатывают.

В моей базе такого нет, но триггеры можно разграничить по условиям. Тогда в каждом случае будет срабатывать свой триггер. Они вполне могут содержать одинаковые запросы.
RRRPro писал(а):
И к сожалению это не принципиальное упорство, а попытка найти, пока как я вижу, одно единственно верное решение.

Ну, может быть, у Вас получится сделать, как написал Иван.

_________________
Все сообщения относятся к программе "Мои диски" версии 2.х, актуальной на момент написания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отмена добавления записи
СообщениеДобавлено: 29.06.2014 16:24 
Не в сети

Зарегистрирован: 15.04.2014 04:02
Сообщения: 39
Orion33 писал(а):
RRRPro писал(а):
То есть удалили триггером изначальную запись, но у нас есть другие триггеры, и нужно чтобы они сработали и пересчитали то что нужно. Насколько я понимаю, когда мы удаляем, изменяем, добавляем триггером, - триггеры на удаление, изменение, добавление - не срабатывают.

В моей базе такого нет, но триггеры можно разграничить по условиям. Тогда в каждом случае будет срабатывать свой триггер. Они вполне могут содержать одинаковые запросы.
RRRPro писал(а):
И к сожалению это не принципиальное упорство, а попытка найти, пока как я вижу, одно единственно верное решение.

Ну, может быть, у Вас получится сделать, как написал Иван.


Вы немного не поняли... Дело не в условиях, а в том, что когда что-то делаем триггером, другие триггеры на это не реагируют.

Ну а то что предложил Иван... К сожалению, привёл достаточно причин, почему это не подходит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отмена добавления записи
СообщениеДобавлено: 29.06.2014 16:33 
Не в сети

Зарегистрирован: 15.04.2014 10:50
Сообщения: 58
RRRPro писал(а):
Вы немного не поняли... Дело не в условиях, а в том, что когда что-то делаем триггером, другие триггеры на это не реагируют.

И Вы немного не поняли... Пропишите в тело этого триггера то, что должны делать не срабатывающие.
RRRPro писал(а):
Ну а то что предложил Иван... К сожалению, привёл достаточно причин, почему это не подходит.

По-моему, он как раз предложил, как из тела триггера отменить ввод в таблицу.

_________________
Все сообщения относятся к программе "Мои диски" версии 2.х, актуальной на момент написания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отмена добавления записи
СообщениеДобавлено: 29.06.2014 16:45 
Не в сети

Зарегистрирован: 15.04.2014 04:02
Сообщения: 39
Orion33 писал(а):
RRRPro писал(а):
Вы немного не поняли... Дело не в условиях, а в том, что когда что-то делаем триггером, другие триггеры на это не реагируют.

И Вы немного не поняли... Пропишите в тело этого триггера то, что должны делать не срабатывающие.

Как я и говорил, способ со вставкой и удалением приберегу на последок. А перенос всего кода, всех триггеров порождает большую сложность и плохую поддерживаемость. Хотя и этот способ я держал в голове, как запасной и самый последний.

Orion33 писал(а):
RRRPro писал(а):
Ну а то что предложил Иван... К сожалению, привёл достаточно причин, почему это не подходит.

По-моему, он как раз предложил, как из тела триггера отменить ввод в таблицу.

Никак не могу найти, где он это предложил. Насколько я понял, он предложил способ с подчинённой таблицей и только.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отмена добавления записи
СообщениеДобавлено: 29.06.2014 17:14 
Не в сети

Зарегистрирован: 15.04.2014 10:50
Сообщения: 58
RRRPro писал(а):
А перенос всего кода, всех триггеров порождает большую сложность и плохую поддерживаемость. Хотя и этот способ я держал в голове, как запасной и самый последний.

Не знаю, как реализовано в этом софте, но вообще запросы можно хранить в телах процедур, а их вызов уже прописывать в триггере. Тогда, если что-то изменится, запрос надо будет поменять в таблице процедур, а не во всех триггерах таблиц.
RRRPro писал(а):
Никак не могу найти, где он это предложил. Насколько я понял, он предложил способ с подчинённой таблицей и только.

Странно, но почему-то упорно исчезает сообщение со ссылкой на тему. Видимо, это действует 9 пункт правил, который запрещает приводить ссылки на свой же форум :lol:
Тема называется "Подчиненная таблица не активна.", обсуждение этой проблемы на 3й странице.

_________________
Все сообщения относятся к программе "Мои диски" версии 2.х, актуальной на момент написания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отмена добавления записи
СообщениеДобавлено: 29.06.2014 20:20 
Не в сети

Зарегистрирован: 25.04.2012 10:09
Сообщения: 2233
Откуда: Жуковский, Московская область
Orion33 писал(а):
Видимо, это действует 9 пункт правил, который запрещает приводить ссылки на свой же форум :lol: .
удаляются сообщения с любыми ссылками. Если так нужно дать ссылку на тему, укажите часть url после домена

_________________
90% ответов на ваши вопросы находятся в руководстве, разделах "Вопросы" и "Видео" на нашем сайте.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 45 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB