Foreversoft.ru

IT Справочник
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Access запрос на обновление данных

Создание запросов на обновление таблиц

Запросы на обновление используются главным образом для того, чтобы внести изменения сразу в большое количество записей с помощью одного запроса. Классическим примером такого запроса является изменение цены в таблице «Товары» (Products) на некоторый постоянный коэффициент, например можно увеличить цену одной из категорий товара на 20%. Чтобы создать такой запрос:

  1. Раскройте список таблиц, щелкнув мышью по ярлыку Таблицы (Tables) окна базы данных.
  2. Выделите таблицу «Товары» (Products). Щелкните левой кнопкой мыши по стрелке на кнопке Новый объект (New Object) на панели инструментов и выберите из списка значение Запрос (Query). Появится окно Конструктора запросов с таблицей «Товары» в верхней части. Перенесите в бланк запроса поля «Цена» и «КодТипа».
  3. Введите условие отбора записей: например, в столбец «КодТипа» введите значение 1.
  4. Выполните запрос, чтобы убедиться, что отбираются все записи, содержащие напитки.
  5. Теперь изменим запрос, превратив его в запрос на обновление. Для этого выполните команду меню Запрос, Обновление (Query, Update). Изменяется заголовок запроса и появляется дополнительная строка Обновление (Update To). При этом исчезают строки Сортировка (Sort) и Вывод на экран (Show) (рис. 8.8).
  6. Теперь нужно в строку Обновление (Update To) ввести выражение, по которому будет вычисляться новая цена: [Цена]* 0, 2. В других случаях можно вводить константу, например, если нужно поменять дату во многих записях на текущую.
  7. Теперь можно выполнить запрос. Для этого нажмите кнопку Запуск (Run) на панели инструментов. Так же, как и при добавлении записей в таблицу, Access выдаёт сообщение о количестве обновляемых записей и запрашивает подтверждение на обновление. Вы можете подтвердить обновление записей или отвергнуть.

Рис. 8.8. Запрос на обновление записей

Прежде чем выполнять запрос на обновление, щелкните левой кнопкой мыши по стрелке на кнопке Вид (View) и выберите Режим таблицы (Datasheet View). Вы увидите все записи, которые будут обновлены, хотя данные в обновляемых полях будут еще старые. И только убедившись, что отобраны нужные записи, можно выполнять запрос.

В приведенном примере изменялись значения в поле, которое не является первичным ключом в таблице «Товары» (Products). Особый случай возникает, когда требуется обновить значение первичного ключа в таблице. Если эта таблица связана отношением «один-ко-многим» с другими таблицами, то при изменении первичного ключа записи должны одновременно измениться значения внешних ключей во всех связанных записях подчиненных таблиц. Access обеспечивает выполнение такого изменения автоматически, т. к. поддерживает каскадное обновление записей. При определении связи между таблицами можно установить флажок каскадное обновление связанных полей (Cascade Update Related Fields).

Если такой флажок установлен, то при изменении значения первичного ключа в главной таблице Access автоматически выполняет специальный запрос, с помощью которого обновляются внешние ключи всех связанных записей в подчиненной таблице.

Убедиться в том, как работает такой запрос, можно на примере таблиц «Сотрудники» (Employees) и «Заказы» (Orders). Для этого нам придется сначала сделать копии этих таблиц и установить связь между ними:

  1. Раскройте список таблиц в окне базы данных и выделите таблицу «Сотрудники».
  2. Скопируйте таблицу в буфер обмена, нажав комбинацию клавиш + .
  3. Вставьте таблицу из буфера обмена, нажав комбинацию клавиш + . Появится диалоговое окно Вставка таблицы (Paste Table As).
  4. В поле Имя таблицы (Table Name) введите строку: Сотрудники (копия). Оставьте предлагаемое по умолчанию значение переключателя в группе Параметры вставки (Paste Options). Нажмите кнопку ОК или клавишу . В списке появится новая таблица.
  5. Выполните шаги 1—4 для таблицы «Заказы», создав таблицу «Заказы (копия)».
  6. Для выполнения примера нам придется немного изменить таблицу «Заказы (копия)». Поле «КодСотрудника» в таблице «Заказы» является полем подстановки, т. е. хотя в этом поле содержатся коды сотрудников, при отображении таблицы в этом поле показываются фамилия и имя сотрудника. Мы можем временно удалить поле подстановки, чтобы видеть результаты каскадного обновления данного поля. Для этого достаточно открыть таблицу «Заказы (копия)» в режиме Конструктора, выделить строку «КодСотрудника», раскрыть в панели Свойства поля (Field Properties) вкладку Подстановка (Lookup) и установить значение свойства Тип источника строк (Row Source Type) равным Поле (Text box). Сохраните изменение.
  7. Еще одно изменение потребуется ввести в таблицу «Сотрудники (копия)». Поле «КодСотрудника» в ней имеет тип Счетчик (AutoNumber), поэтому Access не позволит изменить значение в этом поле. Откройте эту таблицу в режиме Конструктора и замените тип данных для поля «КодСотрудника» на Числовой (Number).
  8. Теперь нужно установить связи между новыми таблицами. Нажмите кнопку Схема данных (Relationships) на панели инструментов для вывода окна Схема данных (Relationships).
  9. Нажмите кнопку Очистить макет (Clear Layout), чтобы очистить окно схемы данных. Подтвердите свое намерение в окне сообщения, нажав кнопку Да (Yes).
  10. Добавьте таблицы «Сотрудники (копия)» и «Заказы (копия)» с помощью диалогового окна Добавление таблицы (Show Table). Для этого нажмите соответствующую кнопку на панели инструментов.
  11. Чтобы установить связь «один-ко-многим» между таблицами, перетащите поле «КодСотрудника» таблицы «Сотрудники (копия)» в соответствующее поле таблицы «Заказы (копия)». Появится диалоговое окно Изменение связей (Edit Relationship).
  12. В этом окне необходимо установить флажки Обеспечение целостности данных (Enforce Referential Integrity) и каскадное обновление связанных полей (Cascade Update Related Fields) (рис. 8.9). Нажмите кнопку ОК.
  13. Закройте окно Схема данных (Relationships).
Читать еще:  Создание запросов в access

Рис. 8.9. Диалоговое окно Изменение связей

Для выполнения каскадного обновления:

  1. Откройте таблицы «Сотрудники (копия)» и «Заказы (копия)» и разместите их на экране так, чтобы были видны обе таблицы (рис 8.10).
  2. Отсортируйте таблицу «Заказы (копия)» по столбцу «Сотрудник». Для этого выделите данный столбец, щелкнув левой кнопкой мыши по его заголовку, и нажмите кнопку Сортировка по возрастанию (Sort Ascending) на панели инструментов.
  3. Измените значение в столбце «Код сотрудника» первой записи таблицы «Сотрудники (копия)», введя число 10, и нажмите клавишу , чтобы перейти к следующей записи. Изменение кода сразу же будет отображено в столбце «Сотрудник» таблицы «Заказы (копия)».

Рис. 8.10. Каскадное обновление записей

Access запрос на обновление данных

Запрос на обновление Access

Сегодня поговорим на тему «Запрос на обновление Access». Запрос на обновление Access может быть использован для обновления данных в полях базовых таблиц. Изменения вносятся в группу записей, отбираемых с помощью указанных пользователем условий отбора. Значения для изменений в полях определяются в бланке запроса в строке Обновление (Update To).
Задача. Рассчитайте стоимость товара в каждой строке таблицы ОТГРУЗКА и сохраните ее в поле СУММА_ОТГР этой же таблицы.

  1. Для формирования запроса на обновление сначала создайте запрос Выборка (Select) на основе двух таблиц: обновляемой таблицы ОТГРУЗКА и таблицы ТОВАР.
  2. Преобразуйте запрос на выборку в запрос на обновление, щелкнув на кнопке Обновление (Update), размещенной на вкладке ленты Конструктор (Design) или выбрав команду Обновление (Update) из списка Тип запроса (Query Type) в контекстном меню запроса. После выполнения этой команды в бланке запроса появляется строка Обновление (Update To) (рис. 4.43).
  3. Заполните бланк запроса. Перетащите обновляемое поле СУММА_ОТГР из списка таблицы ОТГРУЗКА в строку Поле (Field). В строку Обновление (Update To) введите выражение [ЦЕНА]*[КОЛ_ОТГР], которое рассчитывает значение для обновления.

  • Просмотрите содержимое обновляемого поля СУММА_ОТГР перед выполнением запроса, нажав кнопку Режим (View) на ленте конструктора запросов в группе Результаты (Results).
  • Для обновления содержимого поля СУММА_ОТГР выполните запрос, нажав кнопку Выполнить (Run) на вкладке ленты Конструктор (Design). Открывается диалоговое окно с сообщением о числе обновляемых записей и вопросом о продолжении операции обновления. Подтвердите обновление записей.
  • Просмотрите содержимое обновляемого поля СУММА_ОТГР после выполнения запроса. Для этого переключитесь после выполнения запроса в режим таблицы, воспользовавшись кнопкой Режим таблицы (Datasheet View) в строке состояния или нажмите кнопку Режим (View) на вкладке ленты.

  • Таким образом, рассмотренный запрос позволяет автоматизировать расчет стоимости товара, указанного в каждой строке спецификации накладной ― записи таблицы ОТГРУЗКА.

    1. Если обновлять нужно только некоторые строки таблицы, задайте условия отбора обновляемых записей. Для этого дополните бланк запроса полем, по которому требуется произвести отбор записей. Перетащите поле КОД_ТОВ в бланк запроса и введите в строку Условия отбора (Criteria) параметр [Введите код товара] (см. рис. 4.43).
    2. Выполните запрос. Обновление будет выполнено только для записей с введенным кодом товара.
    3. Сохраните запрос под именем Расчет стоимости.
    4. Перейдите в режим SQL. Эквивалентная запросу на обновление инструкция UPDATE будет записана следующим образом:
      UPDATE ТОВАР INNER JOIN ОТГРУЗКА ON ТОВАР.КОД_ТОВ = ОТГРУЗКА.КОД_ТОВ
      SET ОТГРУЗКА.СУММА_ОТГР = [ЦЕНА]*[КОЛ_ОТГР] WHERE (((ТОВАР.КОД_ТОВ)=[Введите код товара]));

    Имена таблиц, используемых в запросе, и способ их объединения задаются не-посредственно за именем инструкции UPDATE. Инструкция UPDATE обновляет указанное в предложении SET поле ОТГРУЗКА.СУММА_ОТГР, присваивая значение, за-данное выражением [ЦЕНА]*[КОЛ_ОТГР]. Обновление происходит во всех записях, которые удовлетворяют условию отбора, заданному в предложении WHERE.
    Для закрепления смотрим видеоурок:

    Запросы SQL для обновления данных (UPDATE)

    Изучаем SQL

    • 1. Введение в SQL
    • 2. Запросы на выборку
    • 3. Условия в запросах
    • 4. Cортировка данных
    • 5. Вставка записи
    • 6. Вставка нескольких записей
    • 7. Изменение записи

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

    В SQL, изменить запись в таблице БД можно с помощью команды UPDATE. В самом минимальном виде команда обновления данных выглядит следующим образом:

    UPDATE таблица SET поле = значение

    Здесь, UPDATE – команда указывающая, что запрос на обновление данных;

    таблица – название таблицы, в которой будет проводиться изменения;

    SET – команда, после которой через запятую указываются поля с назначаемыми им значениями;

    поле – поле таблицы, в которое будет внесено изменение;

    значение – новое значение, которое будет внесено в поле.

    Например, если необходимо задать полю во всех строках таблицы значение равное нулю, можно выполнить такой запрос:

    UPDATE goods SET price = 0

    В этом случае, поле price абсолютно во всех имеющиеся строках таблицы примет значение 0.

    Изменение одного значения

    Изменение значения всех полей в таблице необходимо крайне редко. Чаще всего необходимо поменять значение какой-то конкретной записи. Для этого в завершении строки с командой UPDATE будет добавлена директива WHERE, в которой указывается условие, определяющее с какой именно строкой нужно выполнить операцию обновления.

    Читать еще:  База данных access 2020
    num
    (номер товара)
    title
    (название)
    price
    (цена)
    1Чайник300
    2Чашка100
    3Ложка25
    4Тарелка100

    Для примера, нужно обновить стоимость товара с известным нам его значением num. Для этого, выполним следующий запрос:

    UPDATE goods SET price = 150 WHERE num = 2

    Теперь, перед операцией изменения полей, будет выбрана строка, удовлетворяющая условию num = 2. Такая строка в таблице одна. В этой стоке цена и будет изменена на значение 150. В результате получим таблицу с измененной ценой товара.

    Внесение изменений в несколько строк с условием отбора

    Если вспомнить все многообразие условий в запросе, можно представить себе насколько разнообразными могут быть выборки. Поэтому и запросы на обновления могут выполняться либо с одной строкой, либо с группой строк, либо со всеми строками таблицы. Все зависит от стоящей перед вами задачи, а так же с какими строками таблицы нужно выполнять операции обновления.

    Например, мы хотим уменьшить в два раза цену всех товаров, которые сейчас стоят от 100 и более. Запрос:

    UPDATE goods SET price = price / 2 WHERE price >= 100

    Условие WHERE здесь содержит правило, по которому будут выбраны только товары с ценой равной или более 100, а те товары, цена у которых ниже 100, затронуты запросом не будут.

    price = price / 2 – формула, по которой будет вычисляться новая цена товаров. Новая цена будет записана равной старой цене поделенной на два.

    В результате выполнения такого запроса получим таблицу с измененными записями:

    num
    (номер товара)
    title
    (название)
    price
    (цена)
    1Чайник150
    2Чашка50
    3Ложка25
    4Тарелка50

    Обновление значений в нескольких полях строки

    При необходимости обновлять сразу несколько полей, все поля с их значениями указываются после директивы SET через запятую. Например, нужно изменить название и цену товара с кодом 2 на «утюг», стоимостью 300:

    UPDATE goods SET title = «утюг» , price = 300 WHERE num = 2

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

    Выше приведены основные виды операций обновления. На их основе формируется запросы для решения большинства задач изменения данных в разработке с применением SQL.

    Еще материалы из этого раздела

    Комментарии

    Добрый день!
    А можно ли сделать так:
    UPDATE goods SET title, price = 100 WHERE num = 2

    То есть присвоить двум полям одно значение?

    Добрый день, Анастасия.
    Простейший вариант:
    UPDATE goods SET price = (RAND() * 100) WHERE num = 2

    Здесь назначается случайное число до 100, так как функция RAND() вернет дробное от 0 до 1. Поэтому еще стоит обратить внимание на тип поля, когда в БД запись заносится. В данном случае, без округления, вещественное может быть записано.

    Добрый день, Василий.
    Одна строка таблицы — это одна запись. Если вы хотите исправить в одной записи таблице (строке таблицы), то так и будет:
    UPDATE goods SET title = «утюг», price = 300 WHERE num = 2

    title = «утюг», price = 300 — для каждого столбца строки.

    Добрый день, Василий.

    Чтобы реализовать это именно одним запросом, можно сделать так. Но на мой взгляд, стоит делать проще и понятнее для себя. Ведь для сборки этого запроса вы так же будете использовать цикл. Вопрос в том, что эффективнее: реализовать циклически сложный запрос или циклически выполнить несколько простых запросов.

    Подобное решение, как мне кажется применимо, например, в обновлении прайс-листа. Но, т.к. задача не часто выполнимая, то нет смысла усложнять ее, пусть даже для повышения скорости выполнения. Хотя все зависит от конкретных условий.

    Надеюсь, я ответил на ваш вопрос, Василий.

    Есть простая таблица в sql. И по нажатию на кнопку сохранить выполняется сохранение изменений. Запрос такой:
    $query = «UPDATE `comp` SET `comp_login`= ‘$comp_login’, `comp_name` = ‘$comp_name’, `see` = ‘$see’, `p_status` = ‘$p_status’, `comp_text` = ‘$comp_text’ WHERE ` «;
    Значения переменных берутся с пост запроса. Примерно такие: $comp_login = mysql_real_escape_string($request[‘comp_login’]);

    Вопрос: Мне нужно знать была ли обновлена строка. Даже если ничего не было изменено, то тоже нужно вернуть истину.
    Если проверить так: if(mysql_affected_rows() >0) , то возвращается ложь, если ничего не было изменено.

    А if(mysql_affected_rows() == -1) выполняется только, если есть конкретные ошибки. Т.е. в таблице есть стpока enum со значениями ‘0’,’1′. Если я в это поле отправляю текст, то ставит 0 и пишет нет ошибки.

    Как обычно проверяют такие условия?

    А можете ли помочь с таким вопросом:
    Есть сайт технической поддержки. И есть пользователи, которые оставляют на нем заявку в компанию. На нем есть таблица с полями: id_client(id пользователя AI, PK), name_client(Имя потльзователя), status(один ко многим), date_r(дата регистрации).

    Статусы у всех пользователей будут разные. Например:
    у пользователя 1: открыто, отменено, закрыто, передано, принято.
    у пользователя 2: открыто, отменено, закрыто, исполнено, в ожидании.
    у каждого клиента должны быть видны несколько статусов для выбора (только ему принадлежащие), а у другого клиента (другие статусы, принадлежащие именно ко второму клиенту)

    Читать еще:  Как делать запросы в access

    Статусы в любое время могут добавляться( не удаляются).
    Я пока придумал только так:
    1. вариант:
    Вторая таблица такая: id_status, id_client, open, close, cancelled, sent, accepted.
    id_status — AI PK, id_client — указывает на первую таблицу на пользователя, другие поля сами статусы и имеют значение enum: ‘0’, ‘1’ — в зависимости присутствует для пользователя ставиться 0 или 1.

    Когда необходимо добавлять статус какому либо клиенту сначала ставлю 1 для нужного пользователя, а для всех других проставляю 0.
    2 Вариант.
    Во второй таблице statuses (id_statuses, name_status) записаны все статусы. В таблице пользователя в поле status записать несколько значений id_statuses разделенных разделителями, которые принадлежат ему.

    Может можно реализовать попроще?

    Добрый день, Иван.
    Не знаю, правильно ли я понял вопрос.
    Я бы сделал гораздо больше таблиц: пользователи, статусы, заявки, статусы_заявки. Последняя в случае, если одной заявке может соответствовать несколько статусов. Если нет, то она не нужна.

    Например, если нужно чтобы пользователю могло быть назначено несколько статусов, то: сама таблица пользователя (id, имя, прочее), список_статусов (id, название, . ), статусы_пользователя (id, id_пользователя, id_статуса). Таим образом у вас будет обеспечена и целостность данных и не будет в таблицах не будет избыточности.

    Обновление записей таблицы базы данных Access

    До сих пор вы сталкивались с запросами, выполняющими выборку данных и некоторые вычисления. Однако запросы могут применяться также для добавления, удаления и обновления группы записей таблицы базы данных Access. Такие запросы являются мощным инструментом преобразования данных, они называются запросами действия. Предположим, что по каким-то причинам вам понадобилось скорректировать даты контактов, заменив во всех записях таблицы Список, относящихся к 1999 году, месяц ноябрь на декабрь. Подобную операцию трудно проделать вручную, если в таблице содержится несколько тысяч записей. Запрос действия позволяет быстро решить поставленную задачу.

    1. В окне базы данных Access щелкните на кнопке Таблицы.

    2. Выделите таблицу Список, данные которой нужно обновить.

    3. В палитре кнопки Новый объект выберите пункт Запрос. Откроется окно диалога Новый запрос, показанное на рис. 17.8. Подобное окно открывается и при щелчке на кнопке Создать окна базы данных. Оно позволяет выбрать наиболее удобный способ создания объекта.

    Рис. 17.8. Создание запроса

    4. Дважды щелкните на строке Конструктор. Таблица Список, выделенная в окне базы данных на шаге 2, автоматически появится в окне конструктора запросов.

    5. Перетащите в бланк запроса поле Дата, значение которого нужно обновлять.

    Примечание Название поля, заключенное в квадратные скобки, является ссылкой на значение поля. Чтобы сослаться на поле другой таблицы, нужно в начале указать имя таблицы, а затем имя поля (оба имени в квадратных скобках) и разделить их восклицательным знаком. Например [Контакты]! [Фамилия].

    6. В палитре кнопки Тип запроса выберите пункт Обновление. Описание всех возможных вариантов запросов, предлагаемых программой Access, приведено в табл. 17.2. Структура бланка запроса видоизменяется в соответствии с типом запроса. В бланке выбранного варианта запроса на обновление появляется поле Обновление, в которое нужно ввести новое значение поля. Чтобы изменить месяц даты с ноября на декабрь, достаточно прибавить к дате 30 дней.

    7. Введите в ячейку Обновление формулу [Дата] +30.

    ТАБЛИЦА 17.2. Варианты запросов

    ТипОписание
    ВыборкаВыборка данных в таблицу результата запроса на основе указанных условий отбора
    ПерекрестныйРезультат запроса выводит статистические значения (сумму, количество или среднее) для одного из полей таблицы в зависимости от двух параметров других полей таблицы, задающих заголовки строк и столбцов результата перекрестного запроса
    Создание таблицыСоздание новой таблицы в текущей или в другой базе данных на базе информации из имеющихся таблиц
    ОбновлениеОбновление данных таблицы
    ДобавлениеДобавление набора записей в таблицу
    УдалениеУдаление записей таблицы в соответствии с указанным критерием

    8. Чтобы обновлялись только даты, относящиеся к ноябрю 2000 года, введите в ячейку Условие отбора формулу Between DateValue («1.11.99») And DateValue («30.11.99»), которая подробно обсуждалась в ранее (рис. 17.12).

    9. Закройте запрос, сохранив его под именем Обновление.

    10. Щелкните на кнопке Таблицы окна базы данных и двойным щелчком на значке Список откройте эту таблицу. В ней есть четыре записи, относящиеся к ноябрю 2000 года.

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

    11. В окне базы данных щелкните на кнопке Запросы.

    12. Дважды щелкните на значке Обновление.

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

    Рис. 17.9. Запрос на обновление

    13. Щелкните на кнопке Да и изучите изменения, произошедшие с данными таблицы Список.

    Ссылка на основную публикацию
    Adblock
    detector