IMEI
|
модель
|
форм-фактор
|
ОС
|
Цвет
|
объем аккумулятора
|
% наценки
|
Разрешение камеры
|
Тип дисплея
|
Характеристики дисплея
|
Тип телефона
|
Размер
|
Вес
|
Гарантия
|
Название производителя
|
Страна произв.
|
ФИО сотрудника
|
Телефон сотрудника
|
Дата продажи
|
Скидка %
|
ФИО клиента
|
Адрес клиента
|
Телефон клиента
|
Уровень дисконта %
|
Дата поставки
|
Количество шт.
|
Цена
|
Название поставщика
|
Город поставщика
|
Страна поставщика
|
Адрес поставщика
|
Телефон поставщика
|
Рисунок 3.9 - Отношение в первой нормальной форме
Таблица находится во второй нормальной форме (2НФ), если она
удовлетворяет определению 1НФ и все ее поля, не входящие в первичный ключ,
связаны полной функциональной зависимостью с первичным ключом.
Для получения второй нормальной формы, разобьем исходную таблицу на
несколько, логически связанных между собой. В результате, получим совокупность
таблиц во второй нормальной форме. Диаграмма функциональных зависимостей для
2НФ приведена на рисунке 3.10.
Рисунок 3.10 - Диаграмма функциональных зависимостей (2НФ)
Спроектированная БД нормализована до третей нормальной формы (3НФ). Так
как, по определению, если БД находится в третьей нормальной форме, то она
находится и в первой и во второй нормальных формах.
Третья нормальная форма требует, чтобы в таблице не имелось транзитивных
зависимостей между не ключевыми полями, то есть, чтобы значение любого поля, не
входящего в первичный ключ, не зависело от значения другого поля, также не
входящего в первичный ключ.
Все таблицы данной БД удовлетворяют этому условию, следовательно, БД
находится в третьей нормальной форме. Выполнение данного условия изображено на
диаграмме функциональных зависимостей (рисунок 3.11).
Рисунок 3.11 - Диаграмма функциональных зависимостей (3НФ)
4. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ СИСТЕМЫ
4.1 Обоснование выбора СУБД
Целью написания данного курсового проекта является создание базы данных
учета товарооборота магазина мобильных телефонов для хранения информации о
телефонах, поставках, продажах, клиентах, сотрудниках и удобного просмотра этой
информации пользователями.
Для реализации этой задачи была выбрана реляционная модель данных.
В качестве СУБД рассматривались несколько вариантов, с которыми был
знаком разработчик. Среди них Oracle Database, Microsoft SQL Server и Microsoft
Access. Oracle и MS SQL Server были отвергнуты по причине высокой сложности
разработки. К тому же разрабатываемый программный продукт не требует всего
функционала, предоставляемого данными СУБД.
В качестве основы была выбрана СУБД Microsoft Access. Она позволяет
создавать реляционные базы данных любого уровня сложности и обеспечивает
удобство работы пользователя: имеется возможность создания пользовательских
интерфейсов, автоматизация разработки различных объектов. Создание базы в
Microsoft Access упрощается за счет наличия в нем различных автоматических
функций и мастеров и конструкторов, что позволяет значительно экономить время и
ресурсы. Для создания запросов можно использовать как мастера, так и встроенный
SQL редактор. Для реализации БД была выбрана версия 2010, так как она является
актуальной на данный момент, имеет приятный и дружественный интерфейс, с
которым удобно будет работать даже неподготовленным пользователям.
4.2 Описание таблиц
При создании таблиц для БД на основе реляционной модели между ними
установлены связи 1…∞. Во всех связях присутствует обеспечение целостности
данных. Каскадное удаление обеспечено между таблицами «Сотрудники»-«Продажи»,
«Телефоны»-«Продажи», «Производители»-«Телефоны», «Поставщики»-«Поставки».
Между всеми таблицами обеспечено каскадное обновление данных. Схема данных для
разрабатываемой БД представлена на рисунке 4.1.
Справочная таблица «Форм-фактор». (Рисунок 4.2)
Код - Код форм-фактора, тип счетчик, первичный ключ, содержит уникальные
значения без повторений.
НазваниеФФ - название форм-фактора, размер 20 символов, тип текстовый,
поле обязательное, индексированное без повторений.
Рисунок 4.2 - Справочная таблица «Форм-фактор»
Справочная таблица «ОС». (Рисунок 4.3)
Код - Код ОС, тип счетчик, первичный ключ, содержит уникальные значения
без повторений.
НазваниеОС - название форм-фактора, размер 15 символов, тип текстовый,
поле обязательное, индексированное без повторений.
Рисунок 4.3 - Справочная таблица «ОС»
Справочная таблица «Тип Дисплея». (Рисунок 4.4)
Код - Код типа дисплея, тип счетчик, первичный ключ, содержит уникальные
значения без повторений.
НазваниеТипаДисплея - название типа дисплея, размер 20 символов, тип
текстовый, поле обязательное, индексированное без повторений.
Справочная таблица «Тип Телефона». (Рисунок 4.5)
Код - Код типа телефона, тип счетчик, первичный ключ, содержит уникальные
значения без повторений.
НазваниеТипаТелфона - название типа телефона, размер 15 символов, тип
текстовый, поле обязательное, индексированное без повторений.
Рисунок 4.4 - Справочная таблица «Тип дисплея»
Рисунок 4.5 - Справочная таблица «Тип Телефона»
Справочная таблица «Страны». (Рисунок 4.6)
Код - Код страны, тип счетчик, первичный ключ, содержит уникальные
значения без повторений.
НазваниеСтраны - название страны, размер 20 символов, тип текстовый, поле
обязательное, индексированное без повторений.
Флаг - поле объекта OLE, хранит изображение флага страны, обязательный.
Рисунок 4.6 - Справочная таблица «Страны»
Таблица «Производители». (Рисунок 4.7)
Код - Код производителя, тип счетчик, первичный ключ, содержит уникальные
значения без повторений.
НазваниеПроизводителя - название производителя, размер 20 символов, тип
текстовый, поле обязательное, индексированное без повторений.
НазваниеСтраны - Код страны, числовое поле, подстановка из таблицы
«Страны», связь по полю «КодСтраны», подпись «Страна», отображается поле
«НазваниеСтраны» таблицы «Страны».
Логотип - поле объекта OLE, хранит изображение логотипа производителя,
обязательный.
Рисунок 4.7 - Таблица «Производители»
Таблица «Сотрудники». (Рисунок 4.8)
Код - Код сотрудника, тип счетчик, первичный ключ, содержит уникальные
значения без повторений.
ФИО - фамилия, имя и отчество сотрудника, размер 60 символов, тип
текстовый, поле обязательное, индексированное с повторениями, т.к. у
сотрудников могут быть абсолютно одинаковые ФИО.
Телефон - содержит номер телефона сотрудника, тип поля текстовый, для
ввода используется маска "+"00\(000\)000\-00\-00;0; обязательное,
неиндексированное.
Рисунок 4.8 - Таблица «Сотрудники»
Таблица «Клиенты». (Рисунок 4.9)
Код - Код клиента, тип счетчик, первичный ключ, содержит уникальные
значения без повторений.
ФИО - фамилия, имя и отчество клиента, размер 60 символов, тип текстовый,
поле обязательное, индексированное с повторениями, т.к. у клиентов могут быть
абсолютно одинаковые ФИО.
Телефон - содержит номер телефона клиента, тип поля текстовый, для ввода
используется маска "+38(0"00\)000\-00\-00;0; не обязательное,
неиндексированное.
Адрес - содержит адрес клиента, размер 100 символов, тип текстовый, поле
необязательное, не индексированное.
Рисунок 4.9 - Таблица «Клиенты»
Таблица «Поставщики». (Рисунок 4.10)
КодПоставщика - Код поставщика, тип счетчик, первичный ключ, содержит
уникальные значения без повторений.
НазваниеПоставщика - содержит название поставщика, тип текстовый, размер
60 символов, поле обязательное, индексированное с повторениями, т.к. в разных
городах могут существовать фирмы с одинаковыми названиями.
ТелефонПоставщика - содержит номер телефона поставщика, тип поля
текстовый, для ввода используется маска "+"00\(000\)000\-00\-00;0;
обязательное, неиндексированное.
АдресПоставщика - содержит адрес офиса поставщика, тип текстовый, размер
100 символов, поле обязательное, не индексированное.
ГородПоставщика - содержит город, в котором находится офис поставщика,
тип текстовый, размер 20 символов, поле обязательное, индексированное с
повторениями, т.к. разные поставщики могут находиться в одном городе.
НазваниеСтраны - Код страны, числовое поле, подстановка из таблицы
«Страны», связь по полю «КодСтраны», подпись «Страна», отображается поле
«НазваниеСтраны» таблицы «Страны».
Рисунок 4.10 - Таблица «Поставщики»
Таблица «Телефоны». (Рисунок 4.11)
КодТелефона - Код телефона, тип счетчик, первичный ключ, содержит
уникальные значения без повторений.
Модель - название модели телефона, тип текстовый, размер 30 символов,
поле обязательное, индексированное без повторений.
НазваниеПроизводителя - код производителя, числовое поле, подстановка из
таблицы «Производители», связь по полю «КодПроизводителя», подпись
«Производитель», отображается поле «НазваниеПроизводителя» таблицы
«Производители».ФФ - код форм-фактора, числовое поле, подстановка из таблицы
«Форм-фактор», связь по полю «КодФормФактора», подпись «Форм-Фактор»,
отображается поле «НазваниеФФ» таблицы «Форм-Фактор».
Цена - цена телефона, числовое поле, двойное с плавающей точкой,
обязательное, не индексированное, условие на значение >0, при неверном вводе
выводится сообщение об ошибке.
Цвет - цвет телефона, тип текстовый, размер 15 символов, поле не
обязательное, не индексированное.
ТипКамеры - тип камеры телефона, тип текстовый, размер 10 символов, поле
не обязательное, не индексированное.
НазваниеОС - код операционной системы, числовое поле, подстановка из
таблицы «ОС», связь по полю «КодОС», подпись «ОС», отображается поле
«НазваниеОС» таблицы «ОС».
НазваниеТипаДисплея - код типа дисплея, числовое поле, подстановка из
таблицы «Тип Дисплея», связь по полю «КодТипаДисплея», подпись «Тип Дисплея»,
отображается поле «НазваниеТипаДисплея» таблицы «Тип Дисплея».
ХарактеристикиДисплея - содержит различные характеристики дисплея, как
разрешение, диагональ и пр., тип текстовый, размер 25 символов, поле не
обязательное, не индексированное, маска ввода 000" х "000"
рх",\ 0\,0\';0;
НазваниеТипаТелефона - код типа телефона, числовое поле, подстановка из
таблицы «Тип Телефона», связь по полю «КодТипаТелефона», подпись «Тип
Телефона», отображается поле «НазваниеТипаТелефона» таблицы «Тип Телефона».
Размеры - содержит физические размеры телефона, тип поля текстовый, для
ввода используется маска !#99.9" x "#99.9" x "#99.9;0;_
необязательное, неиндексированное.
Вес - вес телефона, тип числовой, размер 3 символа, поле не обязательное,
не индексированное.
Рисунок 4.11 - Таблица «Телефоны»
Таблица «Поставки». (Рисунок 4.12)
КодПоставки - код поставки, тип счетчик, первичный ключ, содержит
уникальные значения без повторений.
КодПоставщика - код поставщика, числовое поле, подстановка из таблицы
«Поставщики», связь по полю «КодПоставщика», подпись «Поставщик», отображается
поле «НазваниеПоставщика» таблицы «Поставщики».
КодТелефона - код телефона, числовое поле, подстановка из таблицы
«Телефоны», связь по полю «КодТелефона», подпись «Модель», отображается поле
«НазваниеТелефона» таблицы «Телефоны».
ДатаПоставки - дата поставки, тип дата/время, имеет краткий формат даты,
маска ввода 00.00.0000;0;_ условие на значение <=Now() (т.к. дата не может
быть больше текущей), при неверном значении выводится сообщение об ошибке.
Количество - количество телефонов в поставке, числовое поле, обязательное, не
индексированное, условие на значение >0, при неверном вводе выводится
сообщение об ошибке. НомерПоставки - номер поставки, числовое поле,
обязательное, индексированное с совпадениями, маска ввода 00000.
Рисунок 4.12 - Таблица «Поставки»
Таблица «Продажи». (Рисунок 4.13)
КодНакладной - номер накладной, тип счетчик, первичный ключ, содержит
уникальные значения без повторений.
КодТелефона - код телефона, числовое поле, подстановка из таблицы
«Телефоны», связь по полю «КодТелефона», подпись «Модель», отображается поле
«НазваниеТелефона» таблицы «Телефоны».
ДатаПродажи - дата продажи, тип дата/время, имеет полный формат даты,
значение по умолчанию Now(), обязательное поле, индексированное с повторениями.
Скидка - содержит скидку на модель в процентах, тип поля числовой,
значение по умолчанию - 0, условие на значение >=0, сообщение об ошибке
«Скидка должна быть положительной», обязательное, не индексированное.- серийный
номер телефона, тип текстовый, маска ввода
!00"-"000000"-"000000"-"09;, обязательное поле,
не индексированное.
КодКлиента - код клиента, числовое поле, подстановка из таблицы
«Клиенты», связь по полю «КодКлиента», подпись «Клиент», отображается поле
«ФИОКлиент» таблицы «Клиенты», обязательное поле, индексированное с
повторениями.
КодСотрудника - код сотрудника, числовое поле, подстановка из таблицы
«Сотрудники», связь по полю «КодСотрудника», подпись «Продавец», отображается
поле «ФИОСотрудника» таблицы «Сотрудники», обязательное поле, индексированное с
повторениями.
Сумма - вычисляемлое поле. Сумма покупки с учетом скидки, числовое поле,
двойное с плавающей точкой, обязательное, не индексированное, условие на
значение >0, при неверном вводе выводится сообщение об ошибке. Формат поля #
##0,00" грн.". Получает значение из формы «Добавить покупку».
Рассчитывается по формуле Me.Сумма = Me.цена_Телефоны - (Me.цена_Телефоны *
(Me.Скидка / 100)).
Рисунок 4.13 - Таблица «Продажи»
Таблица «users». (Рисунок 4.14)
КодПользователя - код пользователя, тип счетчик, первичный ключ, содержит
уникальные значения без повторений.
КодСотрудника - код сотрудника, числовое поле, подстановка из таблицы
«Сотрудники», связь по полю «КодСотрудника», подпись «Продавец», отображается
поле «ФИОСотрудника» таблицы «Сотрудники», обязательное поле, индексированное с
повторениями.- имя пользователя, размер 32 символа, тип текстовый, поле
обязательное, неиндексированное.- пароль пользователь, размер 32 символа, тип
текстовый, поле обязательное, неиндексированное, маска ввода «Пароль».- группа,
к которой принадлежит пользователь, тип числовой, размер 1 символ,
обязательное, не индексированное.
Рисунок 4.14 - Таблица «users»
4.3 Проектирование пользовательского интерфейса
Пользовательский интерфейс представляет собой совокупность средств и
методов, при помощи которых пользователь взаимодействует с программой. Так как
интерфейс единственная видимая часть программы, он должен быть простым,
понятным, удобным и эргономичным.
В разрабатываемой базе данных интерфейс состоит из форм. С их помощью
пользователь сможет просматривать и изменять информацию в базе, добавлять новые
записи, осуществлять поиск записей, просматривать итоговые документы.
4.3.1 Уровни доступа к БД
Для предотвращения изменения структуры БД в системе предусмотрено
разграничение уровней доступа. Системой будут пользоваться 2 типа пользователей:
администратор и сотрудник.
При запуске БД пользователю будет предложено ввести логин и пароль. По
умолчанию логин “admin” и пароль “admin” для получения прав администратора БД.
Все логины и пароли хранятся в отдельной таблице users. В зависимости от того
какой группе принадлежит авторизовавшийся пользователь, ему могут быть доступны
или недоступны некоторые элементы интерфейса и функции.
Сотруднику не будут доступны кнопки архивации и восстановления, но в это
же время он может воспользоваться формой «Архивы» для доступа к архивным
записям и может восстанавливать их поштучно в зависимости необходимости. Также
сотруднику не будет доступна форма «Справочные таблицы» и форма «Пользователи»,
содержащая в себе логины и пароли всех пользователей.
Остальные элементы интерфейса доступны в полной мере как сотруднику так и
администратору БД.
4.3.2 Модель пользовательского интерфейса
Модель пользовательского интерфейса включает в себя классификацию
процессов на интерактивные и не интерактивные функции и диаграмму последовательности
форм(FSD). Эта диаграмма показывает, какие формы появляются в приложении, и в
каком порядке, на ней фиксируется набор и структура вызовов экранных форм.
Диаграмма представляет собой иерархию, на вершине которой находится главная
форма приложения, реализующего подсистему. Диаграмма последовательности форм
представлена на рисунке 4.14.
При запуске приложения открывается форма авторизации, запрашивающая логин
и пароль. В зависимости от введенного логина и пароля пользователю будут
доступны элементы интерфейса, соответствующие его правам доступа.
4.4 Описание функционирования приложения
Как и любое приложение, база данных имеет свою структуру
функционирования. Результаты работы при этом отображаются в формах. Рассмотрим
функционирование базы данных на основе модели пользовательского интерфейса,
описав детально каждую форму.
Форма «Авторизация» предназначена для авторизации пользователя для
доступа к базе данных (администратор, менеджер). Внешний вид формы представлен
на рисунке 4.15.
Кнопка «ОК на форме служит для проверки введенного пароля. Пароль
храниться на форме в текстовом поле, не доступном для отображения пользователю
и сверяется с таблицей “users” при помощи модуля (Приложение В.1). При
совпадении пароля с текстовым полем открывается форма «Главное окно», с теми
элементами интерфейса, которые соответствуют группе вошедшего пользователя. В
случае несовпадения паролей выдается сообщение «Неверный пароль», либо, если
пользователь с таким логином не найден в базе, то будет выведено сообщение
«Пользователь не найден». При нажатии кнопки «Отмена» происходить закрытие базы
данных.
Рисунок 4.14 - Диаграмма последовательности форм
Рисунок 4.15 - Форма «Авторизация»
Форма «Главное окно» предназначена для навигации по всем формам в БД.
Внешний вид формы представлен на рисунке 4.16.
При нажатии на кнопку «Выход» происходит полное закрытие базы данных.
Нажатие на кнопку с изображением двух человечков приведет к закрытию текущей
формы и открытию формы «Авторизация» для входа под другим логином.
В главном окне базы имеется отдельное контекстное меню, созданное на
основе макросов. Меню содержит ссылки на частоиспользуемые формы, а также
кнопку закрытия главного окна. Программный код данного меню представлен в
приложении В.2.
Рисунок 4.16 - Форма «Главное окно»
Кнопка «Новая покупка» позволяет создать запись о покупке без начальной
привязки к клиенту (например, если клиент еще не добавлен в базу). При вводе
ФИО Клиента, отсутствующего в базе будет предложено создать такую запись.
Кнопка «Клиенты» служит для входа в форму «Клиенты». Эта форма содержит в
себе информацию о клиентах и их покупках. данная форма является основной для
работы с покупателями, т.к. для продажи телефона новому клиенту необходимо
сначала добавить его в базу, а потом добавить к нему покупку.
На данной форме расположены такие кнопки:
«Новый клиент» отображает пустые поля для добавления нового клиента.
«Печать» используется для печати списка покупок текущего клиента. Список
покупок является простым отчетом. Источник записей для данного отчета:
Клиенты.КодКлиента, Клиенты.ФИОКлиента, Клиенты.ТелефонКлиента,
Клиенты.АдресКлиента, Продажи.КодНакладной, Продажи.МодельТелфона, Продажи.ДатаПродажи,
Продажи.Скидка, Продажи.IMEI, Продажи.ФИОКлиента AS ФИОКлиента_Продажи,
Продажи.ФИОСотрудника, Продажи.Сумма FROM Клиенты INNER JOIN Продажи ON
Клиенты.КодКлиента = Продажи.ФИОКлиента
(((Клиенты.ФИОКлиента)=[Формы]![Клиенты]![ФИОКлиента]));
Группировка записей отсутствует, сортировка осуществляется по дате
продажи от старых к новым.
кнопка «Удалить клиента» удаляет всю информацию о клиенте и о его
покупках.
кнопки навигации и поиска по записям. Расположены в нижней части формы.
Рисунок 4.17 - Форма «Клиенты»
«Добавить покупку» используется для добавления записи о покупке текущему
клиенту. При нажатии на эту кнопку появляется окно с выбором названия
производителя мобильного телефона. Данное окно изображено на рисунке 4.18.
Форма добавления покупки изображена на рисунке 4.19. Источник данных для формы
добавления покупки:Продажи.*, Телефоны.НазваниеПроизводителя, Телефоны.Модель,
Телефоны.цена AS цена_Телефоны, Производители.КодПроизводителя, Производители.НазваниеПроизводителя
AS НазваниеПроизводителя_Производители(Производители INNER JOIN Телефоны ON
Производители.КодПроизводителя = Телефоны.НазваниеПроизводителя) INNER JOIN
Продажи ON Телефоны.КодТелефона =
Продажи.МодельТелфона(((Производители.КодПроизводителя)=[Формы]![Изготовитель]![ПолеСоСписком2]));
«Редактировать покупку» используется для изменения информации о покупке,
например для изменения процента скидки.
«Удалить запись» используется для удаления выделенной записи.
«Печать» возле каждой записи. Используется для печати чека (Приложение
Б.1). Источником данных для чека является SQL-запрос: Продажи.КодНакладной,
Клиенты.ФИОКлиента, Клиенты.ТелефонКлиента, Клиенты.АдресКлиента,
Продажи.МодельТелфона, Телефоны.НазваниеПроизводителя, Телефоны.IDФФ, Телефоны.Цвет,
Телефоны.[Тип камеры], Телефоны.НазваниеОС, Телефоны.НазваниеТипаДисплея,
Телефоны.ХарактеристикиДисплея, Телефоны.НазваниеТипаТелефона, Телефоны.Размер,
Телефоны.Вес, Телефоны.цена, Продажи.ДатаПродажи, Продажи.Скидка, Продажи.IMEI,
Продажи.ФИОСотрудника, Продажи.Сумма FROM Телефоны INNER JOIN (Клиенты INNER
JOIN Продажи ON Клиенты.КодКлиента = Продажи.ФИОКлиента) ON
Телефоны.КодТелефона = Продажи.МодельТелфона
(((Продажи.КодНакладной)=[Формы]![Клиенты]![Подчиненные
продажи].[Form]![КодНакладной]));
Если ФИО Клиента отсутствует в списке, то система автоматически предложит
его добавить в базу. Программный код, отвечающий за эту функцию, представлен в
приложении В.2.
Рисунок 4.18 - Форма «Выбор производителя»
Рисунок 4.19 - Форма «Добавление записи»
Кнопка «Поставщики» на главной форме открывает форму со списком
поставщиков и их поставками (Рисунок 4.20).
На данной форме расположены такие кнопки:
«Новый поставщик» отображает пустые поля для добавления нового
поставщика.
«Удалить поставщика» удаляет всю информацию о поставщике и о его
поставках.
кнопки навигации и поиска по записям. Расположены в нижней части формы.
«Добавить поставку» открывает форму добавления поставки для текущего
поставщика (Рисунок 4.21).
Источник данных для формы «Поставщики»:Поставщики.КодПоставщика,
Поставщики.НазваниеПоставщика, Поставщики.ТелефонПоставщика,
Поставщики.ГородПоставщика, Поставщики.АдресПостащика,
Поставщики.НазваниеСтраныПоставщики;
Рисунок 4.20 - Форма «Поставщики»
«Поставки» открывает форму, содержащую список поставок текущего
поставщика (Рисунок 4.22). Кнопка «Добавить поставку» также доступна на этой
форме. Источник данных для формы «Поставки»: Поставки.КодПоставки,
Поставки.НазваниеПоставщика, Поставки.МодельТелефона, Поставки.ДатаПоставки,
Поставки.Количество, Поставки.[Номер поставки]ПоставкиBY Поставки.[Номер
поставки];
кнопка со значком «Отчет» - полный отчет обо всех поставщиках (Приложение
Б.2). Источником данных для отчета является SQL запрос: Поставщики.*,
Поставки.КодПоставки, Поставки.МодельТелефона, Поставки.ДатаПоставки,
Поставки.Количество, Поставки.[Номер поставки] FROM Поставщики INNER JOIN
Поставки ON Поставщики.КодПоставщика = Поставки.НазваниеПоставщика;
В отчете осуществляется группировка по названию поставщика и сортировка
по номеру поставки (от минимального к максимальному).
Рисунок 4.21 - Форма «Добавить поставку»
Рисунок 4.22 - Форма «Поставки»
Кнопка «Производители» на главной форме открывает форму «Производители»,
в которой содержится название производителя, логотип, страна и её флаг
(Рисунок.4.23). Также данная форма содержит «подчиненная форма Телефоны».
Источник данных для данной формы: Производители.*, Страны.флагСтраны INNER JOIN
Производители ON Страны.КодСтраны = Производители.НазваниеСтраны;
На данной форме расположены такие кнопки:
- «Новый производитель» форму для добавления нового поставщика (Рисунок
4.24).
«Удалить производителя» удаляет всю информацию о производителе и о
производимых им телефонах.
кнопки навигации и поиска по записям. Расположены в нижней части формы.
Кнопка «Все производители» открывает отчет, содержащий информацию обо
всех производителям и моделях телефонов этого производителя, продаваемых в
магазине (Приложение Б.3). Источником данных для данного отчета является
SQL-запрос: Производители.*, Телефоны.Модель, Телефоны.цена, Страны.флаг FROM
Страны INNER JOIN (Производители INNER JOIN Телефоны ON
Производители.КодПроизводителя = Телефоны.НазваниеПроизводителя) ON
Страны.КодСтраны = Производители.НазваниеСтраны;
Данные в отчете сгруппированы по странам (в алфавитном порядке) и по
названию производителя (также в алфавитном порядке). Внутри группы
производителя осуществялется сортировка телефонов по цене (от самых дешевых до
самых дорогих).
Рисунок 4.23 - Форма «Производители»
Рисунок 4.24 - Форма «Добавить производителя»
Кнопка «Телефоны» на главной форме открывает форму «Телефоны», содержащую
все модели телефонов продающихся, либо продававшихся в магазине (Рисунок 4.25).
Источник данных для данной формы: Телефоны.*, Производители.НазваниеПроизводителя,
Телефоны.МодельПроизводители INNER JOIN Телефоны ON
Производители.КодПроизводителя = Телефоны.НазваниеПроизводителяBY
Производители.НазваниеПроизводителя, Телефоны.Модель;
На данной форме расположены такие кнопки:
«Добавить телефон» отображает пустые поля для добавления нового
производителя.
«Удалить телефон» удаляет всю информацию о телефоне.
кнопки навигации и поиска по записям. Расположены в нижней части формы.
кнопка «Все телефоны» открывает отчет, содержащий информацию обо всех
моделях телефонов (Приложение Б.4). Источником данных для отчета является
SQL-запрос: Телефоны.*, Производители.НазваниеПроизводителя AS
НазваниеПроизводителя_Производители FROM Производители INNER JOIN Телефоны ON
Производители.КодПроизводителя = Телефоны.НазваниеПроизводителя;
Данные в отчете сгруппированы по названию производителя. Внутри групп
осуществляется сортировка по названию модели в алфавитном порядке.
кнопка «Популярные за период» открывает отчет, содержащий информацию о
самых продаваемых телефонах за введенный период (Приложение Б.5). Источником
данных для отчета является SQL-запрос:Продажи.МодельТелфона,
Продажи.ДатаПродажи, Телефоны.НазваниеПроизводителя,
Count(Продажи.КодНакладной) AS [Count-КодНакладной]Телефоны INNER JOIN Продажи
ON Телефоны.КодТелефона = Продажи.МодельТелфонаBY Продажи.МодельТелфона,
Продажи.ДатаПродажи, Телефоны.НазваниеПроизводителя(((Продажи.ДатаПродажи)
Between [Формы]![Открыть отчет]![Поле73] And [Формы]![Открыть
отчет]![Поле75]))BY Count(Продажи.КодНакладной) DESC;
Данные в отчете сгруппированы по дням и отсортированы по количеству
продаж.
кнопка «Все телефоны по популярности» открывает отчет, содержащий
информацию о самых продаваемых телефонах за все время (Приложение Б.6).
Источником данных для отчета является SQL-запрос: Продажи.МодельТелфона,
Count(Продажи.КодНакладной) AS [Count-КодНакладной]ПродажиBY
Продажи.МодельТелфонаBY Count(Продажи.КодНакладной) DESC;
Данные в отчете отсортированы по количеству продаж.
кнопка «Печать» печатает отчет, содержащий информацию обо всех моделях
телефонов (Приложение Б.4).
Рисунок 4.25 - Форма «Телефоны»
Источник данных для данной формы: Сотрудники.ФИОСотрудника,
Сотрудники.ТелефонСотрудника, Сотрудники.КодСотрудника Сотрудники;
На данной форме расположены такие кнопки:
«Добавить сотрудника» отображает пустые поля для добавления нового
сотрудника.
Рисунок 4.26 - Форма «Сотрудники»
«Удалить сотрудника» удаляет всю информацию о сотруднике.
кнопки навигации и поиска по записям. Расположены в нижней части формы.
кнопка «Продажи» открывает форму, содержащую список продаж выбранного
сотрудника (Рисунок 4.27).
Источник данных для данной формы:Продажи.ФИОСотрудника,
Продажи.КодНакладной, Продажи.МодельТелфона, Продажи.ДатаПродажи,
Продажи.Скидка, Продажи.IMEI, Продажи.ФИОКлиента, Продажи.СуммаПродажи(((Продажи.ФИОСотрудника)=[Формы]![Сотрудники]![КодСотрудника]));
кнопка «Отчет» на формах «Сотрудники» и «Продажи» открывает отчет о
продажах, совершенных выбранным сотрудником (Приложение Б.7). Источником данных
для отчета является SQL-запрос:Клиенты.КодКлиента, Клиенты.ФИОКлиента,
Клиенты.ТелефонКлиента, Клиенты.АдресКлиента, Продажи.КодНакладной,
Продажи.МодельТелфона, Продажи.ДатаПродажи, Продажи.IMEI,
Продажи.ФИОСотрудника, Телефоны.Модель, Производители.НазваниеПроизводителя,
Сотрудники.ФИОСотрудника AS ФИОСотрудника_Сотрудники, Продажи.Сумма FROM
(Производители INNER JOIN Телефоны ON Производители.КодПроизводителя =
Телефоны.НазваниеПроизводителя) INNER JOIN (Сотрудники INNER JOIN (Клиенты
INNER JOIN Продажи ON Клиенты.КодКлиента = Продажи.ФИОКлиента) ON
Сотрудники.КодСотрудника = Продажи.ФИОСотрудника) ON Телефоны.КодТелефона =
Продажи.МодельТелфона WHERE
(((Продажи.ФИОСотрудника)=[Формы]![Сотрудники]![КодСотрудника]));
Данные в отчете сгруппированы по дате продажи (от минимального к
максимальному) и по ФИО сотрудника.
Рисунок 4.27 - Форма «Продажи»
Кнопка «Отчеты» на главной форме открывает форму «Отчеты» в которой
содержится список непараметрических отчетов, таких как «Все телефоны»
(Приложение Б.4), «Список клиентов и покупок» (Приложение Б.8), «Все
поставщики» (Приложение Б.2), «Все производители» (Приложение Б.3) и
отчет-бланк (Рисунок 4.28).
Рисунок 4.28 - Форма «Отчеты»
Кнопка «Архив клиентов» на главной форме открывает форму «Архив
клиентов», записи о клиентах, которые давно не совершали покупок в магазине.
При помощи этой формы пользователь может извлечь вручную либо удалить данные из
архива окончательно (Рисунок 4.29). Источник данных данной формы: Архив_Клиенты.*Архив_Клиенты;
Рисунок 4.29 - Форма «Архивы» вкладка «Клиенты»
На данной форме присутствуют такие кнопки:
кнопка «Восстановить» перемещает телефон/клиента в основную таблицу и
удаляет его из архива. Восстановление происходит посредством запроса: INTO
КлиентыАрхив_Клиенты.*Архив_Клиенты(((Архив_Клиенты.КодКлиента)=[Формы]![архив_Клиенты]![КодКлиента]));
Удаление записи из архива при восстановлении происходит стандартными
средствами Access.
кнопка «Удалить клиента» удаляет запись из архива без возможности
восстановления.
Кнопка «Архив телефонов» на главной форме открывает форму «Архив
телефонов», содержащей записи о телефонах, которые давно не продавались. При
помощи этой формы пользователь может извлечь вручную либо удалить данные из
архива окончательно (Рисунок 4.30).
Рисунок 4.30 - Форма «Архивы» вкладка «Телефоны»
Источник данных данной формы: Архив_Телефоны.*Архив_Телефоны;
На данной форме присутствуют такие кнопки:
кнопка «Восстановить» перемещает телефон/клиента в основную таблицу и
удаляет его из архива. Восстановление происходит посредством запроса: INTO
ТелефоныАрхив_Телефоны.*Архив_Телефоны(((Архив_Телефоны.КодТелефона)=[Формы]![архив_Телефоны]![КодТелефона]));
Удаление записи из архива при восстановлении происходит стандартными
средствами Access.
кнопка «Удалить» удаляет запись из архива без возможности восстановления.
Формы, описанные ниже, доступны только администраторам системы.
Кнопка «Архивация» на главной форме открывает форму «Архивация», при
помощи которой можно переместить устаревшие записи в архивные таблицы.
Переместить можно записи из всех таблиц сразу либо из таблицы по выбору.
Архивация состоит из двух шагов.
Первый шаг - это копирование записи из исходной таблицы в архив. Для
этого используются следующие SQL-запросы:
) для телефонов:INTO Архив_ТелефоныТелефоны.*[Последняя дата
продажи телефона] INNER JOIN Телефоны ON [Последняя дата продажи
телефона].КодТелефона = Телефоны.КодТелефона(((Телефоны.КодТелефона)=[Последняя
дата продажи телефона]![КодТелефона]));
) для клиентов:INTO Архив_Клиенты ( КодКлиента, ФИОКлиента,
ТелефонКлиента, АдресКлиента )Клиенты.КодКлиента, Клиенты.ФИОКлиента,
Клиенты.ТелефонКлиента, Клиенты.АдресКлиентаКлиенты INNER JOIN Продажи ON
Клиенты.КодКлиента = Продажи.ФИОКлиентаBY Клиенты.КодКлиента,
Клиенты.ФИОКлиента, Клиенты.ТелефонКлиента,
Клиенты.АдресКлиента(((Last(Продажи.ДатаПродажи))<[Формы]![Архивация]![Поле4]));
) для продаж:INTO Архив_Продажи ( ДатаПродажи, КодНакладной,
МодельТелфона, Скидка, IMEI, ФИОКлиента, ФИОСотрудника, Сумма
)Продажи.ДатаПродажи, Продажи.КодНакладной, Продажи.МодельТелфона,
Продажи.Скидка, Продажи.IMEI, Продажи.ФИОКлиента, Продажи.ФИОСотрудника,
Продажи.СуммаПродажи(((Продажи.ДатаПродажи)<[Формы]![Архивация]![Поле4]));
) для поставок: INTO Архив_Поставки ( ДатаПоставки, КодПоставки,
НазваниеПоставщика, МодельТелефона, Количество, [Номер поставки]
)Поставки.ДатаПоставки, Поставки.КодПоставки, Поставки.НазваниеПоставщика,
Поставки.МодельТелефона, Поставки.Количество, Поставки.[Номер
поставки]Поставки(((Поставки.ДатаПоставки)<[Формы]![Архивация]![Поле4]));
Вторым шагом при архивации является удаление записи из исходной таблицы.
Для этого используются следующие SQL-запросы:
) для телефонов:DISTINCTROW Телефоны.*,
Телефоны.КодТелефонаТелефоны INNER JOIN арх_телефоны ON Телефоны.КодТелефона =
арх_телефоны.КодТелефона(((Телефоны.КодТелефона)=[арх_телефоны]![КодТелефона]));
) для клиентов:DISTINCTROW Клиенты.*,
Клиенты.КодКлиентаарх_клиенты INNER JOIN Клиенты ON арх_клиенты.КодКлиента =
Клиенты.КодКлиента(((Клиенты.КодКлиента)=[арх_клиенты]![КодКлиента]));
) для продаж:Продажи.*,
Продажи.ДатаПродажиПродажи(((Продажи.ДатаПродажи)<[Формы]![Архивация]![Поле4]));
) для поставок:Поставки.*, Поставки.ДатаПоставкиПоставки(((Поставки.ДатаПоставки)<[Формы]![Архивация]![Поле4]));
Кнопка «Восстановление» на главной форме открывает форму
«Восстановление», при помощи которой можно переместить записи из архива обратно
в таблицы. Переместить можно записи из всех таблиц сразу либо из таблицы по
выбору.
Через форму восстановления можно вернуть из архива все телефоны или всех
клиентов сразу. SQL-запросы для восстановления клиентов и телефонов:
) для телефонов:INTO ТелефоныАрхив_Телефоны.*Архив_Телефоны;
) для клиентов:INTO КлиентыАрхив_Клиенты.*Архив_Клиенты;
Единичное восстановление осуществляется посредством форм «Архив
телефонов» и «Архив клиентов».
Восстановление продаж и поставок осуществляется в зависимости от даты,
введенной в форме восстановления. SQL-запросы на восстановление поставок и
продаж:
) для продаж:INTO
ПродажиАрхив_Продажи.*Архив_Продажи(((Архив_Продажи.ДатаПродажи)>[Формы]![Восстановление]![Поле4]));
) для поставок:INTO Поставки ( ДатаПоставки, КодПоставки,
НазваниеПоставщика, МодельТелефона, Количество, [Номер поставки]
)Архив_Поставки.ДатаПоставки, Архив_Поставки.КодПоставки,
Архив_Поставки.НазваниеПоставщика, Архив_Поставки.МодельТелефона,
Архив_Поставки.Количество, Архив_Поставки.[Номер
поставки]Архив_Поставки(((Архив_Поставки.ДатаПоставки)>[Формы]![Восстановление]![Поле4]));
Формы архивации и восстановления изображены на рисунке 4.31.
Рисунок 4.31 - Формы «Архивация» и «Восстановление»
Кнопка «Справочные таблицы» открывает форму «Справочные таблицы»
представляющую собой навигационную форму с горизонтальными вкладками (Рисунок
4.32).
Данная форма состоит из пяти вкладок, каждая из которых представляет
собой вспомогательную форму для редактирования справочных таблиц, таких как: ОС
(Рисунок 4.33), Страны (Рисунок 4.34), Тип дисплея (Рисунок 4.35), Тип телефона
(Рисунок 4.36), Форм-фактор (Рисунок 4.37). Все вспомогательные формы являются
ленточными с возможностью добавления новых записей без дополнительных форм.
Возле каждой записи во вспомогательных формах находится кнопка удаления.
Кнопка «Пользователи» открывает таблицу «Пользователи», содержащую
логины, пароль, а также уровни доступа пользователей в базу (Рисунок 4.38). В
шапке формы содержится подсказка относительно групп пользователей. Возле каждой
записи есть кнопка удаления.
При нажатии Ctrl+Q открывается окно позволяющее включить/выключить защиту
базы от нажатия Shift при загрузке (Рисунок 4.39). Пароль для данной формы
«noexit». Модуль, обеспечивающий работу данной функции, представлен в
приложении В.3.
Рисунок 4.33 - Форма «Справочные таблицы» вкладка «ОС»
Логическая схема функционирования системы, описанная выше, с учетом всех
компонентов приведена на рисунке 4.40.
.5 Комплект поставки и порядок установки
Для работы базы данных на компьютере должен быть установлен пакет
Microsoft Office 2010 содержащий в себе приложение Access.
В комплект поставки входят следующие файлы:
Магазин Мобильных телефонов.accdb - база данных, содержащая в себе только
заполненные справочные таблицы, т.к. информация в них актуальна для любого
магазина. Остальные таблицы пустые. Данная база также содержит 1
пользователя-администратора. Для входа в базу используется логин «admin» и
пароль «admin»;
Магазин Мобильных телефонов_образец.accdb - заполненная база данных,
поставляемая в качестве примера. Логины и пароли для входа в качестве
администратора: admin, admin. Для входа в качестве сотрудника: vova, vova;
– Курсовой.docx, Лист Задания.docx, Схема данных.docx - файлы отчета по
курсовому проектированию.
Для начала работы необходимо скопировать файл Магазин Мобильных
телефонов.accdb на жесткий диск и запустить его. Для входа использовать логин
«admin» и пароль «admin». Прежде чем преступить к работе, необходимо заполнить
справочные таблицы, если данных, поставляемых вместе с базой недостаточно.
Затем добавить в систему сотрудников магазина и выдать каждому из них
персональный логин и пароль. После этого пользователям доступен полный
функционал базы данных. Они могут добавлять/удалять клиентов, продажи,
поставки, поставщиков, телефоны, просматривать различные отчеты и работать с
данными из архивов, если такие существуют. Для защиты от несанкционированного
доступа к базе необходимо воспользоваться формой защиты от нажатия Shift.
Данная форма вызывается по нажатию Ctrl+Q. Пароль для данной формы «noexit».
Данный пароль может быть изменен администратором, внеся определенные изменения
в код программного модуля.
Рисунок 4.40 - Схема функционирования системы
ВЫВОДЫ
Результатом выполнения данного курсового проекта является база данных
информационной системы «Магазин мобильных телефонов». Разработанная база
обеспечивает хранение данных о телефонах, клиентах, поставщиках, продажах и
поставках в удобной для пользователя форме; обеспечивает возможность поиска,
добавления, удаления и обновления информации о клиентах, поставщиках,
телефонах, продажах и поставка. Составной частью разработанной базы являются
запросы, отчеты и формы для обработки информации, хранимой в ней. При работе с
данными обеспечивается контроль целостности и сохранности данных, а также
достоверности хранимой информации.
Разработанная база может использоваться студентами, в качестве примера
при разработке аналогичных ПП, и сотрудниками магазина мобильных телефонов по
прямому назначению. В ней реализованы такие функции, как: изменение
ассортимента, работа с сотрудниками, обеспечение индивидуального подхода к
каждому клиенту, анализ популярности телефонов на основе продаж, распределение
уровней доступа к БД, архивация данных и создание разнообразных отчетов.
К достоинствам этой базы данных можно отнести реализацию защиты данных за
счет разбиения ее на уровни доступа пользователей. Во-первых, это избавляет
авторизовавшегося пользователя от ненужных ему форм, к которым он не должен
иметь доступа, а во-вторых, лишает его возможности превышать свои права по
просмотру и/или редактированию или добавлению информации.
К недостаткам данной базы можно отнести избыточный интерфейс, отсутствие
возможности вести учет денежных средств магазина, а также недостаточно гибкую
систему запросов.
Устранить перечисленные выше недостатки можно будет в процессе более
глубокого изучения предмета «Базы данных».
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Слепцова,
Л.Д. Программирование на VBA в Microsoft Office 2010. - М.: ООО «И.Д.Вильямс»,
2010.-432с.: ил.
. Сергеев А.
Access 2007. Новые возможности. - СПб.: Питер, 2008. - 176с.: ил.
. Гандерлой,
Майк, Харкинз, Сьюзан Сейлз. Автоматизация Microsoft Access с помощью VBA.:
Пер. с англ. - М.: Издательский дом «Вильямс», 2006. -416с.: ил. - Парал. тит.
англ.
. Самоучитель
VBA. Как это делается в Word, Excel, Access. C.A. Малышев - СПб: Наука и
Техника, 2001 - 496 стр. с ил.
. Блюттман К.
Access. Трюки. - СПб.: Питер, 2006. - 332 с.: ил.
. Мэтью
Мак-Дональд. Access 2007. Недостающее руководство.: Пер. с англ. - СПб.:
Русская Редакция, БХВ-Петербург, 2007. -586с.: ил.
ПРИЛОЖЕНИЯ
Приложение А
ТЕХНИЧЕСКОЕ
ЗАДАНИЕ
А.1 Общие сведения
Задание: разработка базы данных информационной системы «Магазин мобильных
телефонов»».
Дата выдачи задания: 26.01.12
Плановый срок завершения работы: 03.05.12.
А.2 Основание для разработки и цель создания работы
Основанием для разработки является задание на курсовой проект по
дисциплине "Базы данных", выданное кафедрой программного обеспечения
интеллектуальных систем студентке группы ПОС-10б Лысаковой Наталье
Владимировне.
Цель разработки - создание базы данных информационной системы,
предназначенного для демонстрации основных операций, которые могут
осуществляться во время работы магазина мобильных телефонов. Разрабатываемая БД
должна предоставлять наглядную и удобную обработку и корректировку (занесение,
удаление) данных о клиентах, сотрудниках магазина и о продажах телефонов.
А.3 Требования к программному продукту
А.3.1 Требования к программному продукту в целом
В целом к программному продукту предъявляются следующие требования:
- обеспечение целостности и корректности данных;
- обеспечение защиты данных;
- удобный интерфейс.
А.3.2 Требования к задачам и функциям программного продукта
К задачам и функциям программного продукта предъявляются следующие
требования:
- обеспечение хранения данных о телефонах, клиентах,
поставщиках, продажах и поставках в удобной для пользователя форме;
- обеспечение возможности поиска, добавления, удаления и
обновления информации о клиентах, поставщиках, телефонах, продажах и поставках;
- содержание запросов, отчетов и форм для обработки информации,
хранимой в ней;
- контроль целостности и сохранности данных, а также
достоверности хранимой информации.
А.3.3 Требования к видам обеспечения
А.3.3.1
Требования к программному обеспечению
К программному обеспечению (ПО) предъявляются следующие требования:
операционная система - Microsoft Windows XP и выше;
установленная прикладная программа Access из программного пакета
Microsoft Office 2010.
А.3.3.2
Требования к техническому обеспечению
Техническое обеспечение должно удовлетворять следующим требованиям:
- IBM совместимый компьютер;
VGA-монитор;
процессор Intel Pentium 4 (и выше);
место на жестком диске 100 Мбайт (и больше);
клавиатура, мышь;
принтер.
А.3.3.3
Требования к организационному обеспечению
В программную документацию должны входить:
) пояснительная записка;
) приложения:
а) техническое задание;
б) руководство пользователя;
в) экранные формы и листинги запросов;
г) отчеты
А.4 График выполнения курсового проекта
Курсовой проект должен выполняться в соответствии с графиком,
представленным в таблице А.1.
Таблица А.1 - График выполнения курсового проекта
№ п/п
|
Название этапов выполнения курсового проекта
|
Срок выполнения курсового проекта
|
Примечание
|
1
|
Выдача курсового проекта
|
26.01.2012
|
Выполнено
|
2
|
Постановка задачи: определение требований к программному
продукту. Формулировка постановки задачи: исходные данные, ограничения,
результаты, связь.
|
26.01.2012 - 02.02.2012
|
Выполнено
|
3
|
Подбор и изучение литературы Сбор информации о процессе
работы магазина мобильных телефонов, о возможных характеристиках телефонов.
|
02.02.2012 - 16.02.2012
|
Выполнено
|
4
|
Формулирование знаний о системе (определение типов исходных
данных и их взаимосвязей). Построение инфологической модели данных, создание
потоков данных, разработка иерархической, сетевой и реляционной моделей
данных.
|
16.02.2012 - 08.03.2012
|
Выполнено
|
5
|
Реализация в Microsoft Access
|
08.03.2012 - 05.04.2012
|
Выполнено
|
6
|
Написания пояснительной записки
|
05.04.2012 - 26.04.2012
|
Выполнено
|
7
|
Защита курсового проекта.
|
03.05.2012
|
Выполнено
|
Приложение Б
ОСНОВНЫЕ
ИТОГОВЫЕ ДОКУМЕНТЫ
Рисунок Б.1 - Чек
Рисунок Б.2 - Полный отчет по поставщикам
Рисунок Б.3 - Полный отчет по производителям
Рисунок Б.4 - Все телефоны
Приложение В
ЛИСТИНГИ И
ОПИСАНИЕ ПРОГРАММНЫХ МОДУЛЕЙ
В.1 Модуль авторизации
GroupID As Integer_АвторизацияSub Кнопка1_Click()table As
DAO.Recordsetfind As Boolean= Falsetable =
CurrentDb.OpenRecordset("users", dbOpenTable)While Not table.EOF
If table.Fields(3).Value = Me.логин.Value Then
find = True
If table.Fields(4).Value = Me.пароль.Value Then
GroupID = table.Fields(2)
UserID = table.Fields(1)
Me.логин.Value = ""
Me.пароль.Value = ""
DoCmd.Close
DoCmd.OpenForm ("Главное окно")
Exit Sub
Else
MsgBox ("Пароль неверен")
End If
End If
table.MoveNextfind = False Then
MsgBox ("Юзверь не найден")IfSub
В.2 Макрос контекстного меню главного окна
меню_Справочные_таблицы()Error GoTo меню_Справочные_таблицы_Err
If (Forms![Главное окно]!Кнопка16.Visible) Then
DoCmd.OpenForm "Справочные таблицы", acNormal, "",
"", , acNormal
Else
Beep
MsgBox "Доступ отстутствует", vbOKOnly, ""
End If
меню_Справочные_таблицы_Exit:
Exit Function
меню_Справочные_таблицы_Err:
MsgBox Error$
Resume меню_Справочные_таблицы_ExitFunction
меню_Пользователи()Error GoTo меню_Пользователи_Err
If (Forms![Главное окно]!Кнопка16.Visible) Then
DoCmd.OpenForm "Пользователи", acNormal, "",
"", , acNormal
Else
Beep
MsgBox "Доступ отстутствует", vbOKOnly, ""
End If
меню_Пользователи_Exit:
Exit Function
меню_Пользователи_Err:
MsgBox Error$
Resume меню_Пользователи_ExitFunction
меню_Сменить_пользователя()Error GoTo меню_Сменить_пользователя_Err
DoCmd.Close , ""
DoCmd.OpenForm "Авторизация", acNormal, "",
"", , acNormal
меню_Сменить_пользователя_Exit:
Exit Function
меню_Сменить_пользователя_Err:
MsgBox Error$
Resume меню_Сменить_пользователя_ExitFunction
меню_Закрыть_окно()Error GoTo меню_Закрыть_окно_Err
DoCmd.Close , ""
меню_Закрыть_окно_Exit:
Exit Function
меню_Закрыть_окно_Err:
MsgBox Error$
Resume меню_Закрыть_окно_ExitFunction
В.3 Проверка на отсутствие клиента в базе
Sub ФИОКлиента_NotInList(NewData As String, Response As Integer)strTmp As
String
strTmp = "Добавить '" & NewData & "' как нового
клиента?"
If MsgBox(strTmp, vbYesNo + vbDefaultButton2 + vbQuestion, "Not in
list") = vbYes Then
strTmp = "INSERT INTO Клиенты([ФИОКлиента]) " & _
"VALUES ('" & NewData & "');"
DBEngine(0)(0).Execute strTmp, dbFailOnError
Response = acDataErrAdded
End IfSub
В.4 Макрос архивации
Архивация_Телефоны_арх()Error GoTo Архивация_Телефоны_арх_Err
DoCmd.OpenQuery "архивация_телефоны", acViewNormal, acEdit
DoCmd.OpenQuery "удаление_телефоны", acViewNormal, acEdit
Архивация_Телефоны_арх_Exit:
Exit Function
Архивация_Телефоны_арх_Err:
MsgBox Error$
Resume Архивация_Телефоны_арх_ExitFunction
Архивация_Клиенты_арх()Error GoTo Архивация_Клиенты_арх_Err
DoCmd.OpenQuery "архивация_клиенты", acViewNormal, acEdit
DoCmd.OpenQuery "удаление_клиенты", acViewNormal, acEdit
Архивация_Клиенты_арх_Exit:
Exit Function
Архивация_Клиенты_арх_Err:
MsgBox Error$
Resume Архивация_Клиенты_арх_ExitFunction
Архивация_Продажи_арх()Error GoTo Архивация_Продажи_арх_Err
DoCmd.OpenQuery "архивация_продажи", acViewNormal, acEdit
DoCmd.OpenQuery "удаление_продажи", acViewNormal, acEdit
Архивация_Продажи_арх_Exit:
Exit Function
Архивация_Продажи_арх_Err:
MsgBox Error$
Resume Архивация_Продажи_арх_ExitFunction
Архивация_Поставки_арх()Error GoTo Архивация_Поставки_арх_Err
DoCmd.OpenQuery "архивация_поставки", acViewNormal, acEdit
DoCmd.OpenQuery "удаление_поставки", acViewNormal, acEdit
Архивация_Поставки_арх_Exit:
Exit Function
Архивация_Поставки_арх_Err:
MsgBox Error$
Resume Архивация_Поставки_арх_ExitFunction
В.5 Макрос восстановления
Восстановление_Телефоны_вост()Error GoTo Восстановление_Телефоны_вост_Err
DoCmd.OpenQuery "вост_телефоны", acViewNormal, acEdit
DoCmd.OpenQuery "арх_удаление_телефоны", acViewNormal, acEdit
Восстановление_Телефоны_вост_Exit:
Exit Function
Восстановление_Телефоны_вост_Err:
MsgBox Error$
Resume Восстановление_Телефоны_вост_ExitFunction
Восстановление_Клиенты_вост()Error GoTo Восстановление_Клиенты_вост_Err
DoCmd.OpenQuery "вост_клиенты", acViewNormal, acEdit
DoCmd.OpenQuery "арх_удаление_клиенты", acViewNormal, acEdit
Восстановление_Клиенты_вост_Exit:
Exit Function
Восстановление_Клиенты_вост_Err:
MsgBox Error$
Resume Восстановление_Клиенты_вост_Exit
Function
Восстановление_Продажи_вост()Error GoTo Восстановление_Продажи_вост_Err
DoCmd.OpenQuery "вост_продажи", acViewNormal, acEdit
DoCmd.OpenQuery "арх_удаление_продажи", acViewNormal, acEdit
Восстановление_Продажи_вост_Exit:
Exit Function
Восстановление_Продажи_вост_Err:
MsgBox Error$
Resume Восстановление_Продажи_вост_ExitFunction
Восстановление_Поставки_вост()Error GoTo Восстановление_Поставки_вост_Err
DoCmd.OpenQuery "вост_поставки", acViewNormal, acEdit
DoCmd.OpenQuery "арх_удаление_поставки", acViewNormal, acEdit
Восстановление_Поставки_вост_Exit:
Exit Function
Восстановление_Поставки_вост_Err:
MsgBox Error$
Resume Восстановление_Поставки_вост_ExitFunction
В.6 Защита от запуска с нажатой кнопкой Shift
Password As String
Sub Кнопка3_Click()dbs As DAO.Database, prp As PropertyError GoTo
Change_Err
Const conPropNotFoundError = 3270
Password = Me.Поле1
Set dbs = CurrentDb
If Password = "noexit" Then
If dbs.Properties("AllowBypassKey") = True Then
dbs.Properties("AllowBypassKey") = False
State = False
Else
dbs.Properties("AllowBypassKey") = True
State = True
End If
Else
MsgBox ("Неверный пароль")
End If
_Bye:
DoCmd.Close acForm, "ВклОтклШифт"
DoCmd.Quit acPrompt
Exit Sub_Err:
If Err = conPropNotFoundError Then
Set prp = dbs.CreateProperty("AllowBypassKey", dbBoolean, True)
dbs.Properties.Append prp
Resume Next
Else
Resume Change_Bye
End IfSub