В Access можно создать многозначное поле, которое содержит несколько значений (до 100). Можно также создать поле подстановки, отображающее понятное для пользователя значение, привязанное к значению в другом источнике данных. При запросе подстановки или многозначного поля существуют уникальные рекомендации. Дополнительные сведения см. в разделе Create или удаление многозначного поля, а также Create или удаление поля подстановки.
В этой статье
Просмотр привязанного значения поля подстановки в запросе
Отображаемое значение поля подстановки по умолчанию автоматически отображается в представлении таблицы запросов. При создании запроса это поведение можно переопределить, чтобы вместо него отображалось привязанное значение. В этом примере предположим, что вы хотите увидеть связанное значение поля подстановки в таблице Штаб-квартира, которая "ищет" название штата Новая Англия.
-
Откройте запрос в режиме конструктора.
-
В этом примере добавьте таблицы Headquarters и NewEngland .
Две таблицы должны быть соединены.
Дополнительные сведения см. в статье Объединение таблиц и запросов.
-
Перетащите поле вместе с полем подстановки в сетку конструктора запроса. В этом примере добавьте поля City и NEState .
-
Щелкните поле Подстановка, а затем на вкладке Конструктор в группе Показать и скрыть щелкните Лист свойств. В этом примере используйте поле NEState .
-
На странице свойств выберите вкладку Уточняющий запрос , а затем в свойстве Элемент управления отображением выберите Текстовое поле.
Результат Теперь при просмотре запроса в режиме таблицы отображается соответствующее привязанное значение отображаемого значения.
Использование отображаемого значения поля подстановки в запросе
При создании поля подстановки создается соединение между значением Bound и Display. Хотя вы не можете напрямую использовать значение Display в запросе, вы можете использовать соответствующее значение из другого источника данных. В этом примере предположим, что вы хотите использовать отображаемое значение поля подстановки NEState в таблице Headquarters в запросе в качестве критериев.
-
Откройте запрос в режиме конструктора.
-
В этом примере добавьте таблицы Headquarters и NewEngland .
Две таблицы должны быть соединены. Дополнительные сведения см. в статье Объединение таблиц и запросов.
-
Перетащите нужные поля в сетку запроса. В этом примере перетащите город из таблицы "Штаб-квартира" в первый столбец, NEState из таблицы "Штаб-квартира" во второй столбец, а stateName из таблицы NewEngland - в третий столбец.
-
Очистите поле Показать проверка поля StateName в сетке запроса.
-
В сетке запросов в разделе StateName в строке Условия введите Vermont.
Условия запроса основаны на столбце StateName , который, конечно, является тем же значением, что и отображаемое значение NEState, но не отображается в режиме таблицы.
-
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Результат Отображается только строка, содержащая Вермонт .
Использование многозначного поля в запросе
При отображении многозначного поля в запросе можно отобразить полное многозначное поле, содержащее все значения, разделенные запятыми в одной строке, или плоские данные с отдельной строкой для каждого значения. Например, предположим, что у вас есть таблица "Проблемы ", которая содержит поле Title для каждой проблемы и многозначное поле AssignedTo для назначения проблем людям.
Отображение всех значений в многозначном поле в одной строке
-
Откройте запрос в режиме конструктора.
-
В этом примере добавьте таблицу Проблемы .
-
Перетащите поля в сетку конструктора запроса. В этом примере перетащите поля Title и AssignedTo с многозначным значением.
-
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Результат Как и следовало ожидать, в одном столбце отображается поле Title , а во втором — многозначное поле AssignedTo :
Отображение каждого значения многозначного поля в одной строке (плоское представление)
-
Откройте запрос в режиме конструктора.
-
В этом примере добавьте таблицу Проблемы .
-
Перетащите поля в сетку запроса. В этом примере перетащите поля Title и AssignedTo.Value multivalued.
Формат <имя поля>. Value добавляет свойство Value в виде строки . Значение поля AssignedTo .
-
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Результат Данные распощены таким образом, что поле Title повторяется, а каждое значение в многозначном поле AssignedTo отображается в соответствующей строке:
Добавление условий в многозначное поле в запросе
Размещение одних и того же критерия в сетке запросов в разных столбцах сетки оказывает большое влияние на результаты запроса.
Добавление условий, отображающих все значения в многозначном поле в одной строке
Access сначала создает результирующий набор, а затем добавляет условия.
-
Откройте запрос в режиме конструктора.
-
В этом примере добавьте таблицу Проблемы .
-
Перетащите поля в сетку запроса. В этом примере перетащите поля Title , AssignedTo multivalued и AssignedTo.Value multivalued.
-
Очистите поле Показать проверка поля AssignedTo.Value в сетке запроса.
-
В сетке запросов в разделе AssignedTo.Value в строке Условия введите "NOT "David Hamilton".
Полезно просмотреть представление SQL:
SELECT Title, AssignedTo FROM Issues WHERE NOT AssignedTo.Value = “David Hamilton”;
-
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Результат Три проблемы, не назначенные Дэвиду Гамильтону, отображаются в значении по умолчанию.
Добавление условий, отображающих каждое значение в многозначном поле в одной строке (плоское представление)
Access сначала создает плоский результирующий набор, а затем добавляет условия.
-
Откройте запрос в режиме конструктора.
-
В этом примере добавьте таблицу Проблемы .
-
Перетащите поля в сетку запроса. В этом примере перетащите поля Title и AssignedTo.Value multivalued.
-
В сетке запросов в разделе AssignedTo.Value в строке Условия введите NOT "David Hamilton".
Полезно просмотреть представление SQL:
SELECT Issues.Title, AssignedTo.Value FROM Issues WHERE NOT AssignedTo.Value = “David Hamilton”
-
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Результат Каждая проблема, не назначенная Дэвиду Гамильтону, отображается в плоских значениях.
Добавление нескольких условий в многозначное поле в запросе
Иногда требуется найти совпадение по нескольким значениям в многозначном поле. Например, предположим, что вы хотите увидеть те проблемы, в которых "Келли Ролли" и "Лиза Миллер" входят в число значений в поле AssignedTo
-
Откройте запрос в режиме конструктора.
-
В этом примере добавьте таблицу Проблемы .
-
Перетащите поля в сетку запроса. В этом примере перетащите поля Title и AssignedTo с многозначным значением.
-
В сетке запросов в разделе AssignedTo в строке Условия введите "Kelly Rollin" и "Lisa Miller".
-
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Результат Отображаются те две проблемы, которые назначены "Келли Ролин" и "Лиза Миллер".
Группирование и подсчет многозначного поля в запросе
Для выполнения вычислений, группирования и сортировки значений, хранящихся в многозначном поле, используйте> имя поля <. Поле значения. Дополнительные сведения о групповых запросах см. в разделе Подсчет данных с помощью запроса.
Подсчет количества проблем, назначенных каждому пользователю
-
Откройте запрос в режиме конструктора.
-
В этом примере добавьте таблицу Проблемы .
-
Перетащите нужные поля в сетку запроса. В этом примере перетащите assignedTo.Value в первый столбец, а title — во второй столбец.
-
На вкладке Конструктор в группе Показать или скрыть нажмите кнопку Итоги.
В сетке запроса появится строка Итог . Группа По отображается по умолчанию в ячейке Всего под каждым полем запроса.
-
В сетке запросов в разделе Заголовок в строке Итог нажмите кнопку Количество.
-
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Результат Количество проблем, назначенных каждому пользователю, отображается в плоском представлении.
Подсчет количества пользователей, назначенных для каждой проблемы
-
Откройте запрос в режиме конструктора.
-
В этом примере добавьте таблицу Проблемы .
-
Перетащите нужные поля в сетку запроса. В этом примере перетащите заголовок в первый столбец, а AssignedTo — во второй столбец.
-
На вкладке Конструктор в группе Показать или скрыть нажмите кнопку Итоги.
В сетке запроса появится строка Итог . Group By отображается по умолчанию в ячейке Всего в поле Title в запросе. Выражение по умолчанию отображается в ячейке Всего в поле AssignedTo , так как нельзя выполнить операцию Group By непосредственно в многозначном поле, только <имя поля>. Поле значения.
-
В сетке запросов в разделе AssignedTo в строке Всего нажмите кнопку Количество.
-
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Результат Число пользователей, назначенных для каждой проблемы, отображается в плоском представлении.
Использование запроса добавления с многозначным полем
Одно значение можно вставить в многозначное поле с помощью запроса На добавление. Например, предположим, что вы хотите добавить "Том Майклс" в многозначное поле AssignedTo в таблице Issues.
Примечание. Это единственный тип запроса добавления, который работает с многозначным полем.
-
Откройте запрос в режиме конструктора.
-
Добавьте таблицу Проблемы .
-
На вкладке Конструктор нажмите кнопку Добавить.
-
В диалоговом окне Добавление выберите Проблемы и нажмите кнопку ОК.
-
В строке Добавить к сетки конструктора выберите AssignedTo.Value.
-
В строке Поле сетки конструктора введите "Том Майклс".
-
Чтобы ограничить операцию добавления определенными проблемами, добавьте поле в сетку Конструктор, например Заголовок, удалите Заголовок из строки Добавить к , а затем введите условия, например "Проблема 3".
-
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Access может попросить вас подтвердить, следует ли добавить выбранную строку. Нажмите кнопку Да , чтобы вставить строку, или кнопку Нет для отмены.
Результат "Том Майклс" теперь добавлен в поле AssignedTo для вопроса 3.
Важно Нельзя использовать запрос на добавление, ссылающийся на таблицу, содержащую многозначное поле. Например, следующий запрос недопустим:
INSERT INTO [NewIssues] ( ID, Title, AssignedTo ) SELECT Issues.ID, Issues.Title, Issues.AssignedTo FROM Issues;
Использование запроса обновления с многозначным полем
Запрос на обновление можно использовать для изменения одного значения в многозначном поле на другое. В этом примере вы хотите обновить многозначное поле AssignedTo, чтобы заменить "Kelly Rollin" на "Lisa Miller".
-
Откройте запрос в режиме конструктора.
-
Добавьте таблицу Проблемы .
-
На вкладке Конструктор нажмите кнопку Обновить.
-
Перетащите assignedTo.Value в сетку запроса.
-
В строке Обновить до введите "Лиза Миллер".
-
В строке Условия введите "Kelly Rollin".
-
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Access может попросить вас подтвердить, следует ли добавить выбранную строку. Нажмите кнопку Да , чтобы вставить строку, или кнопку Нет для отмены.
Результат Лиза Миллер заменяет Келли Роллина в поле AssignedTo для всех соответствующих проблем.
Использование запроса Delete с многозначным полем
При работе с таблицей, содержащей многозначное поле, можно использовать запрос на удаление для удаления записей, содержащих определенное значение в многозначном поле, или для удаления определенного значения из многозначного поля во всех записях в таблице. В следующем примере предположим, что вы хотите удалить "Дэвид Гамильтон" из таблицы "Проблемы".
Важно При использовании запроса на удаление для удаления многозначного поля, содержащего данные, эти данные теряются безвозвратно— отменить удаление невозможно. Поэтому перед удалением каких-либо полей или других компонентов базы данных создавайте резервную копию базы данных.
Удаление определенного значения из многозначного поля во всех записях
-
На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.
-
Добавьте таблицу Проблемы .
-
Откройте запрос в режиме конструктора.
-
На вкладке Конструктор нажмите кнопку Удалить.
-
В строке Условия введите "Дэвид Гамильтон".
-
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Access может попросить вас подтвердить удаление записей. Нажмите кнопку Да , чтобы удалить записи, или кнопку Нет для отмены.
Результат Дэвид Гамильтон удаляется из для всех соответствующих проблем.
Удаление записей, содержащих определенное значение в многозначном поле
-
На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.
-
Добавьте таблицу Проблемы .
-
Откройте запрос в режиме конструктора.
-
На вкладке Конструктор щелкните Удалить группу.
-
На вкладке Конструктор в группе Результаты щелкните стрелку в разделе Вид и выберите пункт Представление SQL.
-
Введите следующую инструкцию SQL:
DELETE FROM Issues WHERE (((Issues.AssignedTo.Value)="David Hamilton"));
Примечание. В этом случае можно использовать только инструкцию SQL, а не сетку Конструктор. При переключении в представление Конструктор сетки Access добавляет звездочку (*) после инструкции DELETE, которую следует удалить из представления SQL.
-
На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Access может попросить вас подтвердить удаление записей. Нажмите кнопку Да , чтобы удалить записи, или кнопку Нет для отмены.
Результат Все проблемы, при которых назначен Дэвид Гамильтон, удаляются.