Что выполняет запрос на обновление
Запросы SQL для обновления данных (UPDATE)
Под обновлением данных в БД подразумевается изменение значений в существующих записях таблицы. При этом возможно как изменение значений полей в группе строк (даже всех строк таблицы), так и правка значения поля отдельной строки.
В SQL, изменить запись в таблице БД можно с помощью команды UPDATE. В самом минимальном виде команда обновления данных выглядит следующим образом:
Здесь, UPDATE – команда указывающая, что запрос на обновление данных;
таблица – название таблицы, в которой будет проводиться изменения;
SET – команда, после которой через запятую указываются поля с назначаемыми им значениями;
поле – поле таблицы, в которое будет внесено изменение;
значение – новое значение, которое будет внесено в поле.
Например, если необходимо задать полю во всех строках таблицы значение равное нулю, можно выполнить такой запрос:
В этом случае, поле price абсолютно во всех имеющиеся строках таблицы примет значение 0.
Изменение одного значения
Изменение значения всех полей в таблице необходимо крайне редко. Чаще всего необходимо поменять значение какой-то конкретной записи. Для этого в завершении строки с командой UPDATE будет добавлена директива WHERE, в которой указывается условие, определяющее с какой именно строкой нужно выполнить операцию обновления.
num (номер товара) | title (название) | price (цена) |
1 | Чайник | 300 |
2 | Чашка | 100 |
3 | Ложка | 25 |
4 | Тарелка | 100 |
Для примера, нужно обновить стоимость товара с известным нам его значением num. Для этого, выполним следующий запрос:
Теперь, перед операцией изменения полей, будет выбрана строка, удовлетворяющая условию num = 2. Такая строка в таблице одна. В этой стоке цена и будет изменена на значение 150. В результате получим таблицу с измененной ценой товара.
Внесение изменений в несколько строк с условием отбора
Если вспомнить все многообразие условий в запросе, можно представить себе насколько разнообразными могут быть выборки. Поэтому и запросы на обновления могут выполняться либо с одной строкой, либо с группой строк, либо со всеми строками таблицы. Все зависит от стоящей перед вами задачи, а так же с какими строками таблицы нужно выполнять операции обновления.
Например, мы хотим уменьшить в два раза цену всех товаров, которые сейчас стоят от 100 и более. Запрос:
Условие WHERE здесь содержит правило, по которому будут выбраны только товары с ценой равной или более 100, а те товары, цена у которых ниже 100, затронуты запросом не будут.
price = price / 2 – формула, по которой будет вычисляться новая цена товаров. Новая цена будет записана равной старой цене поделенной на два.
В результате выполнения такого запроса получим таблицу с измененными записями:
num (номер товара) | title (название) | price (цена) |
1 | Чайник | 150 |
2 | Чашка | 50 |
3 | Ложка | 25 |
4 | Тарелка | 50 |
Обновление значений в нескольких полях строки
При необходимости обновлять сразу несколько полей, все поля с их значениями указываются после директивы SET через запятую. Например, нужно изменить название и цену товара с кодом 2 на «утюг», стоимостью 300:
Такой запрос каждому соответствующему полю в строке назначит его значение. А условие укажет, в какой именно строке будут выполнены изменения.
Выше приведены основные виды операций обновления. На их основе формируется запросы для решения большинства задач изменения данных в разработке с применением SQL.
Работе в программе в Microsoft Access
Запросы на обновление используются главным образом для того, чтобы внести изменения сразу в большое количество записей с помощью одного запроса.
Пример
В качестве примера рассмотрим запрос, который изменяет стоимость курсов обучения в таблице «Kursused» (Курсы) на некоторый постоянный коэффициент, например можно увеличим стоимость всех курсов на 20%.
Чтобы создать такой запрос:
1. в режиме Конструктора выбираем в запрос поля Kursuse_kood, Nimetus, Maksumus из таблицы «Kursused» (Курсы).
2. Выполните запрос, чтобы убедиться, что отбираются все записи.
3. Теперь изменим запрос, превратив его в запрос на обновление. Для этого щелкните на кнопке Обновление. Изменяется заголовок запроса и появляется дополнительная строка Update To (Обновление). При этом исчезают строки Sort (Сортировка) и Show (Вывод на экран).
4.Теперь нужно в строку Update To (Обновление) ввести выражение, по которому будет вычисляться новая стоимость: [Maksumus]* 1, 2.
В других случаях можно вводить константу, например, если нужно поменять дату во многих записях на текущую.
5. Прежде чем выполнять запрос на обновление, щелкните левой кнопкой мыши по стрелке на кнопке Вид и выберите
Режим таблицы. Вы увидите все записи, которые будут обновлены, хотя данные в обновляемых полях будут еще старые. И только убедившись, что отобраны нужные записи, можно выполнять запрос.
6. Сохраните запрос под именем Update_maksumus.
Так же, как и при добавлении записей в таблицу, Access выдаёт сообщение о количестве обновляемых записей и запрашивает подтверждение на обновление. Вы можете подтвердить обновление записей или отвергнуть.
Создание и выполнение запроса на обновление
С помощью запроса на обновление в базах данных Access можно добавлять, изменять и удалять данные в существующих записях. Запросы на обновление можно рассматривать как разновидность диалогового окна Поиск и замена с более широкими возможностями. Запрос на обновление нельзя использовать для добавления новых записей в базу данных или их удаления из нее.
Для добавления новых записей используется запрос на добавление, для удаления записей — запрос на удаление.
В этой статье
Обзор
Ниже представлены сходства и различия между функцией «Поиск и замена» и запросом на обновление
Как и в диалоговом окне Поиск и замена, в запросе на обновление можно указать значение, которое требуется заменить, а также новое значение.
В отличие от функции Поиск и замена запрос на обновление позволяет:
использовать условия, которые не зависят от заменяемого значения;
обновлять несколько записей за раз;
изменять записи в нескольких таблицах одновременно.
Ограничения обновления полей
Запрос на обновление нельзя использовать для обновления данных в полях указанных ниже типов.
Вычисляемые поля. Значения вычисляемых полей не хранятся в таблице постоянно. После вычисления они существуют только во временной памяти компьютера. Поскольку для вычисляемых полей не предусмотрено место постоянного хранения, их невозможно обновить.
Поля итогового или перекрестного запроса. Значения в запросах этих типов рассчитываются, поэтому их нельзя обновить с помощью запроса на обновление.
Поля с типом данных «Счетчик». Значения в полях с типом данных «Счетчик» изменяются только при добавлении записи в таблицу.
Поля в запросах с уникальными значениями и в запросах уникальных записей Значения в таких запросах суммарные. Некоторые значения представляют одну запись, а другие — несколько записей. Операция обновления не может быть, так как невозможно определить, какие записи были исключены как дубликаты, и поэтому обновить все необходимые записи невозможно. Это ограничение действует независимо от того, используете ли вы запрос на обновление или пытаетесь обновить данные вручную, вводя значения в форму или таблицу.
Поля в запросе на объединение Данные из полей в запросе на объединение невозможно обновить, так как каждая запись, которая отображается в двух или более источниках данных, отображается в результатах запроса на объединение только один раз. Так как некоторые повторяющиеся записи удаляются из результатов, Access не может обновить все необходимые записи.
Поля, являющиеся первичными ключами. В некоторых случаях, например если поле первичного ключа используется в связи таблиц, обновить поле с помощью запроса невозможно, если только для связи не было настроено автоматическое каскадное обновление.
Примечание: При каскадном обновлении Access автоматически обновляет значения внешнего ключа при изменении значения первичного ключа в родительской таблице.
Использование запроса на обновление
Чтобы создать запрос на обновление, рекомендуется выполнить следующее: создать запрос на выборку для определения записей, которые требуется обновить, а затем преобразовать его в запрос на обновление и обновить записи. Такая последовательность позволяет убедиться, что вы обновляете именно нужные записи.
Совет: Перед выполнением запроса на обновление рекомендуется создать резервную копию базы данных. Результаты данного запроса нельзя отменить, а созданная резервная копия позволит вам восстановить данные в случае необходимости.
Создание резервной копии базы данных
Откройте вкладку Файл и выберите команду Сохранить как. Обратите внимание: если вы используете Access 2010, откройте вкладку Файл и выберите команду Сохранить и опубликовать.
Справа в разделе Расширенная установка щелкните элемент Создать резервную копию базы данных.
В диалоговом окне Сохранение резервной копии укажите имя и расположение резервной копии и нажмите кнопку Сохранить.
Приложение Access закроет исходный файл, создаст резервную копию и снова его откроет.
Чтобы вернуться к резервной копии, закройте и переименуйте исходный файл, чтобы получить возможность использовать имя исходной версии. Назначьте резервной копии имя исходной версии и откройте переименованную резервную копию в Access.
В этом разделе
Этап 1. Создание запроса на выборку для определения обновляемых записей
Откройте базу данных, содержащую записи, которые нужно обновить.
На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.
Откройте вкладку Таблицы.
Выделите одну или несколько таблиц с записями, которые требуется обновить, и нажмите кнопку Добавить, а затем — кнопку Закрыть.
Таблицы отображаются в конструкторе запросов в одном или нескольких окнах, а в них кажутся все поля каждой таблицы. На рисунке показан конструктор запросов с типичной таблицей.
1. Таблица в окне конструктора запросов
В окнах таблиц дважды щелкните поля, которые необходимо обновить. Выделенные поля появятся в строке Поле бланка запроса.
Для каждого столбца в бланке запроса можно добавить одно поле таблицы.
Чтобы быстро добавить все поля в таблице, дважды щелкните звездочку ( *) в верхней части списка полей таблицы в окне таблицы. На рисунке показан бланк запроса со всеми добавленными полями.
Чтобы ограничить результаты запроса на основе значений полей, в бланке запроса в строке Условие введите условие, которое необходимо использовать для ограничения результатов.
Таблица примеров условий
В приведенной ниже таблице представлены некоторые примеры условий, а также результаты их применения.
Примечание: Во многих примерах этой таблицы используются подстановочные знаки, чтобы сделать запрос более гибким или эффективным.
Возвращает все числа больше 234. Чтобы найти все числа меньше 234, используйте условие = » Новосибирск «
Возвращает все записи от «Новосибирск» до конца алфавита.
Between #2.02.2020# And #12.01.2020 #
Выбирает даты между 2-фев-17 и 1-дек-17 (ANSI-89). Если в базе данных применяется набор подстановочных знаков ANSI-92, используйте вместо знаков решетки ( #) одинарные кавычки ( ‘). Пример: Between ‘02.02.2020’ And ‘01.12.2020’.
Находит все записи, в которых содержимое поля не соответствует значению «Германия». Согласно этому условию будут найдены записи, содержащие дополнительный текст, кроме слова «Германия», например «Германия (евро)» или «Европа (Германия)».
Находит все записи кроме тех, которые начинаются с буквы «Т». Если в базе данных применяются подстановочные знаки ANSI-92, используйте знак процента ( %) вместо звездочки ( *).
Находит все записи, которые не оканчиваются буквой «т». Если в базе данных применяются подстановочные знаки ANSI-92, используйте знак процента (%) вместо звездочки (*).
Находит все записи в списке со словами «Канада» или «Великобритания».
В текстовом поле выполняется поиск всех записей, которые начинаются на одну из первых четырех букв алфавита (А-Г). Если в базе данных применяются подстановочные знаки ANSI-92, используйте знак процента (%) вместо звездочки (*).
Находит все записи, которые содержат сочетание букв «тр». Если в базе данных применяются подстановочные знаки ANSI-92, используйте знак процента (%) вместо звездочки (*).
Like «Григорий Верны?»
Находит все записи за 2 февраля 2020 г. Если в базе данных используется набор подстрокных знаков ANSI-92, окружите дату одинарными кавычками (‘) вместо знаков фунта (#); например: ‘02.02.2020’).
Date для возврата всех дат не менее 30-дневной давности.
Использует функцию Date для возврата всех записей, содержащих текущую дату.
Between Date( ) And DateAdd(«M», 3, Date( ))
Использует функции Date и DateAdd для возврата всех записей между текущей датой и датой на три месяца позже.
Возвращает все записи, содержащие пустое (незаполненное или неопределенное) значение.
Возвращает все записи, содержащие непустое значение.
Возвращает все записи, содержащие строку нулевой длины. Такие строки обычно используются, когда поле обязательно должно иметь значение, но это значение еще неизвестно. Например, в поле требуется ввести номер факса, но у некоторых клиентов его нет. В этом случае вместо номера можно ввести пару двойных кавычка без пробела между ними («).
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Убедитесь, что запрос возвращает те записи, которые следует обновить.
Чтобы удалить поля, которые не нужно включать в конструктор запросов, выделите их и нажмите клавишу DELETE.
Чтобы добавить поля в конструктор запросов, перетащите их в бланк запросов.
Этап 2. Обновление записей
На вкладке Конструктор в группе Тип запроса нажмите кнопку Обновить.
В описанной здесь процедуре показано, как преобразовать запрос на выборку в запрос на обновление. При такой операции Access добавляет строку Обновление в бланк запроса. На приведенном ниже рисунке показан запрос на обновление, возвращающий все активы компании, приобретенные после 5 января 2005 г., и изменяющий расположение на «Склад 3» для всех записей, соответствующих этому условию.
Выберите поле с данными, которые следует изменить, и введите выражение (условие изменения) в строке Обновление для этого поля.
В строке Обновление можно использовать любое допустимое выражение.
Таблица примеров выражений
В приведенной ниже таблице представлены примеры выражений и соответствующие им результаты изменения данных.
В поле типа «Текстовый» заменяет текстовое значение строкой «Продавец».
В поле «Дата/время» изменяет значение даты на «10-авг-20».
В поле типа «Да/Нет» изменяет значение Нет на Да.
Добавляет буквы «PN» к началу каждого указанного инвентарного номера.
Перемножает значения полей с именами «Цена» и «Количество».
Увеличивает значения в поле «СтоимостьДоставки» на 50 процентов.
DSum(«[Quantity] * [UnitPrice]»,
«Сведения о заказе», «[ProductID]=» & [ProductID])
Если значение поля «КодТовара» в текущей таблице совпадает со значением поля «КодТовара» в таблице «Заказано», данное выражение обновляет итоговые значения продаж, рассчитывая их как произведение значений в полях «Цена» и «Количество». Выражение использует функцию DSum, так как она может выполнять операции с несколькими таблицами и полями таблиц.
Обрезает (удаляет) левые символы в текстовой или числовой строке, оставляя пять правых символов.
IIf(IsNull([Цена]), 0, [Цена])
Заменяет пустое (неизвестное или неопределенное) значение нулем (0) в поле с именем «Цена».
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Появится предупреждающее сообщение.
Для выполнения запроса и обновления данных нажмите кнопку Да.
Примечание: После выполнения запроса можно заметить, что в его результатах отсутствуют некоторые поля. Если запрос содержит поля, которые не обновлялись, по умолчанию эти поля не отображаются в результатах. Предположим, что были включены поля «Код» из двух таблиц, чтобы убедиться, что запрос идентифицирует и обновляет нужные записи. Если эти поля не обновлялись, то в приложении Access они не отображаются в результатах.
Обновление данных в одной таблице данными из другой таблицы
При обновлении данных в одной таблице данными из другой необходимо соблюдать основное правило: типы данных исходного и целевого полей должны совпадать или быть совместимыми.
Кроме того, при обновлении данных в одной таблице данными из другой и использовании совместимых типов данных вместо совпадающих приложение Access преобразует типы данных этих полей в целевой таблице. В результате некоторые данные в целевых полях могут обрезаться (удаляться). В разделе Ограничения преобразования типов данных указаны случаи, когда можно или нельзя выполнять преобразование типов данных. Также в этом разделе приведена таблица, демонстрирующая, когда преобразование типа данных может привести к изменению или удалению всех либо некоторых данных в поле, а также какие данные могут удаляться.
Процесс обновления данных в одной таблице данными из другой включает основные этапы, указанные ниже.
Создание запроса на обновление и добавление в него исходной и целевой таблиц.
Объединение этих таблиц по полям, содержащим связанные сведения.
Добавление имен целевых полей в строку Поле бланка запроса.
Добавление имен исходных полей в строку Обновление бланка запроса с использованием следующего синтаксиса: [ исходная_таблица].[исходное_поле ].
Действия, описанные в данном разделе, предполагают, что используются две похожих таблицы. В этом примере таблица «Клиенты» располагается в унаследованной базе данных и содержит более свежие данные, чем таблица «Заказчики». Несколько имен менеджеров и адресов были изменены. Поэтому было принято решение обновить таблицу «Заказчики» данными из таблицы «Клиенты».
Устранение ошибок, которые могут возникнуть при обновлении данных в запросах и формах Access
Office 365 ProPlus переименован в Майкрософт 365 корпоративные приложения. Для получения дополнительной информации об этом изменении прочитайте этот блог.
Исходный номер КБ: 328828
В этой статье описываются ошибки, которые могут возникать в Microsoft Access при обновлении данных в запросах и формах. В этой статье также описываются причины ошибок и их устранение.
При попытке обновления данных в запросе или форме вы можете получить одно из следующих сообщений об ошибке:
Операция должна использовать запрос с возможностью обновления.
Этот набор записей не обновляется.
Устранение неполадок, связанных с проблемами, которые могут возникнуть при обновлении данных в запросе
Если запрос основан на трех или нескольких таблицах и имеет отношение «много к одному», нельзя обновлять данные непосредственно в запросе. Вы можете обновить данные в форме или на странице доступа к данным. Это можно сделать на основе запроса, когда свойство формы заданной RecordsetType dynaset(Несогласованные обновления).
Когда запрос является перекрестным запросом, вы не можете обновить данные в запросе.
Если запрос — это SQL microsoft, вы не можете обновить данные в запросе.
Когда запрос вычисляет сумму, среднее значение, количество или другой тип общей суммы значений в поле, нельзя обновлять данные в запросе. Кроме того, нельзя обновить запрос, ссылающийся на поле в строке Обновление для строки из перекрестия, запроса, выбора запроса или подкожи, содержащую итоги или агрегированные функции. Чтобы решить эту проблему, используйте функцию Сводка домена в строке Обновление для запроса обновления. Вы можете ссылаться на поля из перекрестного запроса, выбора запроса или подкожи, которые содержат итоговые или совокупные функции.
Когда запрос является запросом Union, нельзя обновлять данные в запросе.
Когда свойство Unique Values запроса за установлено значение Да, вы не можете обновить данные в запросе. Чтобы решить эту проблему, установите свойство Unique Values запроса на значение No.
Если запрос включает связанную таблицу ODBC без уникального индекса или таблицу Paradox без основного ключа, нельзя обновлять данные в запросе. Чтобы решить эту проблему, добавьте основной ключ или уникальный индекс в связанную таблицу.
Если у вас нет разрешений на обновление данных для запроса или таблицы, вы не можете обновлять данные. Чтобы устранить эту проблему, назначьте разрешения на обновление данных.
Если запрос включает несколько таблиц или один запрос, а таблицы или запросы не соединены линией связи в представлении Design, нельзя обновлять данные в запросе. Чтобы устранить эту проблему, необходимо правильно присоединиться к таблицам, чтобы можно было их обновить.
Если поле, которое требуется обновить, является вычисляемой областью, данные в запросе не обновляются.
Если поле, которое вы пытаетесь обновить, является только для чтения, база данных открыта только для чтения или база данных расположена на диске только для чтения, данные в запросе не обновляются. Чтобы избежать этой проблемы, не открывайте базу данных только для чтения. Если база данных расположена на диске, который только для чтения, удалите атрибут только для чтения с диска или переместите базу данных на диск, который не только для чтения.
Когда поле в записи, которую вы пытаетесь обновить, удаляется или блокируется другим пользователем, вы не можете обновить данные в запросе. Заблокированная запись может быть обновлена, как только запись будет разблокирована.
Если запрос основан на таблицах с отношением один к многим, то типы полей, которые вы не можете изменить, являются следующими:
Вы можете разрешить любую из этих проблем, если вы принимаете правильное действие из следующего списка:
Устранение неполадок, связанных с проблемами, которые могут возникнуть при обновлении данных в форме
Нельзя обновлять данные в форме, если форма основана на процедуре хранения с более чем одной таблицей.
Нельзя обновлять данные в форме, если форма основана на наборе ActiveX объектов данных (ADO). Формы доступа позволяют изменять данные из наборов записей ADO, если набор записей ADO создается с помощью сочетания поставщиков MSDataShape и SQL Server OLEDB.
Обновление или повторный запрос данных
При совместном доступе к базе данных по сети Microsoft Access обновляет информацию через заданные промежутки времени. Чтобы просмотреть последние данные, обновите записи в представлении таблицы или формы, а на вкладке «Главная» нажмите кнопку «Обновить > обновить». В процессе обновления обновляются существующие данные в таблице или форме, а также не переупоряджаются записи, не отображаются новые записи, а также удаляются все удаленные записи или записи, которые больше не соответствуют указанным условиям. Для более детального или тщательного обновления используйте макрос для повторного получения данных.
Примечание: Запуск повторного процесса может быть отнимает много времени в зависимости от размера наборов записей.
Выберите нужное действие:
Обновление данных
Выполните одно из следующих действий:
Чтобы обновить записи в представлении таблицы или формы, на вкладке «Главная» в группе «Записи» нажмите кнопку «Обновить все» и выберите «Обновить».
Чтобы обновить записи в представлении «Сводная диаграмма», на вкладке «Конструктор» в группе «Данные» нажмите кнопку «Обновить данные».
Настройка интервала обновления
Вы можете настроить интервал, с которого Access обновляет данные. По умолчанию Access обновляет данные каждые 60 секунд.
Нажмите кнопку Office. Появится область outspace.
В левой области области «Outspace» нажмите кнопку «Параметры».
В левой области диалогового окна «Параметры Access» нажмите кнопку «Дополнительные параметры».
В области справа в области «Дополнительные» укажите значение для интервала обновления (с).
Повторное сбор данных с помощью макроса
Если вы хотите, чтобы данные автоматически повторно включались в событие, можно создать макрос и прикрепить его к событию. Предположим, например, что каждый раз, когда форма получает форму с фокус, необходимо повторно получить данные в фокус. Чтобы создать макрос и прикрепить его к событию On Got Focus формы, с помощью следующей процедуры:
Откройте вкладку Создание и в группе Другие нажмите кнопку Макрос. Если она недоступна, нажмите стрелку под кнопкой Модуль или Модуль класса, а затем нажмите кнопку Макрос.
Щелкните стрелку рядом с символом зеленого знака «плюс» (+) и выберите «Повторное».
Сохраните макрос с именем «Повторноеиспользование», а затем закроем конструктор макроса.
Откройте форму, которую вы хотите Конструктор. Если лист свойств не отображается, нажмите F4, чтобы отобразить его.
Убедитесь, что выбрана сама форма. Затем на окне свойств щелкните вкладку «Событие».
На вкладке «Событие» щелкните стрелку в свойстве «Фокус в фокусе» и выберите имя макроса — «Requery».
Повторное сбор данных с помощью кода
Кроме того, вы можете использовать код для автоматического повторного обработки данных. Предположим, что вам нужно повторно проговоировать данные в форме каждый раз, когда фокус получается в форме. Чтобы создать модуль и прикрепить его к событию On Got Focus формы, с помощью следующей процедуры:
Откройте форму в конструкторе. Если лист свойств не отображается, нажмите F4, чтобы отобразить его.
Убедитесь, что выбрана сама форма. Затем на окне свойств щелкните вкладку «Событие».
На вкладке «События» в свойстве «Фокус» нажмите кнопку «Построить» .
В диалоговом окне «Выбор построитель» нажмите кнопку «Построитель кода».
В редакторе Visual Basic откроется новый модуль.
Введите me.Requery,а затем закроем Visual Basic редактора.
Данные повторного получения в веб-приложении Access
Запросы веб-приложения Access будут запускаться на сервере. Для повторного получения данных в веб-приложении Access необходимо использовать макрос RequeryRecords. Для этого макроса требуется текущий набор записей.
Откройте форму, нажмите кнопку «Действия»и выберите «Текущая».
В каталоге действийнажмите кнопку RequeryRecords. Если оставить пустым where= (Where=), дополнительная фильтрация результатов не выполняется, а orderBy= оставлен пустым, сортировка не выполняется.