powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на обновление таблицы
24 сообщений из 24, страница 1 из 1
Запрос на обновление таблицы
    #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
Запрос на обновление таблицы
    #39479708
nikolay_magagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понял никакого запроса на обновление тебе не надо. Есть два варианта.
В таблице "Заказы" указывается столбец Скидка:
1) При заполнении записи вносится скидка, как фиксированное число (10,15) откуда и на каких тебе нужно условиях. Вычисления по строкам в дальнейшем по этой таблице.
2) При заполнении записи вносится скидка, как Код из таблицы "Скидка". Вычисления по строкам в дальнейшем по связи таблиц "Заказ" и "Скидка".
...
Рейтинг: 0 / 0
Запрос на обновление таблицы
    #39479775
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nikolay_magaginНасколько я понял никакого запроса на обновление тебе не надо. Есть два варианта.
В таблице "Заказы" указывается столбец Скидка:
1) При заполнении записи вносится скидка, как фиксированное число (10,15) откуда и на каких тебе нужно условиях. Вычисления по строкам в дальнейшем по этой таблице.
2) При заполнении записи вносится скидка, как Код из таблицы "Скидка". Вычисления по строкам в дальнейшем по связи таблиц "Заказ" и "Скидка".
Если я правильно понял столбец Скидка переносится в табл. Заказы, и каждый раз при проведении покупки клиентом рядом с новой суммой подставлять новое значение скидки? А как же избыточность записей?

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

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

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

Прошу прощения у участников форума за то, что занимаюсь личной перепиской. Но "лички" на форуме вроде как нет...
...
Рейтинг: 0 / 0
Запрос на обновление таблицы
    #39479988
nikolay_magagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фиксировано для меня, это когда проставлено 5, 10 и т.д. %. У тебя скидка зависит от условия. Не видно, где скидка влияет на сумму. У тебя таблицы составлены неправильно. По идее надо из таблицы "Клиенты" убрать все, что касается карты и перенести в новую таблицу "Карты" с добавлением столбца Код_клиента.
...
Рейтинг: 0 / 0
Запрос на обновление таблицы
    #39479990
nikolay_magagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А у тебя какая версия акцес?
...
Рейтинг: 0 / 0
Запрос на обновление таблицы
    #39480002
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nikolay_magaginФиксировано для меня, это когда проставлено 5, 10 и т.д. %. У тебя скидка зависит от условия. Не видно, где скидка влияет на сумму. У тебя таблицы составлены неправильно. По идее надо из таблицы "Клиенты" убрать все, что касается карты и перенести в новую таблицу "Карты" с добавлением столбца Код_клиента.
Величина скидки в базе записана как информация. Её величина используется в другой, специализированной программе, не имеющей к самой базе никакого отношения. В данном случае, эта часть базы (информация по VIP-клиентам) носит чисто информационный характер. Максимум - это подсчет всех платежей по каждому клиенту и всего по списку, печать некоторых отчетов.
Перенести в другую таблицу можно, но не нужно. Избыточность данных это не несет, т.к. номера карт (как и ID таблиц) не повторяются.
Работаю с Access 2003.
...
Рейтинг: 0 / 0
Запрос на обновление таблицы
    #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
Запрос на обновление таблицы
    #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
Запрос на обновление таблицы
    #39480034
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так?
Код: sql
1.
2.
3.
UPDATE тVIPклиенты SET [Скидка%]= 
(SELECT Top 1 Скидка FROM тСкидки WHERE 
DSum("Сумма", "тVIPзаказы", "КодЗаказа=" & тVIPклиенты.Код) BETWEEN Min AND Max) 
...
Рейтинг: 0 / 0
Запрос на обновление таблицы
    #39480037
nikolay_magagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может мой способ покажется диким, но делал так.
1) Делать дубликат таблицы например "Клиенты_1" со всеми столбцами.
2) Запрос_1 по связи таблиц "Заказы" и "Скидки", где каждому коду заказа будет соответствовать скидка в зависимости от суммы.
3) Запрос на добавление в таблицу "Клиент_1" данных из: "Клиенты"-"Запрос_1", по связи Код к Код заказа, где скидка не равно скидка%.
4) Запрос на удаление из таблицы "Клиенты" по связи с таблицей "Клиенты_1" через Код.
5) Запрос на добавление в таблицу "Клиенты" из таблицы "Клиенты_1".
6) Запрос на удаление из таблицы "Клиенты_1".
В VBA осуществлял операции только с 3-ей позиции.
...
Рейтинг: 0 / 0
Запрос на обновление таблицы
    #39480045
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__MichelleА так?
Код: sql
1.
2.
3.
UPDATE тVIPклиенты SET [Скидка%]= 
(SELECT Top 1 Скидка FROM тСкидки WHERE 
DSum("Сумма", "тVIPзаказы", "КодЗаказа=" & тVIPклиенты.Код) BETWEEN Min AND Max) 


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

Как-то много у тебя телодвижений... Я по другому пытаюсь делать. Но постоянно приходится искать, как делается то или иное действие, подгонять под свои реалии. Медленно дело идет
...
Рейтинг: 0 / 0
Запрос на обновление таблицы
    #39480051
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuAlex37,
Вашу задачу можно решить как-то так (+ продумать ситуацию когда цены и скидки будут меняться со временем-добавится пара таблиц)
Спасибо. Сейчас посмотрю
...
Рейтинг: 0 / 0
Запрос на обновление таблицы
    #39480054
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuAlex37,
Вашу задачу можно решить как-то так (+ продумать ситуацию когда цены и скидки будут меняться со временем-добавится пара таблиц)
Более понятное для меня решение - все вычисления в формах на VBA
У меня и форма почти такая же - можно легко код адаптировать :)
...
Рейтинг: 0 / 0
Запрос на обновление таблицы
    #39480087
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так?
Код: sql
1.
2.
3.
4.
UPDATE тVIPклиенты SET [Скидка%]=
DLookUp("Скидка","тСкидки",
"Min<=" & DSum("Сумма","тVIPзаказы","КодЗаказа=" & тVIPклиенты.Код) & 
" AND Max>=" &  DSum("Сумма","тVIPзаказы","КодЗаказа=" & тVIPклиенты.Код)) 
...
Рейтинг: 0 / 0
Запрос на обновление таблицы
    #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
Запрос на обновление таблицы
    #39480302
Alex37
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle,
"Допилил" текст запроса под реальные данные, добавил фильтры - всё работает прекрасно!
Ещё раз огромное спасибо Вам за помощь!!!
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на обновление таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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