Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1174-access-2003

.pdf
Скачиваний:
32
Добавлен:
01.10.2016
Размер:
3.25 Mб
Скачать

А мы сейчас через Конструктор изменим условия отбора и еще раз высветим эту же таблицу.

В условие отбора по полю №накл. поставили <>0, поэтому товары с пустыми записями не видны (101, 401,502). Желающие могут открыть

30

таблицу Прибыло или Запрос 3, и убедиться в том, что итоги по каждому товары подсчитаны.

Но это была лишь прелюдия перед настоящим перекрестным запросом. Теперь построим запрос из предыдущего Запроса 3, с раскладкой товаров по всем поступлениям:

Создать перекрестный выбираем Запрос 3 Заголовки строк (Код товара и Наим.). Заголовки столбцов – Дата пост. Дата/время по кол-во выбираем Сумма Запрос3_перекрестный,

готово.

31

А теперь в качестве самостоятельной создайте запрос4_перекрестный с колонками Поставщик. (Предварительно создайте простой запрос, чтобы поле Поставщик тоже присутствовало).

5.3. Варианты запросов

5.3.1. Групповые операции.

Попробуем создать другой вариант запроса для поступивших товаров, с применением групповых операций:

Создать через Конструктор Выбрать Прибыло и из него 2 поля ( Код товара и кол-во) Нажать кнопку Группировка на панели или через контекстное меню для поля Кол-во в строке Групповые операции выбрать Sum Закрыть, сохр,имя Поступило.

Немного лирики из математики

Принцип «чайника»

Задача 1. Даны пустой чайник, газовая плита, спички, кран с водой. Как вскипятить чай?

Решение:

1.открыть кран

2.наполнить чайник водой

3.зажечь плиту

4.поставить чайник на огонь и ждать

Задача 2. Даны чайник, наполненный водой; газовая плита, спички, кран с водой. Как вскипятить чай?

Решение первое (неправильное):

1.зажечь плиту

2.поставить чайник на огонь и ждать

Решение второе (правильное):

1.Вылить воду из чайника, далее как в задаче 1, решать которую мы уже умеем

P.S. Сведение задачи к уже известной и есть применение данного принципа. Широко используется математиками и программистами. С их же легкой руки «чайниками» начали называть тех пользователей ЭВМ, кто мыслит слишком шаблонно, кому не ведомы взлеты творческой мысли, не обладает чувством юмора и шуток не понимает.

32

Когда откроем запрос Поступило для просмотра, то будет такая картинка:

Вот здесь можно попробовать немного затронуть построение запросов

через конструкцию SQL – специализированный язык запросов для СУБД не для «чайников». То, что мы сейчас строили через конструктор – это язык QBE (см.

Дополнительные сведения).

А мы для начала попробуем изменить название поля Sum-кол-во на

Итого:

Вызовем запрос Прибыло через конструктор контекстное меню

режим SQL

33

в этом окне и меняем «шило на мыло»

закроем, сохранив изменения и посмотрим: название поля в запросе

изменилось.

P.S. Таким образом можно корректировать и создавать не один сложный запрос. Иногда изменения проще проводить именно через SQL. Самым эффективным оказывается сочетание SQL и QBE.

5.3.2.Пустые значения в арифметических операциях (Функция Nz)

Для нашей БД рассмотрим реальную задачу. В некотором магазине введен компьютерный учет всех поставок, раз в месяц производится что-то вроде инвентаризации – известны остатки на начало и конец периода. Но магазин до ежедневного учета каждого проданного товара еще не дорос. Поэтому объем продаж за учетный период будем определять через запрос по формуле Продано = Ост_нач + Поступило (как раз сумма по кол с пред. запроса Поступило) – Ост_кон.

Создать Простой запрос выбор полей из 3 таблиц и 1 запроса

(см.) Подробный имя Продано.

34

.

Запрос будет выведен, но мы еще не сформировали поле продано. Поэтому зайдем через конструктор в Продано и сформируем поле через построитель.

Вот такая картина. Обратите внимание на связи между таблицами, слегка растащив их вверх и вниз. На самом деле все они связаны через Справочник, а связь с запросом Поступило установлена автоматически, мы ее не создавали, и в схеме данных ее все равно нет!!! Посмотрите, не ленитесь, убедитесь! Этакие связи и есть внутренние в современных реляционных СУБД, они существуют, пока жив сам запрос.

Поле Продано сформируем при помощи Построителя (см.), имена полей указываем двойным щелчком, Ок. В имени поля стоит Выражение1: . вместо него напишем свое имя Продано: и сохраним, откроем для просмотра.

Когда у вас в окне построителя появляется лишнее выражение, то его просто надо удалять!!!

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

35

Примечание. Если в выражении используются арифметические операторы (+, -, *, /), а одно из полей имеет значение Null, результатом всего выражения тоже будет значение Null. Если какие-либо записи в одном из

использованных в выражении полей имеют значение Null, то это значение Null можно преобразовать в нуль при помощи функции Nz.(из справочника по Access)

Но для таких случаев есть функция Nz из категории Преобразования. Еще раз вызовем запрос через Конструктор и исправим наше выражение:

Продано: Nz([Остаток начальный])+Nz([Sum-кол-во]) -Nz([Ост_кон])

36

Вот и все. Теперь колонка Продано сформирована для всех товаров.

5.3.3. Запросы с параметрами

Часто в запросах условия отбора проще задавать не фиксированные, а вводить при каждом запросе как параметр. Например, при отборе записей из таблицы Прибыло поступления товаров за определенный промежуток времени при каждом запросе задать начальную дату и конечную в условии отбора по полю Дата пост. Само выражение простое: >=[С какого числа] And <=[по какое]10. Попробуйте. Запрос озаглавьте как Запрос_параметр1. Не забудьте про формат даты: дд.мм.гг

Попробуйте и другой вариант определения границ формата Дата: Between

[С какого числа] And [по какое].

В качестве параметра запроса может быть любое выражение (поясняющий текст), заключенное в квадратные скобки. Если обратили внимание, то Вы уже догадались, что имена полей в выражениях всегда заключены в квадратные скобки, а если такого имени нет в списке полей - выдается запрос на ввод параметра.

Самостоятельная 5.5.3:

Создать запрос-выборку с параметром списка товаров по группе (первый символ в коде товара из Справочника)

Создать запрос-выборку с параметром Список поступивших товаров от поставщика Х за день У

5.4. Запросы на обновление

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

10 Именно так, один к одному и набирать!

37

реализовать через Запрос на обновление. Попробуем, но сперва запрос попроще – на удаление.

5.4.1. Запрос на удаление

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

Создать Конструктор добавить таблицу Прибыло выбрать тип запроса удаление и перетащить два поля (* и Дата пост.) на бланк запроса согласно рис.

Добавить условие отбора <[До какой даты удалить] закрыть, имя пусть Запрос_ Удаление. И попробуйте открыть: Вас обязательно предупредят перед удалением!

38

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

Даже после удаления записей добавьте (восстановите) заново: нам они еще пригодятся! Параметр подтверждения на обновление записей также пока оставим.

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

Нам надо обновить Ост_кон на Ост_нач следующего периода. Сделаем это в три этапа:

сначала удалим все записи из Ост_нач старый,

а потом добавим в уже пустую таблицу все записи из

Ост_кон,

а сам Ост_кон обнулим (удалим все записи).

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

39

Соседние файлы в предмете Специальные компьютерные технологии