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

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

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




Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу 1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: 21.03.2012 15:09 
Не в сети

Зарегистрирован: 21.03.2012 14:20
Сообщения: 1
Здравствуйте! Пожалуйста, помогите написать формулу которая будет вставлять в поле главной таблицы сумму итоговых сумм подчиненных таблиц. Спасибо!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21.03.2012 17:17 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
Здравствуйте.
Формула для вычисляемого поля? Или для хранимого?
Более правильно создать хранимое поле и задать триггер для подчиненной таблицы.
Это сделано именно так в нашей демонстрационной БД DemoDatabase.mdb


Вложения:
Pic1.JPG
Pic1.JPG [ 160.12 КБ | Просмотров: 74074 ]

_________________
2B OR NOT 2B = TRUE
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06.07.2012 11:57 
Не в сети

Зарегистрирован: 05.07.2012 16:12
Сообщения: 69
Здравствуйте! Вопрос по этой же теме. Имеются три таблицы "Объекты", "Договоры", "Приложения". Начиная с последней каждая является подчиненной предыдущей. В подчиненных таблицах ("Договоры" и "Приложения") прописал триггер по принципу указанному выше. Смысл таков: чтоб при изменении значений в приложениях, относящихся к определенному договору, пересчитывалась сумма договора и далее выводилась сумма всех договоров относящихся к соответствующему объекту. Т.е. по цепочке все пересчитывалось начиная от последнего звена и заканчиваясь на главном. Теперь что происходит, когда я ввожу новое значение в каком-либо приложении: в таблице "Договоры" все пересчитывается быстро, а во вкладке "Объекты", где также отображается подчиненная таблица "Договоры", изменение значений тех же договоров отображается после того, как нажмешь мышкой несколько раз на разные строки договоров. Но что самое печальное, что в таблице объекты так и не происходит пересчет суммы договоров. Однако если я меняю "в ручную" значения в подч. таблице "Договоры", отображенной в одной вкладке с таблицей "Объекты", то сумма по договорам быстро пересчитывается и общая сумма по объекту также моментально отображается. В чем моя проблема и можно ли что-то сделать, чтобы программа работала автоматически?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06.07.2012 12:54 
Не в сети

Зарегистрирован: 05.07.2012 16:12
Сообщения: 69
Может в триггере таблицы "Договоры" надо прописать дополнительное условие, потому как триггер срабатывает я так понял на механическое вмешательство в значения, а на автоматический пересчет другого триггера он не работает? Или мне надо прописать два триггера в самой последней таблице "Приложения", чтобы производил пересчет и в таблице "Договоры" и в таблице "Объекты"?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06.07.2012 13:43 
Не в сети

Зарегистрирован: 05.07.2012 16:12
Сообщения: 69
Не знаю что произошло, но теперь я вовсе не могу менять значения в таблице "Приложения" при чем во всех полях! HELP!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06.07.2012 14:03 
Не в сети
Администратор

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

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06.07.2012 22:33 
Не в сети

Зарегистрирован: 05.07.2012 16:12
Сообщения: 69
Тогда попытаюсь поставить вопрос более наглядно. Вот вид на мою главную таблицу, где таблица "Договоры" является подчиненной и ее представление находится в соседней вкладке:
Вложение:
1.png
1.png [ 101.99 КБ | Просмотров: 72677 ]


Вот открытая вкладка "Договоры", где таблица "Приложения" является подчиненной:
Вложение:
2.png
2.png [ 110.35 КБ | Просмотров: 72677 ]


Вот триггер для подсчета суммы поля подчиненной таблицы в соответствующей ячейке главной таблицы - Связь Приложения - Договоры:
Вложение:
3.png
3.png [ 92.44 КБ | Просмотров: 72677 ]

Здесь все работает хорошо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06.07.2012 22:34 
Не в сети

Зарегистрирован: 05.07.2012 16:12
Сообщения: 69
Теперь попрошу взглянуть на следующий скрин, где прописан точно такой же триггер подчиненной таблицы "Договоры" для главной таблицы "Объекты". Здесь при изменении значений в таблице "Договоры" по средствам триггера подчиненной таблицы "Приложения" изменения в таблице "Объекты" не происходят. Однако если я в ручную ввожу значения в таблицу "Договоры", то сумма по объекту пересчитывается. Подскажите, пожалуйста, что я не так делаю или как сделать правильно, чтоб сумма объекта выводилась автоматически при изменении значений в приложениях!
Вложение:
4.png
4.png [ 110.11 КБ | Просмотров: 72677 ]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06.07.2012 22:42 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
Почему все ваши скрины обрезаны справа (где часть SQL), сверху (где номер версии ПО) и снизу (где строка-статус).
Это нехорошо. Там важная информация, в соответствии с которой мы стараемся дать вам максимально конкретный ответ.
По ссылке "Поддержка" сказано, что скриншоты должны быть полноэкранные.
Вбейте в колонку "Сообщение" текст "<SQL>" и получите сообщение с финальной инструкцией SQL вашего триггера, проверьте, все ли с ней в порядке.

_________________
2B OR NOT 2B = TRUE


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07.07.2012 10:48 
Не в сети

Зарегистрирован: 05.07.2012 16:12
Сообщения: 69
[quote="Ivan"]Почему все ваши скрины обрезаны справа (где часть SQL), сверху (где номер версии ПО) и снизу (где строка-статус).
Справа у меня ничего не обрезано. Если прокрутить бегунок, то упремся в конец изображения как у меня на экране. Версия ПО у меня 2.262. А строки статус у меня нет только на одном скрине.
> Вбейте в колонку "Сообщение" текст "<SQL>" и получите сообщение с финальной инструкцией SQL вашего триггера, проверьте, все ли с ней в порядке.
Так и сделал: Первый триггер срабатывает, второй не реагирует. Вот полноэкранный скрин:
Вложение:
5.png
5.png [ 214.31 КБ | Просмотров: 72647 ]

1. Ввожу новое значение
2. Выходит сообщение. Подтверждаю его.
3. Изменяется сумма в главной таблице.
4. А в следующей главной таблице изменений нет, хотя как вы видите триггер прописан.
Такой алгоритм вообще уместен, осуществим? Или надо как-то дополнительно создавать условия, например, срабатывание одного триггера после срабатывания другого?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07.07.2012 23:46 
Не в сети

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

нужно добавить второй триггер подчиненной таблицы на пересчет суммы в главной таблице Объекты.

... или попросить разработчика добавить возможность принудительно активировать срабатывание нужного типа триггера таблиц БД из SQL-запроса триггера. тогда не придется плодить избыточных триггеров.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08.07.2012 17:18 
Не в сети

Зарегистрирован: 05.07.2012 16:12
Сообщения: 69
Вот добавил параллельно второй триггер - все отлично, получается!
Вложение:
6.png
6.png [ 226.16 КБ | Просмотров: 72557 ]


Но это только если я ввожу значения с вкладки Договоры, а если я ввожу с вкладки Приложения то получается вот такая штука:
Вложение:
7.png
7.png [ 205.07 КБ | Просмотров: 72557 ]

Я так понимаю, что в этот момент не успевает произойти пересчет значений в Договорах, а вернее пересчет как раз происходит и значения в договорах находятся в какой-то прострации, потому как триггер пишет, что их нет (я так понял).
Я думаю что надо поставить задачу таким образом, чтоб второй триггер срабатывал с каким-нибудь запаздыванием или только после того как сработает первый. Как это осуществить?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 08.07.2012 18:29 
Не в сети

Зарегистрирован: 25.04.2012 10:09
Сообщения: 2233
Откуда: Жуковский, Московская область
Нет, у поля "код объекта" в этой таблице другое внутреннее имя. Это же поле вычисляемое (желтый цвет фона у столбца), а значит его имя что-то типа ObjectIDCalc.

Короче, вам нужно уточнить название поля, в котором хранится идентификатор объекта в этой таблице, и подставить его вместо ObjectID в этом триггере.

P.S. И не нужно просто копировать текст SQL-запроса триггера между таблицами! Лучше его писать с нуля.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 09.07.2012 11:49 
Не в сети

Зарегистрирован: 05.07.2012 16:12
Сообщения: 69
Последний триггер у меня не имеет никакого отношения к таблице приложения, разве что только к срабатыванию при внесении в нее каких-либо изменений.
И все же обращаюсь к администратору: как нужно задать триггеры в моем случае, чтоб они сработали через две последовательно подчиненные таблицы?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 09.07.2012 13:09 
Не в сети
Администратор

Зарегистрирован: 15.02.2006 20:16
Сообщения: 3690
Откуда: Санкт-Петербург
С подобными сложными вопросами (которые надо детально рассматривать на вашей БД) нужно обращаться к нам в поддержку по ссылке "Поддержка" с копией БД. И быть при этом нашим клиентом.

_________________
2B OR NOT 2B = TRUE


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

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


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

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


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

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