Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на обновление таблицы / 24 сообщений из 24, страница 1 из 1
29.06.2017, 13:23
    #39479642
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
Здравствуйте!

Требуется составить запрос на обновление, но мозгов не хватает, как это сделать при наличии трех таблиц.

Есть форма, данные для которой формируются запросом "зVIPклиенты" из двух таблиц:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT DISTINCTROW тVIPклиенты.Код, тVIPклиенты.ФИО, тVIPклиенты.НомерКарты, тVIPклиенты.[Скидка%], 
Sum(тVIPзаказы.Сумма) AS Сумма, тVIPклиенты.Признак, тVIPклиенты.Примечание, тVIPклиенты.ФиксСкидка
FROM тVIPклиенты LEFT JOIN тVIPзаказы ON тVIPклиенты.Код = тVIPзаказы.КодЗаказа
GROUP BY тVIPклиенты.Код, тVIPклиенты.ФИО, тVIPклиенты.НомерКарты, тVIPклиенты.[Скидка%], 
тVIPклиенты.Признак, тVIPклиенты.Примечание, тVIPклиенты.ФиксСкидка
ORDER BY тVIPклиенты.ФИО;


Есть третья таблица со скидками, столбцы: Код, Min, Max, Скидка.
Требуется Скидки из этой таблицы прописать в тVIPклиенты.[Скидка%] в зависимости от тVIPзаказы.Сумма
Связал я эту таблицу с предыдущим запросом, вижу, какие скидки должны быть:
Код: sql
1.
2.
SELECT зVIPклиенты.ФИО, зVIPклиенты.Сумма, тСкидки.Скидка
FROM зVIPклиенты INNER JOIN тСкидки ON зVIPклиенты.Сумма between тСкидки.Min AND тСкидки.Max;


Но первый запрос ведь с вычислениями, следовательно, данные в нем не редактируются.
Попытки создать запрос на обновление провалились, даже запустить не смог.
Короче - чем больше над этим вопросом думаю, тем больше непонятного появляется. Что тут можно и нужно сделать?
Помогите, пожалуйста!
...
Рейтинг: 0 / 0
29.06.2017, 14:43
    #39479708
nikolay_magagin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
Насколько я понял никакого запроса на обновление тебе не надо. Есть два варианта.
В таблице "Заказы" указывается столбец Скидка:
1) При заполнении записи вносится скидка, как фиксированное число (10,15) откуда и на каких тебе нужно условиях. Вычисления по строкам в дальнейшем по этой таблице.
2) При заполнении записи вносится скидка, как Код из таблицы "Скидка". Вычисления по строкам в дальнейшем по связи таблиц "Заказ" и "Скидка".
...
Рейтинг: 0 / 0
29.06.2017, 15:31
    #39479775
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
nikolay_magaginНасколько я понял никакого запроса на обновление тебе не надо. Есть два варианта.
В таблице "Заказы" указывается столбец Скидка:
1) При заполнении записи вносится скидка, как фиксированное число (10,15) откуда и на каких тебе нужно условиях. Вычисления по строкам в дальнейшем по этой таблице.
2) При заполнении записи вносится скидка, как Код из таблицы "Скидка". Вычисления по строкам в дальнейшем по связи таблиц "Заказ" и "Скидка".
Если я правильно понял столбец Скидка переносится в табл. Заказы, и каждый раз при проведении покупки клиентом рядом с новой суммой подставлять новое значение скидки? А как же избыточность записей?

Сейчас в базе это так выглядит. Таблица тСкидки без связей.
...
Рейтинг: 0 / 0
29.06.2017, 19:38
    #39479944
nikolay_magagin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
Тяжело понять какой конечный результат ты хочешь получить, но:
у тебя два значения скидки 1) По карте - относительно фиксированный. 2) В зависимости от суммы - не фиксированный и принимающий значение после внесения значений в таблицу "Заказы".
Оба значения влияют на столбец сумма в таблице "Заказы", и после определенного вычисления на то, кто из них нужнее в конкретной ситуации должны стать, как я понял, столбцом скидка%.
Вопрос, почему ты отправляешь столбец скидка% в таблицу "Клиенты"?
...
Рейтинг: 0 / 0
29.06.2017, 20:15
    #39479956
nikolay_magagin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
Alex37 ты действительно инженер-строитель?
...
Рейтинг: 0 / 0
29.06.2017, 20:39
    #39479967
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
nikolay_magaginAlex37 ты действительно инженер-строитель?
Действительно.
...
Рейтинг: 0 / 0
29.06.2017, 20:54
    #39479975
nikolay_magagin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
Я работаю инженером ПТО в электрике. Для работы накидываю программу. Хотелось бы комментарии, если есть свободное время. Отправить получится только на почту, превышает 150.
...
Рейтинг: 0 / 0
29.06.2017, 21:08
    #39479980
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
nikolay_magaginТяжело понять какой конечный результат ты хочешь получить, но:
у тебя два значения скидки 1) По карте - относительно фиксированный. 2) В зависимости от суммы - не фиксированный и принимающий значение после внесения значений в таблицу "Заказы".
Оба значения влияют на столбец сумма в таблице "Заказы", и после определенного вычисления на то, кто из них нужнее в конкретной ситуации должны стать, как я понял, столбцом скидка%.
Вопрос, почему ты отправляешь столбец скидка% в таблицу "Клиенты"?
Скидка только одна. Она фиксированная, зависит от общей суммы, которую клиент потратил ранее на покупки. А карта - это для понтов, красивая безделушка, но именная. Владелец имеет право получить повышенную скидку.
Таблица ведь так и называется: "тVIPклиенты".
База работает с 2007 года, процент скидки забивался вручную, в соответствии с суммой потраченной клиентом (да, таблица скидок распечатана в Ворде. Содержимое таблицы скидок иногда меняется - кризисы, сезон/не сезон...) :)
Столбец "Скидка%" всегда был таблице "Клиенты". Это как часть информации о клиенте вместе с телефонами и адресом.

Хочется немного автоматизировать процесс внесения величин этих скидок в таблицу тVIPклиенты нажатием кнопки.
Я бы в VBA попробовал это сделать, но именно в Accessе, со всякими рекордсетами, я не очень - знаний не хватает. В Exсel-е я чувствую себя намного увереннее.
...
Рейтинг: 0 / 0
29.06.2017, 21:25
    #39479983
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
nikolay_magaginЯ работаю инженером ПТО в электрике. Для работы накидываю программу. Хотелось бы комментарии, если есть свободное время. Отправить получится только на почту, превышает 150.

Пиши сюда: Alex37temp@yandex.ru

Прошу прощения у участников форума за то, что занимаюсь личной перепиской. Но "лички" на форуме вроде как нет...
...
Рейтинг: 0 / 0
29.06.2017, 21:37
    #39479988
nikolay_magagin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
Фиксировано для меня, это когда проставлено 5, 10 и т.д. %. У тебя скидка зависит от условия. Не видно, где скидка влияет на сумму. У тебя таблицы составлены неправильно. По идее надо из таблицы "Клиенты" убрать все, что касается карты и перенести в новую таблицу "Карты" с добавлением столбца Код_клиента.
...
Рейтинг: 0 / 0
29.06.2017, 21:39
    #39479990
nikolay_magagin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
А у тебя какая версия акцес?
...
Рейтинг: 0 / 0
29.06.2017, 21:56
    #39480002
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
nikolay_magaginФиксировано для меня, это когда проставлено 5, 10 и т.д. %. У тебя скидка зависит от условия. Не видно, где скидка влияет на сумму. У тебя таблицы составлены неправильно. По идее надо из таблицы "Клиенты" убрать все, что касается карты и перенести в новую таблицу "Карты" с добавлением столбца Код_клиента.
Величина скидки в базе записана как информация. Её величина используется в другой, специализированной программе, не имеющей к самой базе никакого отношения. В данном случае, эта часть базы (информация по VIP-клиентам) носит чисто информационный характер. Максимум - это подсчет всех платежей по каждому клиенту и всего по списку, печать некоторых отчетов.
Перенести в другую таблицу можно, но не нужно. Избыточность данных это не несет, т.к. номера карт (как и ID таблиц) не повторяются.
Работаю с Access 2003.
...
Рейтинг: 0 / 0
29.06.2017, 22:39
    #39480012
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
Код: sql
1.
2.
3.
UPDATE тVIPклиенты SET [Скидка%]=
(SELECT Top 1 Скидка FROM тСкидки WHERE 
(SELECT Sum(Сумма) FROM тVIPзаказы WHERE КодЗаказа=тVIPклиенты.Код) BETWEEN Min AND Max)
...
Рейтинг: 0 / 0
29.06.2017, 23:16
    #39480019
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
__Michelle
Код: sql
1.
2.
3.
UPDATE тVIPклиенты SET [Скидка%]=
(SELECT Top 1 Скидка FROM тСкидки WHERE 
(SELECT Sum(Сумма) FROM тVIPзаказы WHERE КодЗаказа=тVIPклиенты.Код) BETWEEN Min AND Max)


Запустился, стандартно предупредил, что запрос на обновление приведет к изменению данных в таблице. Нажал ОК.
Второе сообщение проинформировало, что в операции должен использоваться обновляемый запрос.
Никаких действий в таблице произведено не было.

Может надо создавать временную таблицу с вычисленной суммой (SELECT Sum(Сумма) FROM тVIPзаказы WHERE КодЗаказа=тVIPклиенты.Код) BETWEEN Min AND Max) и брать данные из неё? Потом удалить...
...
Рейтинг: 0 / 0
29.06.2017, 23:57
    #39480034
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
А так?
Код: sql
1.
2.
3.
UPDATE тVIPклиенты SET [Скидка%]= 
(SELECT Top 1 Скидка FROM тСкидки WHERE 
DSum("Сумма", "тVIPзаказы", "КодЗаказа=" & тVIPклиенты.Код) BETWEEN Min AND Max) 
...
Рейтинг: 0 / 0
29.06.2017, 23:58
    #39480037
nikolay_magagin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
Может мой способ покажется диким, но делал так.
1) Делать дубликат таблицы например "Клиенты_1" со всеми столбцами.
2) Запрос_1 по связи таблиц "Заказы" и "Скидки", где каждому коду заказа будет соответствовать скидка в зависимости от суммы.
3) Запрос на добавление в таблицу "Клиент_1" данных из: "Клиенты"-"Запрос_1", по связи Код к Код заказа, где скидка не равно скидка%.
4) Запрос на удаление из таблицы "Клиенты" по связи с таблицей "Клиенты_1" через Код.
5) Запрос на добавление в таблицу "Клиенты" из таблицы "Клиенты_1".
6) Запрос на удаление из таблицы "Клиенты_1".
В VBA осуществлял операции только с 3-ей позиции.
...
Рейтинг: 0 / 0
30.06.2017, 00:17
    #39480045
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
__MichelleА так?
Код: sql
1.
2.
3.
UPDATE тVIPклиенты SET [Скидка%]= 
(SELECT Top 1 Скидка FROM тСкидки WHERE 
DSum("Сумма", "тVIPзаказы", "КодЗаказа=" & тVIPклиенты.Код) BETWEEN Min AND Max) 


Аналогично. ...в операции должен использоваться обновляемый запрос.
...
Рейтинг: 0 / 0
30.06.2017, 00:33
    #39480047
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
Alex37,
Вашу задачу можно решить как-то так (+ продумать ситуацию когда цены и скидки будут меняться со временем-добавится пара таблиц)
...
Рейтинг: 0 / 0
30.06.2017, 00:37
    #39480050
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
nikolay_magagin,

Как-то много у тебя телодвижений... Я по другому пытаюсь делать. Но постоянно приходится искать, как делается то или иное действие, подгонять под свои реалии. Медленно дело идет
...
Рейтинг: 0 / 0
30.06.2017, 00:39
    #39480051
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
sdkuAlex37,
Вашу задачу можно решить как-то так (+ продумать ситуацию когда цены и скидки будут меняться со временем-добавится пара таблиц)
Спасибо. Сейчас посмотрю
...
Рейтинг: 0 / 0
30.06.2017, 00:56
    #39480054
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
sdkuAlex37,
Вашу задачу можно решить как-то так (+ продумать ситуацию когда цены и скидки будут меняться со временем-добавится пара таблиц)
Более понятное для меня решение - все вычисления в формах на VBA
У меня и форма почти такая же - можно легко код адаптировать :)
...
Рейтинг: 0 / 0
30.06.2017, 07:06
    #39480087
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
А так?
Код: sql
1.
2.
3.
4.
UPDATE тVIPклиенты SET [Скидка%]=
DLookUp("Скидка","тСкидки",
"Min<=" & DSum("Сумма","тVIPзаказы","КодЗаказа=" & тVIPклиенты.Код) & 
" AND Max>=" &  DSum("Сумма","тVIPзаказы","КодЗаказа=" & тVIPклиенты.Код)) 
...
Рейтинг: 0 / 0
30.06.2017, 11:12
    #39480246
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
__MichelleА так?
Код: sql
1.
2.
3.
4.
UPDATE тVIPклиенты SET [Скидка%]=
DLookUp("Скидка","тСкидки",
"Min<=" & DSum("Сумма","тVIPзаказы","КодЗаказа=" & тVIPклиенты.Код) & 
" AND Max>=" &  DSum("Сумма","тVIPзаказы","КодЗаказа=" & тVIPклиенты.Код)) 


Я восхищен глубиной Вашей мысли! Данная версия запроса сработала на отлично.
Огромное спасибо за помощь!!! Вы уже не раз помогали мне в составлении "хитрых" запросов.

Запускать планирую через CurrentDb.Execute, дабы избежать лишних вопросов программы.
...
Рейтинг: 0 / 0
30.06.2017, 12:30
    #39480302
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на обновление таблицы
__Michelle,
"Допилил" текст запроса под реальные данные, добавил фильтры - всё работает прекрасно!
Ещё раз огромное спасибо Вам за помощь!!!
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на обновление таблицы / 24 сообщений из 24, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]