WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 || 3 |

Левой кнопкой мыши схватить код товара в Справочнике и перетащить на такие же поля код товара в других таблицах (естественно, все эти действия повторить для каждой из таблиц отдельно!) Обеспечение целостности7 Объединение, а затем из Параметров объединения выберем 2-ой тип (отношения типа 1 : 1 для ключевых полей и 1: для ключевого и не ключевого полей ставятся автоматически (один-ко-многим - один и тот же товар может поступать несколько раз за день или несколько дней) и Создать. Если чтото не так - изменить свойства связи можно через контекстное меню линий связи.

После всего этого схема должна выглядеть следующим образом:

Это чтобы записи связанных таблиц соответствовали друг другу. Например, для нашей БД нельзя ввести код товара в подчиненные таблицы, если нет соответствующего кода в Справочнике. И, наоборот: при удалении записи со Справочника удаляются все подчиненные записи во всех связанных таблицах, если установлены параметры Каскадное обновление (удаление) связанных полей рис. Схемы данных (Вот здесь возврат назад к вводу данных в таблицы, стрелочка слева на WEB-панели – для тех, кто пользуется электронной версией самоучителя.

Остальным просто вернуться назад на соответствующую страницу брошюры) 4. Формы Часто таблицы лучше просматриваются и редактируются в виде Форм.

Попробуем создать простые формы для наших таблиц тремя вариантами (пока только ознакомьтесь, задание ниже) :

1. Создать Автоформа: в столбец и выбрать таблицу.

2. Создать Мастер форм и далее по шагам.

3. Для создания составных, подчиненных форм будут следующие шаги:

Создать Мастер форм выбрать Справочник, ОК со Справочника все поля, тут же выбрать таблицу Прибыло, оттуда все записи, кроме кода товара (он уже выбран) далее Подчиненная форма далее Табличная Стиль любой, Готово. В окне Формы появятся две формы (см. рис.).

Задание 4.1. Создать для всех таблиц первыми 2 способами (автоформа и Мастер) по одной форме, поупражняться вводом новых записей и редактированием старых, после этого создать подчиненную форму Справочник 1 по шагам варианта 3. Картинки прилагаются. Простые первые 4 формы самостоятельно, вид одной из них приводится. Для подчиненной пояснений больше.

Это простая форма для таблицы Справочник (первые 2 способа), а ниже будут картинки для подчиненной (3 способ).

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

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

Вид подчиненной формы:

Подчиненная форма состоит из двух форм 5. Запросы Запросы – это фактически те же таблицы, только выбранные и сконструированные из разных связанных таблиц в виде одной новой.

5.1. Простые запросы на выборку Запрос на выборку является наиболее часто используемым типом запроса.

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

Из двух таблиц Справочник и Ост_нач создадим первый запрос.

Создать простой запрос выбрать таблицу Справочник, оттуда Код товара и Наименование, выбрать другую таблицу Ост_нач, оттуда поле Ост подробный имя неизменим, Готово. Картинки приведены ниже.

У Вас должен получиться примерно такой запрос. В данном запросе выдаются все записи из Справочника, но выводить записи с пустым8 значением остатка нерезонно. Поэтому построим другой запрос без пустых записей чуть по-другому, в режиме Конструктора.

Не нулевым, а именно пустым, т.к. не все товары отражены в таблице Ост_нач. Нулевое и пустое в БД – две большие разницы, их можно свести только через функцию Nz. С ней мы еще встретимся… Другой вариант того же запроса:

Создание при помощи конструктора Поочередно добавим таблицы Справочник и Ост_нач, закрыть, перетащим мышью Код товара со справочника в поле первое (см.), а третье поле (Остаток нач) вставим для разнообразия чуть по-другому: щелчок на пустое третье поле запроса, раскроется список доступных полей, из них и выберем нужный Условие отбора >0, и закроем, сохранив запрос под именем по умолчанию.

И у нас получится то, что надо.

Маленькие хитрости большой БД.

Иногда при создании запросов могут выдаваться сообщения о «невозможности создать запрос из-за неоднозначно определенных связей между таблицами». Ничего страшного – откройте схему данных и удалите ненужные связи и копии таблиц. Они появились автоматически во время наших упражнений. Мы ведь только учимся, а «учиться на собственных ошибках – наша задача, ибо только те знания являются наиболее прочными и фундаментальными, которые получены собственным трудом и умом»9.

Маленькие хитрости большой БД.

Иногда вместо подобных условий отбора проще в окне запроса переустановить связь по первому типу, когда связанные поля обеих таблиц совпадают. Результат тот же, но самое интересное – типы связей в схеме данных не изменились, а наша новая связь как бы локальная, только для данного запроса. Но об этом я уже где-то говорил… Самостоятельно создайте аналогичный запрос на Остаток товаров конечный, тоже 2 разновидности. Теперь у вас 4 запроса и друг (помощник).

Смотри ПСНС, стр.12.11. Самостоятельная 4.1. Создать запросы на выборку из таблицы Прибыло (наименование из справочника) и озаглавьте Сам411-Сам415:

• Всех товаров за сегодняшний день (внутреннее время компьютера) • Всех товаров за вчерашний день • Всех товаров за вчерашний день со сроком хранения 1 сутки • Всех товаров группы 2, поступивших за последний месяц • Всех товаров с усл. отбора по № накл. <>0 (имя по умолч.) Запрос 3) 5.2. Перекрестный запрос Перекрестный запрос подсчитывает сумму, среднее, число значений или выполняет другие статистические расчеты, после чего результаты группируются в виде таблицы по двум наборам данных, один из которых определяет заголовки столбцов, а другой — заголовки строк. Более наглядно посмотрим на примере. Но для начала создадим запрос попроще из Справочника и Прибыло:

Создать Простой запрос выбрать Код и Наим из Справ, другие с Прибыло Итоговый, Итоги, галочка в поле кол-во на Sum выбрать интервал по дате и времени просмотр, готово.

Получилась примерно такая петрушка. Т.к. в Прибыло много записей с одинаковым кодом, то произошла автоматическая группировка записей по умолчанию – как раз то, что нам надо. В новых именах полей присоединенный индекс First означает, что из нескольких значений высветился лишь первый, зато сумма итоговая по количеству уже подсчитана.

Следуйте инструкциям диалогового окна и никогда не ошибетесь!!! P.S. Не ошибается только тот, кто ничего не делает А мы сейчас через Конструктор изменим условия отбора и еще раз высветим эту же таблицу.

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

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

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

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

5.3. Варианты запросов 5.3.1. Групповые операции.

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

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

Немного лирики из математики Принцип «чайника» Задача 1. Даны пустой чайник, газовая плита, спички, кран с водой. Как вскипятить чай Решение:

1. открыть кран 2. наполнить чайник водой 3. зажечь плиту 4. поставить чайник на огонь и ждать Задача 2. Даны чайник, наполненный водой; газовая плита, спички, кран с водой. Как вскипятить чай Решение первое (неправильное):

1. зажечь плиту 2. поставить чайник на огонь и ждать Решение второе (правильное):

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

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

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

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

Вызовем запрос Прибыло через конструктор контекстное меню режим SQL в этом окне и меняем «шило на мыло» закроем, сохранив изменения и посмотрим: название поля в запросе изменилось.

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

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

Создать Простой запрос выбор полей из 3 таблиц и 1 запроса (см.)Подробныйимя Продано.

.

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

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

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

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

Примечание. Если в выражении используются арифметические операторы (+, -, *, /), а одно из полей имеет значение Null, результатом всего выражения тоже будет значение Null. Если какие-либо записи в одном из использованных в выражении полей имеют значение Null, то это значение Null можно преобразовать в нуль при помощи функции Nz.(из справочника по Access) Но для таких случаев есть функция Nz из категории Преобразования. Еще раз вызовем запрос через Конструктор и исправим наше выражение:

Продано: Nz([Остаток начальный])+Nz([Sum-кол-во]) -Nz([Ост_кон]) Вот и все. Теперь колонка Продано сформирована для всех товаров.

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

Само выражение простое: >=[С какого числа] And <=[по какое]10. Попробуйте.

Запрос озаглавьте как Запрос_параметр1. Не забудьте про формат даты: дд.мм.гг Попробуйте и другой вариант определения границ формата Дата: Between [С какого числа] And [по какое].

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

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

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

переходящий остаток по терминологии бухгалтерского учета). Это можно реализовать через Запрос на обновление. Попробуем, но сперва запрос попроще – на удаление.

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

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

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

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

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

• сначала удалим все записи из Ост_нач старый, • а потом добавим в уже пустую таблицу все записи из Ост_кон, • а сам Ост_кон обнулим (удалим все записи).

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

1. СоздатьКонструктордобавить таблицу Ост_Нач выбрать тип запроса удаление и перетащить все поля (*) на бланк запроса имя «Удал_ост_нач» 2. СоздатьКонструктордобавить таблицу Ост_Кон выбрать тип запроса Добавление добавить таблицу Ост_нач и перетащить оба поля в бланк запрос, а в строку Добавление вставить Ост_начальный (см. ниже) имя «Добавл_ост_нач» 3. Создать Конструктор добавить таблицу Ост_кон выбрать тип запроса удаление и перетащить все поля (*) на бланк запроса «Удал_ост_кон» Ну, а теперь попробуйте выполнить эти запросы поочередно.

Конечно, все эти манипуляции с запросами на обновление переходящих остатков несут только учебную нагрузку, потому что на самом деле гораздо проще удалить старый Ост_нач, а новый Ост_кон переименовать, а имена полей в обеих таблицах сделать одинаковыми, просто Остаток.

6. Отчеты Отчеты – это бумажный вариант запросов и таблиц, дополнительно которые можно группировать, итоги подсчитывать и т.д. Поэтому здесь зацикливаться11 не будем, посмотрим 1-2 примера.

6.1. Остатки на начало Отчеты Создать Мастер отчетов выбрать Запрос1 Все поля Уровни группировки не добавлять (сейчас не нужны) Сортировка по умолчанию по первому полю Код_тов, поэтому просто вперед Макет табличный, ориентация книжная, галочка в подборе ширины Стиль можно строгий Имя Отчет_остнач Просмотреть Готово.

Pages:     | 1 || 3 |






© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.