А.Ю. Гончаров Access 2003 (960524), страница 21
Текст из файла (страница 21)
5.19. Результат работы мастера повторяющихся записей200ОюГлава 5NBСуществует втором вариант использования мастера повторяющихся•записей. Если на третьем шаге мастера не указывать ни одного поляв списке Дополнительные поля, то программа автоматически создаств запросе поле Повторы, е котором укш/сет, сколько раз встречаетсязапись с тем или иным значением.
В полученном запросе уже не будетповторяющихся записей - каждое значение поля повторов будет приведено е запросе один раз. Размер таблицы-запроса будет заведомо меньше, чем размер исходной таблицы. Таким образом, мы можем созоатьтаблицу-сводку. Потребность в таких таблицах очень часто возникаетв пользовательских задачах. Запрос в виде сводки, созданный на основетаблицы Товары, показан на рис. 5.20. Единственный недостаток такой таблицы - программа не стала использовать возможность подстановки для поля КодПостзвщикз и вывела числовые значения.дЭ Поиск повторении для Товары : запросКодПоставщика пдле |ПовторьРис. 5.20. Запрос показывает, сколько развстречалось определенное значение поляТакая сводка обладает одной особенностью: в ней не указываются записи, которые не имеют дублей по значению заданного поля.
Это значит, что в столбцеПовторы вам не встретится единица. Если при редактировании исходной таблицыв ней станет меньше повторяющихся значений поля, то и таблица-запрос автоматически уменьшится. Если в исходной таблице совсем не останется повторов,то таблица-запрос станет пустой. Полезно помнить об этом эффекте, когда надоотредактировать поле, для которого требуется задать индексацию «без совпадений», а совпадения имеются. Подобный запрос наглядно покажет, какие значениявстречаются в поле более одного раза. Редактируйте поле исходной таблицы, показапрос не станет пустым, а затем можете смело индексировать таблицу.Запросы1155.6. Другие способы группировки записейДля группировки записей можно применять и мастер простых запросов.Используем таблицу Заказы из базы данных «Борей».
Запустим мастер простыхзапросов и выберем поля таблицы: Код Сотрудника, СтоимостьДоставки и ДатаИсполнения. На втором шаге мастера (рис. 5.2) выберем опцию Итоговый.В этом случае, кроме установки переключателя, надо нажать кнопку Итоги и установить флажки в окне Итоги, как показано на рис. 5.21 (каждый флажокотвечает за отдельную операцию).
На следующем шаге мастера была выбрана(для примера) группировка поля дат по месяцам.Итоги| Какие итоговые значения необходимо вычислить?!ПопеsumСтоиюсть Дос тавкиAvgMinMaxпп пПодсчет числазаписей в ЗаказыРис. 5.21. Окно ИтогиВ результате запрос должен выглядеть так, как показано на рис. 5.22. Мы видим, что программа создала два дополнительных поля, а также произвела группировку данных по именам менеджеров и датам.
В результате получиласьтаблица, удобная для анализа: легко сравнить затраты на доставку товаров по месяцам, годам и сотрудникам. Кроме того, в последнем столбце произведен подсчет количества записей, попавших в одну группу.Еще один способ группировки данных - использование конструктора запроса.Строка «Групповая операция» содержит список функций и во многом определяетвид данных запроса.
Под групповой операцией понимается обработка и обобщение значений данного поля при помощи определенной функции. В результатев таблице запроса меняется расположение или количество записей.116Глава 51>.' Заказы ЗапросСотрудникi ДэтаИсполнечия по месяцам> Белова", Мариябелсвэ, МарияБелова, Мария-Jзапрос на выборкуSum- Стой мостьДоставгаГр Count-Заказы |1Август 1996Август 1997• ;• :540 .ЗОрАпрель 1Э9736 ,01 р.Апрель 19931 054,83 р.Белова, МарияДекабрь 1996461 .60р.Белова. МарияДекабрь 1997£73.36рБелова, МарияИюль 1996140.51р.Белова, МарияИюль 1997563.13р.Белова, МарияИюнь 1997129,В9р.Запись' [J^J\•986,33р.Белова, МарияБелова, Мария-•'1 UJLHJ • ° иэ 200Рис.
5.22. Запрос с группировкой данныхГрупповая операция позволяет легко создать вычисляемое поле. Допустим, мыхотим подсчитать в запросе, сколько раз встречается каждое значение некоторогополя. Для этого надо создать в бланке еще одну колонку для этого поля и определить для нее групповую операцию Count (подсчет).В качестве источника информации выберем таблицу Заказы из базы данных«Борей». Выясним, кто из клиентов сделал больше всего заказов. Создадим простой запрос (можно с помощью мастера), в котором будет единственное полеКодКлиента.
Поскольку поле подстановочное, в нем будут автоматически использованы текстовые названия.Теперь модифицируем этот запрос.1. Откроем его в режиме конструктора.2. Установим курсор на вторую, свободную колонку в строке «Поле».3.
Раскроем список в строке «Поле» и выберем поле КодКлиента (появятся две колонки с одинаковыми именами).4. Во вновь созданной колонке раскроем контекстное меню и выберем командуГрупповые операции.5. В строке «Групповая операция» выберем из списка опцию Count.6. Во вновь созданной колонке в строке «Сортировка» зададим режим сортировки по убыванию.Готовый запрос показан на рис. 5.23.Запросы117JJj Закаш-КлиентыjqntU «1-n.ritlQ IDI :,^г*JflllpUL Ha BDIUU|JKy— "\lib^iКлиент[ Courii-КодКлиента ПГSave-a-lot Markets*Ernst Handel30QUICK-Stop28Hungry Owl All-Nighl Grocers19Folkochfa НБ19Rattlesnake Canyon Grocery18HILARION- Abasias18Bon .Kip17Berglunds snabbkop17Wartian Herkku16 VЗапись: [7Г| < \ЩГ |T~)1TJт 89Рис.
5.23. Подсчет количества одинаковых значений поля5.7. Редактирование данных с помощью запросовСуществуют запросы, которые позволяют автоматизировать изменение данныхв таблицах. В больших базах данных не всегда удобно вручную изменять информацию. В некоторых случаях необходимы специальные процедуры для внесения изменений по заданному алгоритму. Рассмотрим варианты таких запросов.Запрос на добавлениеЗапрос на добавление позволяет скопировать данные из одной таблицы ь другую, не прибегая к помощи буфера обмена.
Записи могут перемещаться междуразными файлами баз данных и между базами данных разного типа. Допустим,мы Хотим добавить записи в таблицу Товары базы данных «Борей» и у нас естьтаблица с такой же структурой, названная Товары2.Для выполнения запроса на добавление надо выполнить следующие действия:На вкладке Запрос нажать кнопку Создать и выбрать режим Конструктор.Активизируется вспомогательное окно Добавление таблицы.2. Выберите из списка таблицу Товары! и нажмите кнопку Добавить.
Таблицапоявится в окне запроса. Закройте вспомогательное окно. Мы определили таблицу, которая будет источником данных при выполнении запроса.1.ff6Глава 5.-ij Microsoft Access: ФайлПравке|идвставкаЗапеосСервисОкно^правка~^ ВыборкаЗапрос! : lanpoc на выборкуО' Перекрестный•j'f. Создание таблицы...Л\ Обновление*fj Добавление...КмТонрвI Марка'кодПостаечи!vКодГипа•% УдалениеПолеИмя таблицыСортировкаВывод на экранУсловие отбора....НЛПРис.
5.24. Создание запроса «на добавление»3. В режиме конструктора на панели инструментов находится список Типзапроса. Выберите из него элемент «Добавление» (рис. 5.24). Откроется окноДобавление, изображенное на рис. 5.25. В этом окне выберите в списке имятаблицы, в которую надо добавить данные, - Товары.
Обратите внимание, чтопереключатель в окне позволяет указать, в какую базу данных добавляется информация: в текущую или в какую-нибудь другую. После этого окно можнозакрыть.ДобавлениеДобавление записей вимя таблицы;товары0 в текущей базе данныОв другой базе данных:иця файла:Рис. 5.25. Окно ДобавлениеЗапросыTIQ4. Теперь надо определить поля, которые будут добавлены в таблицу Товары.Идеальным вариантом является тот, когда поля обеих таблиц совпадают.Тогда, щелкнув два раза по символу «звездочка», мы укажем, что должныбыть скопированы все поля. Соответствующая информация появится в бланкезапроса.5.Осталось нажать кнопку Запуск, и можно, открыв таблицу, проверить, правильно ли выполнена операция.Несколько замечаний;а новые записи размещаются в таблице в зависимости от ее структуры: отпараметров полей, индексов и режимов сортировки;а если требуется переместить только часть полей, то каждое поле надопредварительно переносить в бланк запроса отдельно, двойным щелчкоммыши;а при желании можно добавить не все записи из таблицы-источника, а тольконекоторые, в соответствии с заданным условием.
В этом случае нужноперенести каждое поле в бланк запроса отдельно и заполнить строку ((Условие отбора». Например, для отбора записей, относящихся к периоду позжеI марта 2004 года, в этой строке в колонке для поля, определяющего периодвремени, надо ввести следующее выражение: >Я1/03/2004#;а перед выполнением запроса можно увидеть данные, которые будут вставленыв другую таблицу. Для этого достаточно переключить режим просмотразапроса: выбрать из списка Вид элемент «Режим таблицы»;а выполнение запроса на добавление не должно нарушать целостности данных,поэтому не всякий запрос может быть выполнен.
Осложнения могут вочникнуть, если таблица-приемник связана с другими таблицами и выполнениезапроса приводит к нарушению уникальности ключа. Запрос не будет выполнен и в том случае, когда нарушается принцип уникальности записей дляиндексированного поля, в котором запрещены совпадения;а запрос на добавление (если макет его сохранен) можно выполнятьнеограниченное число раз. Если вы обновите данные в таблице-источникеи снова активизируете запрос, то новые данные будут добавлены в таблицуприемник;а вы можете открыть запрос в режиме конструктора и модифицировать его. Самзапрос при этом выполняться не будет. Выполнить его в режиме конструктораможно путем нажатия кнопки Запуск. Если же вы выберете запрос и нажметекнопку Открыть на вкладке Запросы, это приведет к немедленному запуску(выполнению) запроса;Глава 5120a Access предоставляет последний шанс отменить запрос перед его выполнением.
На экран выводится окно диалога, в котором сообщается, сколько записей будет добавлено. Если пользователь подтвердит выполнение операции,отменить ее действие будет впоследствии невозможно (придется искать ихдругим способом и удалять вручную).Запрос на обновлениеЗапрос на обновление обеспечивает одну из важнейших сервисных функцийСУБД - автоматизированную обработку данных. Действительно, что стоила быпрограмма, если бы не позволяла редактировать данные в таблице программнымспособом? Такие запросы позволяют существенно сэкономить время оператора,выполняющего редактирование информации.