Введение в программные системы и их разработку

Системы управления базами данных

Разбить на страницы
Показывать лекцию целиком

8.1. Общая характеристика баз данных

База данных – это совокупность структурированных и взаимосвязанных данных, относящихся к определенной предметной области.

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

К основным функциям СУБД относятся следующие:

  • физическое размещение в памяти данных и их описаний;
  • поддержка баз данных в актуальном состоянии;
  • механизмы поиска запрашиваемых данных;
  • доступ к данным при одновременном запросе одних и тех же данных многими пользователями (прикладными программами);
  • способы обеспечения защиты данных от некорректных обновлений и/или несанкционированного доступа.
  • Основная особенность СУБД – это наличие процедур для ввода и хранения не только самих данных, но и описаний их структуры.

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

    СУБД использует следующие модели и описания:

  • инфологическую;
  • даталогическую;
  • физическую.
  • Трехуровневая архитектура (инфологический, даталогический и физический уровни) позволяет обеспечить независимость хранимых данных от использующих их программ.

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

    Описание, создаваемое разработчиками базы данных по инфологической модели данных, называют даталогической моделью данных. Конечным результатом даталогического проектирования является описание логической структуры базы данных на ЯОД – языке описания данных конкретной СУБД. При создании даталогической модели данных обеспечивается однозначное соответствие между конструкциями языка описания данных и графическими обозначениями информационных единиц и связей между ними.

    В основе каждой СУБД лежит концепция модели данных, то есть некоторой абстракции представления данных. Изначально были успешными две конкурирующие модели – иерархическая и сетевая. Иерархическая БД состоит из упорядоченного набора деревьев. Корпорация IBM разработала и внедрила язык описания данных DL/I (Data Language One), который моделировал данные в иерархической форме (представление данных в форме деревьев). Эта модель была разработана совместно с промышленными предприятиями и предназначалась для хранения и поддержки данных, которые иерархически связаны между собой, например, сметы материалов и списки деталей. Типичным представителем иерархической СУБД является СУБД IMS (Information Management System) компании IBM, первая версия которой появилась в 1968 г.

    На рис.8.1 показан пример схемы иерархической БД. Тип записи ФАКУЛЬТЕТ является предком (родительской или исходной записью) для типов записей КАФЕДРЫ и ДЕКАНАТ, а записи КАФЕДРЫ и ДЕКАНАТ – потомки (дочерние или порожденные записи) для записи ФАКУЛЬТЕТ.

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

    (рис 8.1) Схема иерархической модели базы данных

    В терминологии IMS вместо термина "запись" использовался термин "сегмент", а под термином "запись базы данных" понималось все дерево сегментов. В 1970 году группа CODASYL, которая разрабатывала стандарты для языка COBOL, создала модель под названием DBTG (Data Base Task Group, группа задач базы данных). Модель DBTG была готова к представлению как иерархических, так и сетевых данных. Однако эта модель была очень сложной, поэтому не имела большого успеха.

    Типичным представителем систем, основанных на сетевой модели данных, является СУБД IDMS (Integrated Database Management System), разработанная компанией Cullinet Software, Inc. Сетевой подход к организации данных является расширением иерархического подхода. Как и в иерархической модели, связи ведут от родительской записи к дочерней, но на этот раз поддерживается множественное наследование. В сетевой модели допускается несколько исходных записей для одной порожденной записи наряду с возможностью наличия записей без исходной записи (рис.8.2). Другими словами, в сетевой модели любая запись может участвовать в нескольких отношениях предок-потомок. Сетевая модель – неориентированный граф.

    (рис 8.2) Схема сетевой модели базы данных

    Большинство применяемых сегодня баз данных основаны на реляционной модели. Основная идея реляционной модели – представить произвольную структуру данных в виде двумерных таблиц. Наиболее распространенной в настоящее время настольной реляционной базой данных является MS Access, пример которой рассматривается в разделе 6.3.3.

    Реляционная модель впервые была предложена Э.Ф. Коддом (E.F. Codd) в 1970 году. Понятие модели данных, введенное Коддом, впоследствии развил Кристофер Дейт. Согласно Дейту, реляционная модель состоит из трех частей, описывающих разные аспекты реляционного подхода: структурной части, манипуляционной части и целостной части. Данные хранятся в таблицах. Столбцы таблиц называются полями, а строки – записями. В каждом поле может храниться информация только одного типа. Запросы предназначены для манипулирования данными, содержащимися в базе данных.

    Кодд определил правила реляционной модели, которые получили название "12 правил Кодда". Позже Кодд добавил "нулевое" правило.

  • Реляционная СУБД должна быть способна полностью управлять базой данных, используя связи между данными.
  • Информационное правило: вся информация в реляционной БД, включая имена таблиц и столбцов, должна определяться строго как значения таблиц.
  • Гарантированный доступ: любое значение БД должно быть гарантированно доступным через комбинацию имени таблицы, первичный ключ и имя столбца.
  • Поддержка нулевого значения: СУБД должна уметь работать с нулевыми (пустыми) значениями. Нулевое значение – это неизвестное, независимое, неприменимое значение, в отличие от значений по умолчанию и обычных значений.
  • Активный, оперативный реляционный каталог – описание БД и ее содержимое – должны быть определены на логическом уровне через таблицы, к которым можно применять запросы, используя DML (Data Manipulation Language – язык манипулирования данными).
  • Исчерпывающее подмножество языка данных: по крайней мере, один из поддерживаемых языков должен иметь четко определенный синтаксис и быть самодостаточным. Он должен поддерживать определение данных и манипулирование ими, правила целостности, авторизацию и транзакции.
  • Правило обновления представлений: все представления, теоретически обновляемые, могут быть обновлены через систему.
  • Вставка, обновление и удаление: СУБД поддерживает не только запрос данных, но и вставку, обновление и удаление.
  • Физическая независимость данных: логика программ-приложений остается прежней при изменении физических методов доступа к данным и структур хранения.
  • Логическая независимость данных: логика программ-приложений остается прежней, в пределах разумного, при изменении структур таблиц.
  • Независимость целостности: язык БД должен быть способен определять ограничения целостности. Они должны быть доступны из оперативного каталога, и не должно быть способа их обойти.
  • Независимость распределения: перенос базы данных с одного компьютера на другой компьютер не должен оказывать влияния на запросы программ-приложений. Реляционная СУБД не должна зависеть от потребностей конкретного клиента.
  • Согласованность языков всех уровней: низкоуровневый язык доступа к данным не должен игнорировать правила безопасности и целостности, поддерживаемые языком более высокого уровня.
  • Предложив реляционную модель данных, Э.Ф. Кодд создал и инструмент для удобной работы с отношениями – реляционную алгебру – формальную систему манипулирования отношениями, основными операциями которой являются проекция, соединение, пересечение и объединение.

    Реляционное исчисление – это еще одна формальная система, которая манипулирует отношениями. Реляционное исчисление основано на логике первого порядка. Так же как и выражения реляционной алгебры, формулы реляционного исчисления определяются над отношениями реляционных баз данных, и результатом вычисления также является отношение.

    Реляционная алгебра и реляционное исчисление имеют одинаковую выражающую мощность; т. е. все запросы, которые можно сформулировать с помощью реляционной алгебры, могут быть также сформулированы с помощью реляционного исчисления и наоборот. Первым это доказал Э. Ф. Кодд в 1972 году. Это доказательство основано на алгоритме, по которому произвольное выражение реляционного исчисления может быть сокращено до семантически эквивалентного выражения реляционной алгебры. Алгоритм носит название "алгоритм редукции Кодда".

    Реляционные базы данных имеют следующие специфические особенности.

  • Для каждого поля таблицы базы данных определен тип данных, таким образом нельзя в одно поле разных записей вводить данные разных типов.
  • СУБД позволяют не только вводить данные в таблицы, но и контролировать правильность вводимых данных. Имеются в виду не только ограничения по типу данных, но и контроль допустимых значений, количество вводимых знаков и т.п. СУБД не позволит сохранить в записи те данные, которые не удовлетворяют заданным правилам.
  • Таблицы баз данных могут включать в себя количество записей, исчисляемое сотнями тысяч, и при этом СУБД обеспечивает удобные способы извлечения нужной информации из этого множества записей.
  • Все данные хранятся, независимо от их структуры и содержания, в одном файле, и доступ к этим данным осуществляется постранично, не превышая ограничений на ресурсы компьютера.
  • Можно устанавливать связи между таблицами и затем при помощи запросов совместно использовать данные разных таблиц. Данные, полученные в результате запроса, представляются также в виде таблицы.
  • Запрос на выборку может быть обращен к одной или нескольким таблицам одновременно. Данные в выборке являются динамическими, т. е. при повторном запуске запроса по измененным данным, выборка изменяется.
  • Благодаря установке взаимосвязей между отдельными таблицами удается избежать ненужного дублирования данных, сэкономить память компьютера, а также увеличить скорость обработки информации.
  • Большинство баз данных может поддерживать одновременную работу с базой данных нескольких пользователей, при этом все пользователи гарантированно будут работать с актуальными данными.
  • По сравнению с другими прикладными пакетами в базах данных имеется развитая система защиты от несанкционированного доступа, которая предоставляет, помимо парольной защиты файла, возможность каждому пользователю или группе пользователей видеть и изменять только те объекты, к которым пользователи имеют право доступа.
  • При проектировании реляционной базы данных большое внимание уделяется процессу нормализации таблиц. Целью нормализации является создание такого проекта базы данных, где будет исключена избыточность информации, т. е. каждый квант информации будет сохраняться лишь в одном месте. Основное назначение нормализации – исключение возможной противоречивости хранимых данных и экономия памяти. Пренебрежение нормализацией делает структуру базы данных запутанной, а саму базу – ненадежной в работе.

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

    Поле В таблицы функционально зависит от поля А той же таблицы в том и только в том случае, когда в любой заданный момент времени для каждого из различных значений поля А обязательно существует только одно из различных значений поля В. Отметим, что здесь допускается, что поля А и В могут быть составными.

    Поле В находится в полной функциональной зависимости от составного поля А, если оно функционально зависит от А и не зависит функционально от любого подмножества поля А.

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

    Процесс нормализации представляет собой последовательное преобразование исходной БД к нормализованной базе данных путем поэтапного приведения таблиц к нормальным формам (НФ). При этом каждая следующая НФ обязательно включает в себя предыдущую, что позволяет разбить процесс на этапы и производить его однократно, не возвращаясь к предыдущим этапам. Всего в реляционной теории насчитывается 6 нормальных форм: первая нормальная форма (1НФ), вторая нормальная форма (2НФ), третья нормальная форма (3НФ), нормальная форма Бойса-Кодда (НФБК), четвертая нормальная форма (4НФ) и пятая нормальная форма (5НФ).

    По существу, таблица находится в 2НФ, если она находится в 1НФ и удовлетворяет, кроме того, некоторым дополнительным условиям. Таблица находится в 3НФ, если она находится в 2НФ и, помимо этого, удовлетворяет другим дополнительным условиям и т.д.

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

    Таблица находится во второй нормальной форме (2НФ), если она удовлетворяет определению 1НФ и все ее поля, не входящие в первичный ключ, связаны полной функциональной зависимостью с первичным ключом.

    Таблица находится в третьей нормальной форме (3НФ), если она удовлетворяет определению 2НФ и ни одно из ее неключевых полей не зависит функционально от любого другого неключевого поля.

    Кодд и Бойс обосновали и предложили более строгое определение для 3НФ, которое учитывает, что в таблице может быть несколько ключей. Таблица находится в нормальной форме Бойса-Кодда (НФБК), если и только если любая функциональная зависимость между ее полями сводится к полной функциональной зависимости от возможного ключа.

    В следующих нормальных формах (4НФ и 5НФ) учитываются не только функциональные, но и многозначные зависимости между полями таблицы.

    В настоящее время практически каждый производитель СУБД предлагает собственный программный продукт автоматизированного проектирования. Это Oracle Designer (Oracle), Power Desinger (Sybase) и другие. Демонстрационные версии данных программных продуктов можно загрузить с соответствующих сайтов (www.oracle.com, www.sybase.com). Кроме того, для автоматизированного проектирования представлены решения фирм, не производящих СУБД. Наиболее распространенными являются программные продукты фирмы AllFusion – AllFusion ERwin Data Modeler и AllFusion Process Modeler (ранее – BPwin) (см. www.interface.ru).

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

    Выделяют следующие разновидности языков реляционной алгебры:

  • dBASe-подобные языки приближены к языкам структурного программирования. Эти языки обеспечивают создание интерфейса пользователя и типовые операции обработки данных;
  • графические реляционные языки, ориентированные на конечных пользователей;
  • SQL-подобные языки запросов, реализованные в большинстве многопользовательских и распределенных систем управления базами данных.
  • dBASe-подобные языки используют базы данных dBASe, Paradox, FoxPro, Clipper, Rbase и др.

    Типичным представителем графического реляционного языка является язык QBE (Query By Example), реализованный в среде электронных таблиц, в различных базах данных, например, в MS Access, в пакете Microsoft Query. Этот язык относится к языкам манипулирования данными и имеет простейшие синтаксические конструкции, легко осваиваемые пользователями-непрограммистами.

    SQL (Structured Query Language) применяется при работе с реляционными базами данных в современных СУБД (ORACLE, dBASE IY, dBASE Y, Paradox, Access и др.). Для отдельных СУБД синтаксис версий языка SQL может различаться.

    Язык SQL стал стандартом языков запросов для работы с реляционными базами данных архитектуры "файл-сервер" и "клиент-сервер" и для управления распределенными базами данных. Это реляционно полный язык, предназначенный для работы с базами данных, создания запросов на выборку данных, для выполнения вычислений, для обеспечения целостности баз данных.

    8.2. Обзор существующих реляционных баз данных

    С появлением большого числа микрокомпьютеров был разработан ряд СУБД для персональных компьютеров. Наиболее успешной из них была dBase – продукт корпорации Ashton-Tate. Среди ранних персональных СУБД наиболее известны Rbase корпорации Microrim и Paradox от Borland.

    В настоящее время в мире используется достаточно большое количество универсальных промышленных СУБД. Среди них можно выделить трех несомненных лидеров (как по уровню развития технологий, так и по объему рынка – они вместе занимают более 90% мирового рынка СУБД). Это СУБД первого эшелона – Oracle, Microsoft SQL Server и IBM DB2. Список СУБД второго эшелона довольно велик, сюда относят такие СУБД, как Sybase, Informix, Ingress, Adabas, Interbase, Progress, Postgres, Cache, Linter, Firebird, Teradata и т.д.

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

    Локальными или настольными называют СУБД типа Access, Paradox и т. п. В них определен формат данных, который учитывает параллельное выполнение операций, возможность доступа к БД нескольких пользователей и т. д. Недостатки настольных баз данных становятся очевидными не сразу, а по мере увеличения количества данных и числа пользователей – снижается производительность и учащаются случаи сбоев.

    Для решения этих проблем была разработана технология "клиентсервер". В основе этой технологии лежит принцип централизации хранения и обработки данных: вся обработка и хранение данных полностью перекладывается на сервер; машина-клиент посылает запросы, а сервер их выполняет и посылает ответы клиенту.

    Рынок корпоративных серверных СУБД представлен Oracle, MS SQL, DB2, Sybase и InterBase. СУБД Oracle остается лидером на рынке хранилищ данных как в отношении доли рынка (48.6%), так и инноваций разработок.

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

    Разделение и сжатие данных в Oracle существенно оптимизирует работу СУБД:

  • сокращает время обработки запросов от минут до секунд;
  • позволяет осуществлять доступ к критической информации 24 часа в сутки, 7 дней в неделю;
  • позволяет управлять небольшими "порциями" данных;
  • дает возможность экономически эффективно использовать хранилища данных.
  • Приложение Oracle Total Recall, являющееся частью полного комплекса решений Oracle, в целях обеспечения безопасности баз данных позволяет сохранять исторические данные, обеспечивая эффективное и автоматическое хранение "изменений" данных для быстрого доступа к старым версиям. Oracle Database 11g помогает компаниям хранить данные в надежной и защищенной от искажений базе данных, оставляя их доступными для существующих приложений. Total Recall не требует внесения изменений в приложения или особых интерфейсов и обеспечивает оптимальное использование дискового пространства.

    В конце восьмидесятых годов Sybase разработала SQL Server и продала его Microsoft. Одним из преимуществ SQL Server является простота его применения, в частности, администрирования. Основным языком запросов является язык Transact-SQL, созданный совместно Microsoft и Sybase.

    Для обеспечения доступа к данным Microsoft SQL Server поддерживает ODBC (Open DataBase Connectivity – интерфейс взаимодействия приложений с СУБД). Система SQL Server 2008 позволяет обращаться к данным из любого приложения, разработанного с применением технологий Microsoft.NET и Visual Studio, или в пределах сервисно-ориентированной архитектуры и бизнес-процессов – через Microsoft BizTalk Server.

    SQL Server 2008 обеспечивает высокий уровень безопасности, надежности и масштабируемости для критически важных приложений. SQL поддерживает продукты сторонних компаний по управлению ключами и аппаратными модулями безопасности. Динамическое шифрование всей базы данных, файлов данных и файлов журналов не потребует никаких изменений в имеющихся приложениях.

    SQL Server 2008 позволяет основному и зеркальному серверу прозрачно устранять последствия ошибок на страницах данных, запрашивая свежую копию "подозрительной" страницы с зеркального сервера незаметно для приложений и конечных пользователей

    За счет применения сжатия данные хранятся более эффективно и занимают меньше места в хранилище. Сжатие также обеспечивает заметный прирост производительности на задачах, связанных с большим количеством операций ввода/вывода, как, например, при работе с хранилищами данных.

    SQL Server 2008 имеет развитые средства создания корпоративной отчетности, позволяя без труда создавать отчеты любого размера и сложности, а также организовывать общий доступ к ним. Предоставить нужные сведения также можно с помощью развертывания отчетов в Интернете.

    Средства упреждающей аналитики SQL Server 2008, основанные на мощном интеллектуальном анализе данных и тесно интегрированные с технологиями Microsoft BI (Microsoft Business Intelligence – бизнес-анализ в Microsoft), позволяют принимать взвешенные, обоснованные решения.

    К их числу относятся:

  • возможность оптимизировать прогнозирование за счет улучшенной поддержки временных рядов;
  • улучшенные структуры интеллектуального анализа позволяют накладывать ряд фильтров, оставляя только необходимую практическую информацию;
  • повышение информативности отчетов за счет увеличения детализации;
  • встроенная поддержка контрольных значений позволяет легко разделять данные на группы для подтверждения правильности прогноза;
  • новые средства перекрестной проверки дают возможность одновременно проверять точность и стабильность построенных моделей;
  • средства прогнозирования можно интегрировать в любую точку жизненного цикла данных и в реальном времени отслеживать изменения скрытых тенденций.
  • В настоящее время разработано большое количество бесплатных СУБД. Наиболее популярными и распространенными среди них являются MySQL и PostgreSQL. Обе СУБД довольно динамично развиваются и повсеместно используются

    MySQL – это система управления реляционными базами данных. Сейчас это самый распространенный сервер баз данных в сети Интернет. MySQL – быстрая, но немного ограниченная СУБД. Хорошо подходит для проектов, не требующих сложных баз (например, для веб-проектов).

    PostgreSQL отвечает всем современным стандартам СУБД. Больше подходит для серьезных проектов, требующих сложных баз данных. По скорости работы PostgreSQL уступает MySQL. Кроме того, администрирование PostgreSQL достаточно сложно.

    В небольших фирмах и компаниях, в которых нет необходимости использовать сервер и закупать дорогостоящие базы данных типа "клиент-сервер", применяются локальные (настольные) СУБД. Основными представителями таких СУБД являются Microsoft Access, Paradox, Visual FoxPro и dBase.

    Paradox и Access входят в офисные пакеты. СУБД Paradox, выпускаемая компанией Corel, входит в пакет WordPerfect Office. СУБД Access выпускается Microsoft и входит в состав MS Office.

    СУБД dBase IV и Visual Foxpro – самостоятельные программные продукты. Однако обе базы обладают схожими свойствами и возможностями, вполне достаточными для поддержки данных в небольших компаниях.

    8.3. Основные возможности баз данных на примере MS Access

    Microsoft Access в настоящее время является одной из самых популярных настольных систем управления базами данных. Отметим несколько причин такой популярности.

  • Высокая степень универсальности и продуманности пользовательского интерфейса, который рассчитан на работу с пользователями самой различной квалификации, делает MS Access особенно привлекательной в качестве средства решения задач организации и обработки данных для не имеющих опыта в профессиональном программировании специалистов. Возможности MS Access помогают специалистам создавать приложения для собственного пользования.
  • Богатый набор визуальных средств разработки, позволяющий пользователю постоянно видеть результаты своих действий и корректировать их, легок в усвоении и применении для конструирования и модифицирования объектов MS Access. Важным средством, облегчающим работу с MS Access для пользователей всех уровней, являются "шаблоны" и "мастера" – специальные программные надстройки, предназначенные для создания объектов базы данных в режиме последовательных диалогов. Работа в режиме конструктора предполагает более гибкое управление ресурсами и возможностями объектов СУБД.
  • Шаблоны баз данных можно использовать без изменений или настроить в соответствии с конкретными потребностями. Например, шаблоны базы данных помогают сформировать таблицы из имеющихся вариантов таблиц и предоставляют набор форм и отчетов, соответствующих создаваемому типу базы.

    При помощи мастеров можно создавать таблицы, запросы, формы и отчеты, основываясь на типовых решениях. Мастера ведут разработчика по шагам, высвечивая на экране вопросы и подсказывая, что необходимо сделать, или предлагая возможность выбора из имеющихся образцов. Используя мастер запросов, можно сконструировать простой запрос или запрос на основе главной и связанной таблиц. Мастер форм предлагает свободный выбор полей, отображаемых на форме. Кроме того, можно указать способ группировки и сортировки данных, а также включить в форму поля из нескольких таблиц или запросов, при условии, что заранее заданы отношения между этими таблицами и запросами. Мастер отчетов, подобно мастеру форм, создает отчет на основании ответов пользователя. Построенный таким образом отчет можно использовать без изменений или далее настроить в соответствии со своими требованиями.

    Конструкторы предназначены для создания объектов произвольной структуры. Конструктор ("построитель") выражений помогает быстро и без ошибок создать сложное выражение, используемое в критериях или в вычисляемых полях. Построитель выражений упрощает доступ к именам полей и элементов управления и ко многим встроенным функциям, доступным при создании выражений. С помощью построителя выражений можно выбирать готовые выражения для отображения номеров страниц, текущей даты и времени. Построитель выражений можно запустить из большинства мест, где выражения вводятся вручную, например, при задании свойств полей таблицы. Для запуска построителя выражений достаточно нажатия на кнопку Построить ().

  • В MS Access глубоко развиты возможности интеграции с другими программными продуктами, входящими в состав MS Office, а также с любыми программными продуктами, поддерживающими технологию OLE(Object Link Embedded).
  • Специфической особенностью СУБД Access является то, что вся информация, относящаяся к одной базе данных, хранится в едином неделимом файле, расширение которого .accdb. Такое решение удобно для непрофессиональных пользователей, поскольку обеспечивает простоту при переносе данных с одного рабочего места на другое. Следует отметить, что внутренняя организация данных в базе менялась от версии к версии, но фирма Microsoft поддерживает технологию конвертирования баз данных, созданных в ранних версиях MS Access (mdb-формат), в формат, используемый в более поздних версиях.
  • Обычному пользователю не обязательно знать устройство форм, отчетов, запросов и других объектов. Он работает не с конструкторами объектов базы данных, а с приложением. Создание законченного приложения – задача разработчика базы данных. Приложение может быть построено только с использованием объектов базы данных (форм, отчетов и т.д.), или же при конструировании приложения могут использоваться программные расширения – макрокоманды, записываемые в макросах, или модули, содержащие процедуры на языке VBA.
  • В MS Access 2007 при создании новой базы данных или при открытии базы данных, созданной ранее, на экране появляется область переходов (рис.8.3). В этой области доступны типы объектов, которые может содержать база данных Access, и конкретные объекты. Эта область используется в Access 2007 для выполнения большинства задач работы с объектами базы. В предлагаемом обзоре будут рассмотрены только Таблицы, Запросы, Формы, Отчеты, Макросы и Модули.
  • (рис 8.3) Типы объектов MS Access в области переходов

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

    Основные этапы разработки базы данных

    В процессе разработки конкретного программного приложения в среде MS Access можно выделить типичные этапы, относящиеся уже к непосредственному конструированию базы данных, которое выполняется после предварительного проектирования. Между перечисляемыми ниже этапами существуют обратные связи, подразумевающие возврат к более ранним шагам, исходя из вновь открывшихся обстоятельств, которые невозможно было заранее учесть или предвидеть.

    База данных MS Access является реляционной базой данных и состоит из множества взаимосвязанных таблиц, которые и представляют отношения. Столбцы таблицы отражают сведения, одинаковым образом характеризующие объекты реального мира, которые моделируются с использованием данной таблицы. Для каждого свойства выделяется отдельный столбец – поле таблицы. Строки таблицы содержат информацию об экземплярах реальных объектов и называются записями.

    Разработка и описание структур таблиц данных

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

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

    Далее на логическом уровне описываются структуры потоков информации в автоматизируемой предметной области, т. е. выделяются поля таблиц данных. Для задачи об оплате звонков по мобильным телефонам таблицы могут иметь следующие структуры. Таблица Тарифы будет содержать код и название тарифа, код и название услуги, стоимость услуги за единицу времени. Таблица Абоненты должна содержать характеристики абонентов, такие как Код абонента, Номер телефона, ФИО, Код тарифа. Наконец, таблица Звонки должна содержать Код звонка, Номер телефона звонившего (первого абонента), Номер телефона второго абонента, Код услуги, Дата и продолжительность разговора.

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

    После выполненного проектирования будущих таблиц необходимо выполнить описание структур таблиц средствами СУБД. Это можно сделать в режиме конструктора. Можно использовать встроенные шаблоны таблиц или списков SharePoint, например, шаблоны "Контакты", "Задачи", "Вопросы" и "События". Если имена полей выбранного шаблона недостаточно информативны, их можно изменить. В режиме конструктора можно менять любые свойства полей, менять поля местами или добавлять новые поля. Использовать конструктор для модификации таблиц можно в любое время, даже после ввода данных в таблицу.

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

    Поля могут иметь любой используемый в офисных приложениях тип данных: Счетчик, Текстовый, Числовой, Дата/время, Логический, Поле объекта OLE. Возможно использование поля комментариев (Memo). MS Access автоматически накладывает условия на значения, определяемые типом поля, например, не допускается ввод текста в числовые поля. Установка типа данных одновременно определяет набор дополнительных атрибутов соответствующего поля. В каждом поле могут храниться данные только одного типа. Изменение типа поля после ввода данных в таблицу может привести к потере данных.

    (рис 8.4) Поля таблицы и их свойства

    Если поле используется в качестве первичного ключа таблицы, то оно может иметь любой тип данных. Часто применяется тип данных Счетчик, который гарантирует, что при вводе данных в это поле автоматически попадает номер записи в возрастающей последовательности. Можно задействовать в качестве первичного ключа определенный пользователем набор полей. МЕМО-поля и поля объекта OLE не могут быть первичными ключами. Во время ввода данных в поля первичного ключа MS Access автоматически следит за тем, чтобы в поля вводились уникальные или повторяющиеся значения в соответствии с заданным свойством Индексированное поле. Ключи не только идентифицируют записи таблиц, но и используются для установки межтабличных связей.

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

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

    При проектировании базы данных можно предусмотреть возможности работы с внешними данными. Это импорт данных и связь с внешними таблицами данных. В случае импорта происходит создание дубликата внешних данных во вновь создаваемой таблице. К импортируемым данным могут применяться все средства манипуляции данными, обеспечивается быстродействие при обращении к ним и независимость от исходного источника данных. Однако возникают проблемы, связанные с поддержкой актуальности и соответствия друг другу двух копий одной и той же информации. Eсли актуальность данных является критичным фактором, то необходимо использовать связь с внешними данными. В этом случае в базе данных появляется лишь ссылка на внешние источники данных, и работа с ними происходит с помощью специальных драйверов, которые традиционно входят в пакет MS Access. Это драйверы для работы с данными, созданными в форматах Paradox, Excel, dBase, FoxPRO, а также в текстовом (txt) и гипертекстовом (htm) форматах. При связывании с внешними данными естественно возникают ограничения возможностей по управлению структурой таблиц, а также зависимость от состояния внешнего источника, к которому осуществляется подключение.

    Установка связей между таблицами

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

    Механизм описания логических связей между таблицами в MS Access реализован в виде объекта, называемого Схемой данных. Схема данных (рис.8.5) представляет собой графическое изображение таблиц и их взаимосвязей. Если таблицы служат для физического хранения данных, то схема данных отражает связи между таблицами базы и возможности доступа к данным таблиц с использованием этих связей, т. е. доступ к данным на логическом уровне.

    (рис 8.5) Схема базы данных

    Для каждой таблицы, включенной в схему, отражены поля, выделен первичный ключ и связанные поля соединены линиями. Значки на концах линий указывают на тип отношения. На рис.8.5 все таблицы связаны наиболее часто встречающимся отношением "один-ко-многим". Все связываемые таблицы помещаются в окно схемы, при этом размещение всех таблиц базы данных в схеме не является обязательным.

    Следует отметить, что одно и то же поле некоторой таблицы может быть использовано для связи этой таблицы с несколькими таблицами. Установка связей между таблицами позволяет получать информацию из нескольких таблиц. Таблица является главной или подчиненной в зависимости от типа установленной связи. Поле связи в главной таблице обычно является первичным ключом таблицы или имеет индекс, тип которого – совпадения не допускаются, и таким образом однозначно определяет запись в этой таблице. Обычно в подчиненной таблице связываемое поле суть первичный ключ или его часть. Оно носит название внешнего ключа. Содержимое внешнего ключа подчиненной таблицы должно совпадать с первичным ключом или индексом главной таблицы. Очевидно, что связь может устанавливаться при совпадении типов полей главной и подчиненной таблиц. Если связующее поле таблицы не характеризует запись однозначно, то таблица не может выступать в качестве главной при связи по этому полю.

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

    MS Access автоматически следит за обеспечением целостности данных, если оно установлено (рис.8.6). К нарушению целостности данных приводят следующие действия:

  • добавление записей в подчиненную таблицу при отсутствии соответствующей записи в главной таблице. Например, добавляется запись об абоненте, но информация о выбранном им тарифе отсутствует в базе данных;
  • изменение поля связи в главной таблице, следствием которого будет нарушение связи с данными в подчиненной таблице. Например, если код тарифа в главной таблице будет изменен, то коды в полях связи записей главной и подчиненной таблиц не будут совпадать;
  • удаление записи из главной таблицы при наличии связанных записей в подчиненной таблице. Это приводит к появлению "осиротевших" записей подчиненной таблицы. Так нарушение целостности может возникнуть в случае удаления из таблицы Тарифы записи, соответствующей тарифу, используемому в таблице Абоненты или в таблице Контакты (рис.8.5).
  • Если установлено обеспечение целостности данных (рис.8.6), при изменении значения внешнего ключа записи подчиненной таблицы эта запись может быть сохранена лишь в том случае, если значение связующего поля присутствует в главной таблице. Удалить запись главной таблицы можно лишь в том случае, если эта запись не связана ни с одной записью любой из подчиненных таблиц.

    В случае необходимости обеспечения целостности данных в MS Access предусмотрено задание дополнительных свойств для устанавливаемой связи (рис.8.6), а именно каскадное обновление значений связанных полей и каскадное удаление связанных записей. Каскадное обновление предусматривает обновление внешнего ключа во всех записях подчиненных таблиц при изменении значения поля связи в главной таблице. Т. е. если изменился бы код услуги в таблице Услуги, то автоматически код услуги заменился бы на новый в связанных записях таблиц Звонки и Контакты. Каскадное удаление приводит к удалению всех записей подчиненных таблиц, связанных с удаляемой записью главной таблицы. Если бы удалялась запись таблицы Услуги, то автоматически удалились бы связанные записи таблиц Звонки и Контакты.

    (рис 8.6) Установка связей между таблицами

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

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

    Данные могут быть введены различными способами. Самый простой способ – это ввод данных вручную в режиме Таблицы. При подобном способе выполняется автоматический контроль на соответствие вводимых данных типам полей таблицы. Если данные введены некорректно, то продолжение работы невозможно до тех пор, пока не будет введено правильное значение. Можно копировать уже введенные строки таблицы и корректировать их после добавления в таблицу. Система контролирует допустимость использования повторяющихся значений в ключевых полях в соответствии с заданными свойствами полей.

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

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

    (рис 8.7) Возможности импорта данных

    Импорт данных можно выполнить, открыв файл необходимого типа (рис.8.8). Импорт возможен и через буфер обмена.

    (рис 8.8) Типы открываемых данных

    Если при вводе данных обнаружено, что структура таблицы спроектирована некорректно, например, имеются лишние поля или, наоборот, некоторые поля пропущены, задан неверный порядок полей или их тип и т.п., то ошибки можно исправить, перейдя в режим конструктора таблиц. Как уже говорилось, важным преимуществом интерфейса СУБД Access является гибкая система перехода от одного режима работы с объектом к другому режиму. Если таблица уже содержит данные, при изменении структуры таблицы они теряются только в исключительных случаях, например, при изменении типа поля. MS Access предупреждает об этом соответствующим сообщением.

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

    Поиск и выборка данных из базы данных

    К простейшим реализованным в MS Access способам обработки табличных данных относятся сортировка записей, поиск записи по условию, получение выборки записей таблицы, удовлетворяющей некоторому критерию (фильтрация данных таблицы).

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

    В MS Access поиск нужной информации может быть выполнен при помощи средств поиска, аналогичных средствам поиска в любом офисном приложении. Поиск ведется быстрее в индексированном поле. Для логических данных и данных типа Дата/Время удобно вести поиск с учетом формата полей. В этом случае образец поиска задается в том виде, в каком выводятся на экран данные, среди которых осуществляется поиск, а не в том виде, в каком они хранятся в базе данных. Например, если для дат установлен формат даты, высвечивающий названия месяцев, то, применив образец поиска "*окт", можно найти все записи, соответствующие октябрьским дням.

    Фильтрация является самым простым способом отбора информации. При помощи фильтрации можно видеть на экране не всю таблицу, а только часть записей, удовлетворяющих заданному условию. Фильтры применяются как в таблицах, так и в формах. Команды фильтрации показаны на рис.8.9.

    (рис 8.9) Команды фильтрации

    Пользователь может выделить фрагмент значения поля и использовать выделенный фрагмент в качестве условия фильтрации, может отфильтровать отдельные значения поля или задать условие отбора с применением логических операций. Если пользователь не владеет записью логических функций, можно воспользоваться бланком фильтра, задание условий на вкладках которого равносильно применению логических функций И/ИЛИ (рис.8.10).

    (рис 8.10) Возможности фильтрации данных и бланк фильтра

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

    (рис 8.11) Бланк расширенного фильтра

    Однако этих возможностей недостаточно для задач обработки данных, которые возникают в реальных приложениях. Для их решения применяется инструментарий запросов к базе данных. Запросы в MS Access различаются по выполняемым функциям: запросы на выборку данных или изменение данных, запросы на создание или удаление таблиц, группирующие запросы и т.д. В таблицах базы данных хранятся, как правило, лишь исходные данные, а все результаты, которые могут быть получены на их основании, вычисляются с помощью запросов. Такой подход позволяет уменьшить объем хранимой в базе данных информации.

    В запросах можно использовать данные одной таблицы или нескольких связанных таблиц. Если таблицы не связаны в схеме, их можно связать в запросе. Если таблицы связаны в схеме, то в запросе можно изменить свойства установленной связи. Например, в запросе Стоимость звонка установлена дополнительная связь между таблицами Абоненты и Контакты (рис.8.12).

    (рис 8.12) Окно конструктора запроса с добавленной связью

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

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

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

    В процессе создания запроса формируется структура запроса, т. е. указывается, какие поля источников данных запроса должны выводиться в колонках таблицы запроса; задаются порядок вывода записей и условия вывода записей. На рис.8.12 показано окно конструктора запроса, а на рис.8.13 – окно просмотра запроса в режиме таблицы.

    (рис 8.13) Запрос в режиме таблицы

    Колонки запроса могут содержать как поля источников данных запроса, так и выражения, построенные на основе этих полей (вычисляемые поля). В вычисляемых выражениях могут применяться встроенные функции. Поля данных могут переименовываться в запросе, например, поле нт на рис.8.12 и рис.8.13.

    Важными отличиями между фильтрами и запросами являются следующие:

  • фильтр всегда выводит все столбцы таблицы, а запрос – только те, которые явно указаны в бланке запроса;
  • запрос применяется ко всем данным таблицы-источника, а фильтр может накладываться на уже отфильтрованные данные.
  • Среди задач обработки данных достаточно типичной является проблема группировки данных по одному или нескольким признакам. Например, в рамках построенной базы данных об оплате звонков может быть поставлена задача определения суммарной стоимости звонков каждого абонента. Решить ее можно, построив запрос, содержащий групповые операции.

    (рис 8.14) Запрос с группировкой в режиме конструктора

    На рис.8.14 показано окно конструктора запроса, рассчитывающего суммарную стоимость звонков каждого абонента. При этом в бланк запроса включен запрос Стоимость звонков и таблица Абоненты, которые связаны в запросе по коду абонента. Операция суммирования значений нескольких записей запроса Стоимость звонков, осуществляемая для каждого абонента, определяется групповыми операциями Sum и Группировка, расположенными в одноименной строке. В процессе выполнения этого запроса суммируются стоимости звонков при постоянных значениях кода абонента и, соответственно, при постоянных значениях фамилии абонента, его имени и номера телефона. Результирующая запись – одна для каждого абонента (рис.8.15). При задании групповых операций доступны встроенные статистические функции.

    (рис 8.15) Запрос с группировкой в режиме таблицы

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

    (рис 8.16) Параметрический запрос

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

    (рис 8.17) Перекрестный запрос в режиме конструктора

    В приведенном на рис.8.17 запросе наименование услуги выбрано в качестве заголовков столбцов, а фамилия и имя абонента – в качестве заголовков строк. В результате перекрестный запрос отражает суммарное время звонков каждого абонента с разбивкой по характеру звонков (рис.8.18)

    (рис 8.18) Выполненный перекрестный запрос

    Мастер запросов Повторяющиеся записи позволяет установить, сколько раз встречаются те или иные значения в полях таблицы. Это тип запроса также относится к группирующим запросам. Для вывода повторов используется группирующая функция Count, а условие вывода записи – количество записей в группе превышает 1. Можно модифицировать запрос, чтобы искать любое количество повторений значений, например, превышающее 10.

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

    В завершение обзора средств построения запросов следует отметить, что помимо мощного и эффективного визуального конструктора запросов в MS Access доступен также и режим непосредственного ввода SQLвыражений. Данный режим существует параллельно с конструктором и мастерами запросов. Перейдя в режим SQL, можно просмотреть SQL-выражение, соответствующее построенному запросу. Пользователь, владеющий синтаксисом языка SQL, может модифицировать запрос в режиме SQL. Очевидно, что такая техника работы требует большей квалификации, но одновременно дает в руки разработчика мощный и универсальный аппарат управления данными.

    Конструирование отчетов

    MS Access, подобно другим офисным приложениям, предоставляет возможности распечатки информации. Можно распечатать таблицы, запросы или формы. В составе СУБД имеется средство подготовки отчетов по хранимой информации. Под отчетом традиционно понимается специальным образом структурированное представление хранимых данных, выводимое, как правило, на бумажный носитель. Отчеты являются исключительно средством вывода информации, тогда как экранные формы позволяют вводить новую и корректировать существующую информацию. Отчеты предоставляют средства оформления документов в соответствии с потребностями пользователя. Использование отчетов позволяет проводить многоуровневую сортировку и группировку данных, а также вычислять промежуточные и общие итоги.

    Разбивка отчета на страницы предполагает организацию вывода колонтитулов в начале и конце каждого листа, повтор головки таблицы на каждой странице, включение отчеркивающих линеек и т.д. Для нумерации страниц в отчетах применяются встроенные переменные Page и Pages, возвращающие соответственно номер текущей страницы отчета и общее количество страниц в нем. Возможно отображение системной даты и системного времени благодаря использованию функции Now().

    Идеология работы с отчетами допускает построение простых отчетов, работу с мастером, макетом и конструктором отчетов. Простейший отчет можно представить как табличный или отчет с полями, расположенными в столбец. Мастер отчетов помогает создать существенно более сложный и интересный для пользователей отчет в диалоговом режиме. Режим конструктора является средством работы со структурой отчета и позволяет выполнить более тонкую настройку отчета. Во время работы в этом режиме можно просматривать информацию в виде таблицы или в виде формы, одновременно изменять, если необходимо, данные, получая обновленную информацию в режиме предварительного просмотра отчета. Режим макета позволяет изменять структуру отчета, одновременно просматривая результаты. В этом режиме можно внести большинство изменений, обычно вносимых в конструкторе, и при этом видеть, как фактически выглядит форма или отчет.

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

    (рис 8.19) Суммарный отчет о стоимости звонков

    В отчете можно выполнить дополнительные вычисления с полями каждой записи. В приводимом на рис.8.19 фрагменте отчета вычисляется стоимость каждого звонка. Отчеты можно структурировать, задавая группировки по одному или нескольким полям. Для каждого уровня группировки можно предусмотреть вывод промежуточных итогов c применением обычных итоговых функций, например, функции Sum() для получения суммарного итога или функции Avg() для получения среднего арифметического. В примере рассчитанные стоимости звонков суммируются для каждого абонента, и информация о каждом абоненте выводится в алфавитном порядке.

    На начальном этапе разработки отчета рекомендуется воспользоваться услугами мастера отчетов, который в диалоговом режиме создаст походящий набросок отчета, избавляя пользователя от многих рутинных операций, например, таких как добавление полей и подписей к ним или выбор стиля оформления отчета. Далее полученный макет отчета в режиме конструктора приводится пользователем к желаемому виду. На рис.8.20 видна структура отчета. Он состоит из нескольких областей (разделов): заголовка отчета, верхнего колонтитула, области данных, нижнего колонтитула и примечания отчета. Разделы содержат элементы отчета, которые в режиме конструктора представляются в виде полей разных типов и являются объектами редактирования. Некоторые области, как в данном случае примечание отчета, могут быть пустыми. В области данных располагаются поля записей источника отчета с содержательной для пользователя информацией. Здесь могут быть размещены вычисляемые поля, в том числе поле, позволяющее нумеровать строки отчета. При выполнении группировок и/или сортировок данных в отчете появляются заголовки и примечания групп, которые содержат поля записей источника отчета, используемые как вспомогательные для выполнения сортировки и группировки. Эти области располагаются в порядке, установленном разработчиком отчета.

    (рис 8.20) Структура суммарного отчета

    Модификация элементов отчета, в том числе и разделов отчета, выполняется путем изменения их свойств. Вывод значений полей источника данных отчета основан на принципе наследования свойств: если при создании таблицы было определено некоторое свойство отображения поля, то установленный способ отображения используется в запросах, формах, отчетах до тех пор, пока свойство не будет переопределено явным образом в окне свойств соответствующего объекта. Например, в таблице Контакты тип поля Стоимость единицы был определен как Денежный, поэтому в отчете значения этого поля отображаются с двумя знаками после запятой и с указанием валюты.

    Можно добавлять новые элементы к отчету, используя панель элементов или удалять включенные в отчет элементы. Возможно перемещение элементов отчета между разделами отчета.

    Конструирование экранных форм для работы с данными

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

    Использование экранных форм для ввода данных обуславливается в первую очередь тем, что количество полей в таблице может оказаться достаточно большим и вводить информацию в подобную таблицу будет технически неудобно. При вводе данных непосредственно в таблицу базы данных возможны ошибки, связанные с внесением данных не в те поля или не в те записи таблицы. Может случиться так, что пользователь должен вводить данные одновременно в несколько таблиц, т. к. таблицы связаны в базе, и отсутствие данных в главной таблице приведет к невозможности ввода данных в подчиненную таблицу. Более того, система ввода/вывода должна быть организована в виде, максимально приближенном к традиционным формам представления информации для конкретной задачи. Часто требуется обеспечить разделение доступа или ограничить доступ к некоторым данным для различных категорий пользователей. Все перечисленное можно реализовать при помощи экранных форм.

    Формы являются основными средствами создания интерфейса пользователя – именно через формы можно управлять выполнением всего спектра задач приложения и автоматизировать действия пользователя.

    Для создания формы можно воспользоваться возможностями построения простых форм (табличная или форма "в столбец") или мастером форм либо разработать форму в режиме конструктора. Выбор способа создания формы зависит от квалификации пользователя и сложности разрабатываемой формы. Весьма плодотворным также оказывается комбинированный подход: сначала используется мастер формы, а затем полученная форма дорабатывается в режиме конструктора. Режим макета позволяет модифицировать структуру формы и одновременно видеть измененное представление данных. При любом способе создания формы для нее, прежде всего, определяется источник данных – таблица или запрос. Если форма основана на запросе, то он автоматически выполняется при открытии формы.

    К числу важных достоинств MS Access относится то, что работа с экранными формами универсальна и подобна работе с отчетами. Режим конструирования экранной формы аналогичен режиму конструктора отчета. Структура формы ориентирована на возможности представления табличных данных. Форма состоит из разделов, основные из которых – заголовок, примечание формы и область данных. Именно в области данных отображается информация, отличающая одну запись от другой, т. е. различные значения свойств объектов реального мира. Процесс проектирования формы в среде MS Access сводится к добавлению управляющих элементов и изменению их свойств. Можно добавить такие элементы управления, как надпись, поле, кнопка, флажок, переключатель, список, набор вкладок и др. (элементы управления показаны на рис.8.21). Помимо этого к форме можно подключать дополнительные элементы управления ActiveX, что значительно расширяет возможности представления данных. Каждый элемент управления обладает своим набором свойств, изменение которых приводит к изменению его вида и поведения, например, можно менять цвет, шрифт, изменять размеры элемента и т.п. Сама форма и ее разделы также рассматриваются как элементы управления и обладают настраиваемыми наборами свойств. Источником вычисляемого элемента, размещаемого в форме, является расчетная формула, построенная по правилам формирования выражений. Для упрощения записи выражений можно воспользоваться Построителем выражений.

    (рис 8.21) Панель элементов управления формы

    На рис.8.22 показана составная форма Абоненты, которая содержит командные кнопки для вызова двух других форм. Основная форма Абоненты построена на многотабличном запросе, и данные, высвечиваемые в этой форме, организованы в соответствии с главной таблицей Абоненты. Верхняя часть формы показывает информацию о некотором абоненте. Подчиненная форма Звонки отображает в табличном виде информацию о звонках выбранного абонента. Перемещение в форме Абоненты возможно по абонентам или по звонкам. При переходе к следующему абоненту изменяются строки формы Звонки, в которые выводится информация, относящаяся уже к другому абоненту.

    Нажатие на кнопку Новый звонок вызывает загрузку формы, которая высвечивает данные только по выбранному абоненту, на что указывает выполняемая в форме фильтрация (рис.8.22). Это достигается за счет того, что MS Access позволяет отображать в объекте базы, вновь загружаемом при помощи командной кнопки, или все отобранные в запросе записи, или записи, которые относятся к субъекту, выбранному в основной форме. По сути, из единой формы Абоненты реализовано управление данными, находящимися в системе взаимосвязанных таблиц. Структура формы Новый звонок соответствует структуре таблицы Звонки. Но можно построить форму, в которой поля таблицы будут расположены в любом порядке.

    (рис 8.22) Составная форма

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

    Через форму довольно просто вносить изменения в данные базового источника. Следует отметить, что если источником данных формы является многотабличный запрос, то могут модифицироваться сразу несколько таблиц. Изменения в главной форме вызывают модификацию полей не только главной, но и подчиненной таблицы, если изменяемые поля связаны друг с другом и предполагается каскадное обновление данных.

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

    В форме операции поиска и сортировки можно выполнять в основном теми же способами, что и в таблицах. Способы фильтрации в форме совпадают с аналогичными возможностями для таблиц.

    MS Access позволяет создавать формы в виде сводных таблиц или сводных диаграмм, которые строятся абсолютно аналогично построению этих объектов в MS Excel. Доступны те же типы диаграмм, что и в MS Excel.

    Создание пользовательского приложения

    Экранные формы часто применяются для создания приложения, работа с которым предполагает различные способы работы с базой. Диспетчер кнопочных форм обеспечивает быструю и гибкую разработку внешнего интерфейса системы (по сути, разработку приложения) определяющего перечень основных режимов работы с созданной базой данных и их иерархию. При этом создается основная форма (рис.8.23), которая в MS Access носит название Главная кнопочная форма. Она содержит командные кнопки, нажатие на которые открывает формы или отчеты для просмотра информации в разных разрезах, фильтрует выводимые на экран данные и прочее. Во время загрузки очередного объекта происходит передача данных между объектами базы, например, очередная вызванная форма может использовать данные, отобранные во время работы вызвавшей ее формы.

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

    На рис.8.23 отображена главная кнопочная форма, имеющая первый уровень иерархии. Нажатие на кнопки Просмотр форм или Просмотр отчетов высвечивает кнопочные формы второго уровня, которые содержат названия вызываемых форм или отчетов соответственно (рис.8.24). Нажатие на каждую из кнопок высвечивает выбранную форму или отчет. Возможен возврат на предыдущий уровень иерархии и выход из формы с закрытием приложения. MS Access.

    (рис 8.23) Главная кнопочная форма (рис 8.24) Страница кнопочной формы

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

    (рис 8.25) Таблица элементов кнопочных форм

    Организация защиты данных в СУБД MS Access

    MS Access обеспечивает два традиционных способа защиты базы данных. Простейший способ защиты – это установка пароля, требуемого при открытии базы данных. Тогда при каждом открытии базы данных будет появляться диалоговое окно, в котором требуется ввести пароль. Этот способ достаточно надежен, т. к. MS Access шифрует пароль, и к нему нет прямого доступа при чтении файла базы данных. После открытия базы данных все ее объекты становятся полностью доступными в течение сеанса работы с базой. Можно считать эту меру защиты достаточной для баз данных, которые совместно используются небольшой группой пользователей или установлены на автономном компьютере.

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

    По умолчанию в базе определены две группы пользователей: Admins и Users. Для каждой группы задаются разрешения на доступ к объектам базы данных (права доступа). Члены группы Admins, как правило, имеют разрешения на доступ ко всем объектам базы данных. Поскольку группа Users объединяет всех пользователей, имеет смысл ей присваивать некоторый минимальный набор прав. Можно создавать собственные учетные записи групп, предоставляя этим группам соответствующие разрешения и добавляя в группы пользователей, исходя из функциональной специфики предметной области. Один и тот же пользователь может являться членом различных групп.

    Как группам, так и пользователям предоставляются разрешения на доступ, определяющие допустимые для них действия по отношению к каждому объекту базы данных. Набор возможных прав, очевидно, определяется спецификой объекта. При запуске MS Access от пользователей требуется идентифицировать себя и ввести пароль.

    Дополнительные режимы работы с базой данных

    К этим возможностям относятся создание резервной копии, восстановление и сжатие баз данных, документирование объектов базы данных.

    При практической эксплуатации базы данных MS Access возникает необходимость общего копирования БД, восстановления БД после сбоев, сжатия БД и наконец, репликации – режима получения текущей копии с возможностью эксплуатации ее на переносном или изолированном компьютере с последующей синхронизацией существующих копий БД.

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

    Восстановление базы используется после нарушения целостности файла БД, а преобразование базы необходимо для работы с базами, созданными в более ранних версиях MS Access.

    Разделение базы данных на клиентское и серверное приложения может потребоваться по различным причинам. Серверная база данных содержит таблицы и хранится на файловом сервере. В клиентской базе данных, которая содержит ссылки на таблицы серверной базы данных, хранятся все формы, запросы, отчеты, макросы и модули. Клиентская база данных устанавливается на рабочих станциях пользователей. Такое разделение обеспечивает наиболее эффективный способ эксплуатации системы:

  • пользователи не могут вносить изменения в структуру таблиц и их взаимосвязи;
  • когда пользователь открывает форму, эта форма открывается локально на компьютере пользователя, а не передается по сети. По сети передаются только данные в связанных таблицах.
  • Разделить базу данных можно вручную или при помощи служебной программы "Разделитель баз данных".

    Средства макропрограммирования в MS Access

    В ответ на определенные действия пользователя могут выполняться процедуры обработки событий, например, нажатие на некоторую кнопку формы может инициировать автоматическое создание новой таблицы определенной структуры. Основной набор средств MS Access, рассмотренный выше, ориентирован на пользователей, не владеющих языками программирования. Пользователи, знакомые с языками программирования, могут использовать макросы и модули (процедуры на языке Visual Basic for Application, VBA). С их помощью можно существенно расширить функциональные возможности создаваемого приложения и настроить его на нужды конечных пользователей.

    В MS Word и MS Excel имеется средство автоматической записи макросов – макрорекордер. После включения записи макроса можно создать процедуру, выполнив необходимые действия и остановив запись макроса. Все действия пользователя, выполненные между включением и выключением записи макроса, преобразуются в текст процедуры VBA. Этот текст затем можно просмотреть и отредактировать с помощью редактора VBA. Выполнение записанной процедуры равносильно повторению действий пользователя. В MS Access средств автоматической записи макросов нет. Автоматическая генерация кода VBA происходит только при создании объектов в режиме мастера.

    Макрос в MS Access представляет собой структуру, состоящую из одной или нескольких макрокоманд СУБД Access, которые выполняются либо последовательно, либо в порядке, определенном некоторыми заданными в макросе условиями. С помощью макросов можно выполнить практически все действия с объектами MS Access. Основное назначение макросов – это создание интерфейса приложения. С помощью макросов можно расположить на экране меню и панели инструментов, удобные для приложения.

    Макросы легко создавать – для этого не нужно изучать синтаксис языка программирования, а достаточно знать лишь основные приемы работы в MS Access. Однако использование макросов имеет и некоторые недостатки, а именно: возможности макрокоманд ограничены по сравнению с возможностями языка VBA; процедуры VBA выполняются быстрее; макросы являются объектами, существующими отдельно от форм и отчетов, в которых они используются, и поэтому при увеличении количества макросов их поддержка становится достаточно трудоемкой. Тем не менее, во многих случаях использование макросов вполне оправдано, т. к. это существенно упрощает и ускоряет разработку приложения. С помощью макросов можно создавать небольшие однопользовательские приложения, однако если скорость работы приложения критична, лучше применять процедуры VBA.

    Если количество макросов оказалось очень большим, можно объединить несколько макросов в группу макросов. Рекомендуется, например, все макросы, связанные с событиями в форме или отчете, объединять в группу макросов, соответствующую данной форме или отчету соответственно. При этом каждый макрос группы должен иметь свое имя, а имя объединенного объекта будет являться именем группы макросов.

    Работа по созданию и запуску макросов выполняется так же, как и работа с любым объектом базы. Отличия определяются типом объекта. Макрос создается и редактируется в режиме конструктора. В окне конструктора выбирается макрокоманда из списка всех макрокоманд. Макрокоманды можно сгруппировать по категориям: работа с данными; выполнение; работа с объектами; импорт/экспорт данных и объектов, настройка интерфейса приложения. В категорию работы с данными входит набор макрокоманд, обеспечивающих отбор данных (фильтрация записей в формах и таблицах), перемещение по данным и элементам управления, а также обновление данных в активных формах, таблицах и запросах. К категории выполнения можно отнести выполнение команд, макросов, процедур или запросов, запуск другого приложения, прерывание выполнения и завершение работы в MS Access. Для настройки интерфейса можно вывести на экран или, наоборот, скрыть встроенную или пользовательскую панель инструментов, подать звуковой сигнал и т. п.

    Наиболее обширная категория макрокоманд – это макрокоманды работы с объектами. MS Access состоит из нескольких компонентов, каждый из которых предоставляет собственный набор объектов, информация о которых содержится в библиотеках объектов. Например, библиотека объектов MS Access хранит информацию об объектах, предназначенных для отображения данных, для работы с приложением. В частности, это объекты формы или отчета. Макрокоманды для этих объектов позволяют в первую очередь выполнять копирование, переименование и сохранение объектов. Библиотека объектов DAO (Data Access Objects) предоставляет объекты доступа к данным, которые позволяют манипулировать данными из Visual Basic, т. е. управлять базами данных из любого приложения, поддерживающего VBA.

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

    Выполнение макроса инициируется нажатием на кнопку Выполнить .

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

    Наиболее часто макросы используются в приложении MS Access для обработки событий объектов. События – это любые действия, распознаваемые объектом, которые происходят в результате манипуляций пользователя, выполнения инструкций VBA или генерируются системой. Примером события является вывод формы на экран или нажатие кнопки. Для каждого объекта базы определены свои собственные события, перечень которых расположен на вкладке События диалогового окна свойств объекта (рис.8.27).

    (рис 8.26) Группа Макрос вкладки Работа с базами данных (рис 8.27) События элемента Кнопка

    Каждому событию можно назначить макрос или процедуру VBA, которые будут автоматически выполняться в ответ на произошедшее событие. Практически программирование в MS Access сводится к написанию макросов или процедур, обрабатывающих события, т. е. программируется реакция объектов на события.

    В форме Звонки абонентов (рис.8.28) размещена дополнительная командная кнопка Добавить звонок (имя кнопки n_call), при нажатии на которую открывается форма Новый звонок в режиме добавления данных. При этом открытие формы сопровождается звуковым сигналом. Для выполнения перечисленных действий создан макрос new_call (рис.8.29) из двух макрокоманд – открытия формы и подачи сигнала. Аргументы макрокоманды Открыть форму указывают на имя открываемой формы Новый звонок и режим данных Добавление. Указанный макрос выполняется автоматически при возникновении события Нажатие кнопки (рис.8.27).

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

    (рис 8.28) Модифицированная составная форма (рис 8.29) Макрос открытия формы

    Разработка программных приложений для MS Access

    Для программирования в MS Access используется процедурный язык Visual Basic for Applications (VBA) с добавлением объектных расширений и элементов SQL (более подробно о языке VBA см. раздел 3). Язык программирования VBA является общим инструментом для всех приложений MS Office, позволяющим решать любые задачи программирования, начиная от автоматизации действий конкретного пользователя и кончая разработкой полномасштабных приложений, использующих MS Office в качестве среды разработки.

    Код VBA в приложении MS Access содержится в модулях. Модули являются такими же объектами MS Access, как таблицы, запросы, формы, отчеты и макросы. Основное содержание модулей – это процедуры на языке VBA. Модули, в отличие от макросов, являются более мощным средством разработки программных расширений в среде MS Access. Применение модулей требует от пользователя навыков программирования, а также знания основных принципов объектно-ориентированного программирования.

    Если в базе данных существуют макросы, то они могут быть преобразованы в процедуры на VBA. Это касается как макросов, связанных с событиями в формах и отчетах, так и общих макросов, не связанных с формами и отчетами. Все они преобразуются в отдельные модули, причем макросы, выполняемые при возникновении событий, преобразуются в процедуры обработки событий. На рис.8.30 приведен преобразованный в процедуру макрос new_call, показанный на рис.8.29. На вкладке События для кнопки n_call (рис.8.27) в строке, соответствующей событию Нажатие кнопки, вместо названия макроса будет находиться текст [Процедура обработки событий], означающий вызов процедуры нажатия на кнопку n_call.

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

    (рис 8.30) Макрос, преобразованный в процедуру

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

    Важнейшей частью объектно-ориентированного программирования в MS Access является программирование доступа к данным, которое возможно благодаря использованию объектов DАО. С помощью этих объектов, их свойств и методов можно создавать базу данных, изменять структуру таблиц и запросов, устанавливать и изменять связи между данными, а также извлекать, добавлять, удалять и изменять данные в базе MS Access. Объекты DAO позволяют взаимодействовать с базами данных из любых приложений MS Office или работать с данными файлов разных форматов (например, MS Excel, dBase или Paradox), подключаться к базам данных на удаленных серверах и разрабатывать клиент-серверные приложения, используя источники данных ODBC.

    Вопросы для самопроверки

  • Каковы основные функции баз данных?
  • Какие существуют типы организации баз данных?
  • Как организована реляционная база данных?
  • Перечислите объекты базы данных.
  • Укажите различия между таблицами и запросами, между формами и отчетами.
  • Какие объекты базы данных используются для хранения данных?
  • Что такое поле таблицы?
  • Понятие записи таблицы.
  • Какие типы полей допустимы в таблицах базы данных?
  • Какие свойства полей позволяют ограничить ввод данных?
  • В каких целях используются экранные формы?
  • Перечислите способы создания форм.
  • Какие разделы может содержать форма?
  • Как заблокировать внесение изменений в поля формы?
  • Какие способы защиты данных существуют в настольных СУБД (на примере Access)?
  • Страницы:

    8.1. Общая характеристика баз данных

    База данных – это совокупность структурированных и взаимосвязанных данных, относящихся к определенной предметной области.

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

    К основным функциям СУБД относятся следующие:

  • физическое размещение в памяти данных и их описаний;
  • поддержка баз данных в актуальном состоянии;
  • механизмы поиска запрашиваемых данных;
  • доступ к данным при одновременном запросе одних и тех же данных многими пользователями (прикладными программами);
  • способы обеспечения защиты данных от некорректных обновлений и/или несанкционированного доступа.
  • Основная особенность СУБД – это наличие процедур для ввода и хранения не только самих данных, но и описаний их структуры.

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

    СУБД использует следующие модели и описания:

  • инфологическую;
  • даталогическую;
  • физическую.
  • Трехуровневая архитектура (инфологический, даталогический и физический уровни) позволяет обеспечить независимость хранимых данных от использующих их программ.

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

    Описание, создаваемое разработчиками базы данных по инфологической модели данных, называют даталогической моделью данных. Конечным результатом даталогического проектирования является описание логической структуры базы данных на ЯОД – языке описания данных конкретной СУБД. При создании даталогической модели данных обеспечивается однозначное соответствие между конструкциями языка описания данных и графическими обозначениями информационных единиц и связей между ними.

    В основе каждой СУБД лежит концепция модели данных, то есть некоторой абстракции представления данных. Изначально были успешными две конкурирующие модели – иерархическая и сетевая. Иерархическая БД состоит из упорядоченного набора деревьев. Корпорация IBM разработала и внедрила язык описания данных DL/I (Data Language One), который моделировал данные в иерархической форме (представление данных в форме деревьев). Эта модель была разработана совместно с промышленными предприятиями и предназначалась для хранения и поддержки данных, которые иерархически связаны между собой, например, сметы материалов и списки деталей. Типичным представителем иерархической СУБД является СУБД IMS (Information Management System) компании IBM, первая версия которой появилась в 1968 г.

    На рис.8.1 показан пример схемы иерархической БД. Тип записи ФАКУЛЬТЕТ является предком (родительской или исходной записью) для типов записей КАФЕДРЫ и ДЕКАНАТ, а записи КАФЕДРЫ и ДЕКАНАТ – потомки (дочерние или порожденные записи) для записи ФАКУЛЬТЕТ.

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

    (рис 8.1) Схема иерархической модели базы данных

    В терминологии IMS вместо термина "запись" использовался термин "сегмент", а под термином "запись базы данных" понималось все дерево сегментов. В 1970 году группа CODASYL, которая разрабатывала стандарты для языка COBOL, создала модель под названием DBTG (Data Base Task Group, группа задач базы данных). Модель DBTG была готова к представлению как иерархических, так и сетевых данных. Однако эта модель была очень сложной, поэтому не имела большого успеха.

    Типичным представителем систем, основанных на сетевой модели данных, является СУБД IDMS (Integrated Database Management System), разработанная компанией Cullinet Software, Inc. Сетевой подход к организации данных является расширением иерархического подхода. Как и в иерархической модели, связи ведут от родительской записи к дочерней, но на этот раз поддерживается множественное наследование. В сетевой модели допускается несколько исходных записей для одной порожденной записи наряду с возможностью наличия записей без исходной записи (рис.8.2). Другими словами, в сетевой модели любая запись может участвовать в нескольких отношениях предок-потомок. Сетевая модель – неориентированный граф.

    (рис 8.2) Схема сетевой модели базы данных

    Большинство применяемых сегодня баз данных основаны на реляционной модели. Основная идея реляционной модели – представить произвольную структуру данных в виде двумерных таблиц. Наиболее распространенной в настоящее время настольной реляционной базой данных является MS Access, пример которой рассматривается в разделе 6.3.3.

    Реляционная модель впервые была предложена Э.Ф. Коддом (E.F. Codd) в 1970 году. Понятие модели данных, введенное Коддом, впоследствии развил Кристофер Дейт. Согласно Дейту, реляционная модель состоит из трех частей, описывающих разные аспекты реляционного подхода: структурной части, манипуляционной части и целостной части. Данные хранятся в таблицах. Столбцы таблиц называются полями, а строки – записями. В каждом поле может храниться информация только одного типа. Запросы предназначены для манипулирования данными, содержащимися в базе данных.

    Кодд определил правила реляционной модели, которые получили название "12 правил Кодда". Позже Кодд добавил "нулевое" правило.

  • Реляционная СУБД должна быть способна полностью управлять базой данных, используя связи между данными.
  • Информационное правило: вся информация в реляционной БД, включая имена таблиц и столбцов, должна определяться строго как значения таблиц.
  • Гарантированный доступ: любое значение БД должно быть гарантированно доступным через комбинацию имени таблицы, первичный ключ и имя столбца.
  • Поддержка нулевого значения: СУБД должна уметь работать с нулевыми (пустыми) значениями. Нулевое значение – это неизвестное, независимое, неприменимое значение, в отличие от значений по умолчанию и обычных значений.
  • Активный, оперативный реляционный каталог – описание БД и ее содержимое – должны быть определены на логическом уровне через таблицы, к которым можно применять запросы, используя DML (Data Manipulation Language – язык манипулирования данными).
  • Исчерпывающее подмножество языка данных: по крайней мере, один из поддерживаемых языков должен иметь четко определенный синтаксис и быть самодостаточным. Он должен поддерживать определение данных и манипулирование ими, правила целостности, авторизацию и транзакции.
  • Правило обновления представлений: все представления, теоретически обновляемые, могут быть обновлены через систему.
  • Вставка, обновление и удаление: СУБД поддерживает не только запрос данных, но и вставку, обновление и удаление.
  • Физическая независимость данных: логика программ-приложений остается прежней при изменении физических методов доступа к данным и структур хранения.
  • Логическая независимость данных: логика программ-приложений остается прежней, в пределах разумного, при изменении структур таблиц.
  • Независимость целостности: язык БД должен быть способен определять ограничения целостности. Они должны быть доступны из оперативного каталога, и не должно быть способа их обойти.
  • Независимость распределения: перенос базы данных с одного компьютера на другой компьютер не должен оказывать влияния на запросы программ-приложений. Реляционная СУБД не должна зависеть от потребностей конкретного клиента.
  • Согласованность языков всех уровней: низкоуровневый язык доступа к данным не должен игнорировать правила безопасности и целостности, поддерживаемые языком более высокого уровня.
  • Предложив реляционную модель данных, Э.Ф. Кодд создал и инструмент для удобной работы с отношениями – реляционную алгебру – формальную систему манипулирования отношениями, основными операциями которой являются проекция, соединение, пересечение и объединение.

    Реляционное исчисление – это еще одна формальная система, которая манипулирует отношениями. Реляционное исчисление основано на логике первого порядка. Так же как и выражения реляционной алгебры, формулы реляционного исчисления определяются над отношениями реляционных баз данных, и результатом вычисления также является отношение.

    Реляционная алгебра и реляционное исчисление имеют одинаковую выражающую мощность; т. е. все запросы, которые можно сформулировать с помощью реляционной алгебры, могут быть также сформулированы с помощью реляционного исчисления и наоборот. Первым это доказал Э. Ф. Кодд в 1972 году. Это доказательство основано на алгоритме, по которому произвольное выражение реляционного исчисления может быть сокращено до семантически эквивалентного выражения реляционной алгебры. Алгоритм носит название "алгоритм редукции Кодда".

    Реляционные базы данных имеют следующие специфические особенности.

  • Для каждого поля таблицы базы данных определен тип данных, таким образом нельзя в одно поле разных записей вводить данные разных типов.
  • СУБД позволяют не только вводить данные в таблицы, но и контролировать правильность вводимых данных. Имеются в виду не только ограничения по типу данных, но и контроль допустимых значений, количество вводимых знаков и т.п. СУБД не позволит сохранить в записи те данные, которые не удовлетворяют заданным правилам.
  • Таблицы баз данных могут включать в себя количество записей, исчисляемое сотнями тысяч, и при этом СУБД обеспечивает удобные способы извлечения нужной информации из этого множества записей.
  • Все данные хранятся, независимо от их структуры и содержания, в одном файле, и доступ к этим данным осуществляется постранично, не превышая ограничений на ресурсы компьютера.
  • Можно устанавливать связи между таблицами и затем при помощи запросов совместно использовать данные разных таблиц. Данные, полученные в результате запроса, представляются также в виде таблицы.
  • Запрос на выборку может быть обращен к одной или нескольким таблицам одновременно. Данные в выборке являются динамическими, т. е. при повторном запуске запроса по измененным данным, выборка изменяется.
  • Благодаря установке взаимосвязей между отдельными таблицами удается избежать ненужного дублирования данных, сэкономить память компьютера, а также увеличить скорость обработки информации.
  • Большинство баз данных может поддерживать одновременную работу с базой данных нескольких пользователей, при этом все пользователи гарантированно будут работать с актуальными данными.
  • По сравнению с другими прикладными пакетами в базах данных имеется развитая система защиты от несанкционированного доступа, которая предоставляет, помимо парольной защиты файла, возможность каждому пользователю или группе пользователей видеть и изменять только те объекты, к которым пользователи имеют право доступа.
  • При проектировании реляционной базы данных большое внимание уделяется процессу нормализации таблиц. Целью нормализации является создание такого проекта базы данных, где будет исключена избыточность информации, т. е. каждый квант информации будет сохраняться лишь в одном месте. Основное назначение нормализации – исключение возможной противоречивости хранимых данных и экономия памяти. Пренебрежение нормализацией делает структуру базы данных запутанной, а саму базу – ненадежной в работе.

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

    Поле В таблицы функционально зависит от поля А той же таблицы в том и только в том случае, когда в любой заданный момент времени для каждого из различных значений поля А обязательно существует только одно из различных значений поля В. Отметим, что здесь допускается, что поля А и В могут быть составными.

    Поле В находится в полной функциональной зависимости от составного поля А, если оно функционально зависит от А и не зависит функционально от любого подмножества поля А.

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

    Процесс нормализации представляет собой последовательное преобразование исходной БД к нормализованной базе данных путем поэтапного приведения таблиц к нормальным формам (НФ). При этом каждая следующая НФ обязательно включает в себя предыдущую, что позволяет разбить процесс на этапы и производить его однократно, не возвращаясь к предыдущим этапам. Всего в реляционной теории насчитывается 6 нормальных форм: первая нормальная форма (1НФ), вторая нормальная форма (2НФ), третья нормальная форма (3НФ), нормальная форма Бойса-Кодда (НФБК), четвертая нормальная форма (4НФ) и пятая нормальная форма (5НФ).

    По существу, таблица находится в 2НФ, если она находится в 1НФ и удовлетворяет, кроме того, некоторым дополнительным условиям. Таблица находится в 3НФ, если она находится в 2НФ и, помимо этого, удовлетворяет другим дополнительным условиям и т.д.

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

    Таблица находится во второй нормальной форме (2НФ), если она удовлетворяет определению 1НФ и все ее поля, не входящие в первичный ключ, связаны полной функциональной зависимостью с первичным ключом.

    Таблица находится в третьей нормальной форме (3НФ), если она удовлетворяет определению 2НФ и ни одно из ее неключевых полей не зависит функционально от любого другого неключевого поля.

    Кодд и Бойс обосновали и предложили более строгое определение для 3НФ, которое учитывает, что в таблице может быть несколько ключей. Таблица находится в нормальной форме Бойса-Кодда (НФБК), если и только если любая функциональная зависимость между ее полями сводится к полной функциональной зависимости от возможного ключа.

    В следующих нормальных формах (4НФ и 5НФ) учитываются не только функциональные, но и многозначные зависимости между полями таблицы.

    В настоящее время практически каждый производитель СУБД предлагает собственный программный продукт автоматизированного проектирования. Это Oracle Designer (Oracle), Power Desinger (Sybase) и другие. Демонстрационные версии данных программных продуктов можно загрузить с соответствующих сайтов (www.oracle.com, www.sybase.com). Кроме того, для автоматизированного проектирования представлены решения фирм, не производящих СУБД. Наиболее распространенными являются программные продукты фирмы AllFusion – AllFusion ERwin Data Modeler и AllFusion Process Modeler (ранее – BPwin) (см. www.interface.ru).

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

    Выделяют следующие разновидности языков реляционной алгебры:

  • dBASe-подобные языки приближены к языкам структурного программирования. Эти языки обеспечивают создание интерфейса пользователя и типовые операции обработки данных;
  • графические реляционные языки, ориентированные на конечных пользователей;
  • SQL-подобные языки запросов, реализованные в большинстве многопользовательских и распределенных систем управления базами данных.
  • dBASe-подобные языки используют базы данных dBASe, Paradox, FoxPro, Clipper, Rbase и др.

    Типичным представителем графического реляционного языка является язык QBE (Query By Example), реализованный в среде электронных таблиц, в различных базах данных, например, в MS Access, в пакете Microsoft Query. Этот язык относится к языкам манипулирования данными и имеет простейшие синтаксические конструкции, легко осваиваемые пользователями-непрограммистами.

    SQL (Structured Query Language) применяется при работе с реляционными базами данных в современных СУБД (ORACLE, dBASE IY, dBASE Y, Paradox, Access и др.). Для отдельных СУБД синтаксис версий языка SQL может различаться.

    Язык SQL стал стандартом языков запросов для работы с реляционными базами данных архитектуры "файл-сервер" и "клиент-сервер" и для управления распределенными базами данных. Это реляционно полный язык, предназначенный для работы с базами данных, создания запросов на выборку данных, для выполнения вычислений, для обеспечения целостности баз данных.

    8.2. Обзор существующих реляционных баз данных

    С появлением большого числа микрокомпьютеров был разработан ряд СУБД для персональных компьютеров. Наиболее успешной из них была dBase – продукт корпорации Ashton-Tate. Среди ранних персональных СУБД наиболее известны Rbase корпорации Microrim и Paradox от Borland.

    В настоящее время в мире используется достаточно большое количество универсальных промышленных СУБД. Среди них можно выделить трех несомненных лидеров (как по уровню развития технологий, так и по объему рынка – они вместе занимают более 90% мирового рынка СУБД). Это СУБД первого эшелона – Oracle, Microsoft SQL Server и IBM DB2. Список СУБД второго эшелона довольно велик, сюда относят такие СУБД, как Sybase, Informix, Ingress, Adabas, Interbase, Progress, Postgres, Cache, Linter, Firebird, Teradata и т.д.

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

    Локальными или настольными называют СУБД типа Access, Paradox и т. п. В них определен формат данных, который учитывает параллельное выполнение операций, возможность доступа к БД нескольких пользователей и т. д. Недостатки настольных баз данных становятся очевидными не сразу, а по мере увеличения количества данных и числа пользователей – снижается производительность и учащаются случаи сбоев.

    Для решения этих проблем была разработана технология "клиентсервер". В основе этой технологии лежит принцип централизации хранения и обработки данных: вся обработка и хранение данных полностью перекладывается на сервер; машина-клиент посылает запросы, а сервер их выполняет и посылает ответы клиенту.

    Рынок корпоративных серверных СУБД представлен Oracle, MS SQL, DB2, Sybase и InterBase. СУБД Oracle остается лидером на рынке хранилищ данных как в отношении доли рынка (48.6%), так и инноваций разработок.

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

    Разделение и сжатие данных в Oracle существенно оптимизирует работу СУБД:

  • сокращает время обработки запросов от минут до секунд;
  • позволяет осуществлять доступ к критической информации 24 часа в сутки, 7 дней в неделю;
  • позволяет управлять небольшими "порциями" данных;
  • дает возможность экономически эффективно использовать хранилища данных.
  • Приложение Oracle Total Recall, являющееся частью полного комплекса решений Oracle, в целях обеспечения безопасности баз данных позволяет сохранять исторические данные, обеспечивая эффективное и автоматическое хранение "изменений" данных для быстрого доступа к старым версиям. Oracle Database 11g помогает компаниям хранить данные в надежной и защищенной от искажений базе данных, оставляя их доступными для существующих приложений. Total Recall не требует внесения изменений в приложения или особых интерфейсов и обеспечивает оптимальное использование дискового пространства.

    В конце восьмидесятых годов Sybase разработала SQL Server и продала его Microsoft. Одним из преимуществ SQL Server является простота его применения, в частности, администрирования. Основным языком запросов является язык Transact-SQL, созданный совместно Microsoft и Sybase.

    Для обеспечения доступа к данным Microsoft SQL Server поддерживает ODBC (Open DataBase Connectivity – интерфейс взаимодействия приложений с СУБД). Система SQL Server 2008 позволяет обращаться к данным из любого приложения, разработанного с применением технологий Microsoft.NET и Visual Studio, или в пределах сервисно-ориентированной архитектуры и бизнес-процессов – через Microsoft BizTalk Server.

    SQL Server 2008 обеспечивает высокий уровень безопасности, надежности и масштабируемости для критически важных приложений. SQL поддерживает продукты сторонних компаний по управлению ключами и аппаратными модулями безопасности. Динамическое шифрование всей базы данных, файлов данных и файлов журналов не потребует никаких изменений в имеющихся приложениях.

    SQL Server 2008 позволяет основному и зеркальному серверу прозрачно устранять последствия ошибок на страницах данных, запрашивая свежую копию "подозрительной" страницы с зеркального сервера незаметно для приложений и конечных пользователей

    За счет применения сжатия данные хранятся более эффективно и занимают меньше места в хранилище. Сжатие также обеспечивает заметный прирост производительности на задачах, связанных с большим количеством операций ввода/вывода, как, например, при работе с хранилищами данных.

    SQL Server 2008 имеет развитые средства создания корпоративной отчетности, позволяя без труда создавать отчеты любого размера и сложности, а также организовывать общий доступ к ним. Предоставить нужные сведения также можно с помощью развертывания отчетов в Интернете.

    Средства упреждающей аналитики SQL Server 2008, основанные на мощном интеллектуальном анализе данных и тесно интегрированные с технологиями Microsoft BI (Microsoft Business Intelligence – бизнес-анализ в Microsoft), позволяют принимать взвешенные, обоснованные решения.

    К их числу относятся:

  • возможность оптимизировать прогнозирование за счет улучшенной поддержки временных рядов;
  • улучшенные структуры интеллектуального анализа позволяют накладывать ряд фильтров, оставляя только необходимую практическую информацию;
  • повышение информативности отчетов за счет увеличения детализации;
  • встроенная поддержка контрольных значений позволяет легко разделять данные на группы для подтверждения правильности прогноза;
  • новые средства перекрестной проверки дают возможность одновременно проверять точность и стабильность построенных моделей;
  • средства прогнозирования можно интегрировать в любую точку жизненного цикла данных и в реальном времени отслеживать изменения скрытых тенденций.
  • В настоящее время разработано большое количество бесплатных СУБД. Наиболее популярными и распространенными среди них являются MySQL и PostgreSQL. Обе СУБД довольно динамично развиваются и повсеместно используются

    MySQL – это система управления реляционными базами данных. Сейчас это самый распространенный сервер баз данных в сети Интернет. MySQL – быстрая, но немного ограниченная СУБД. Хорошо подходит для проектов, не требующих сложных баз (например, для веб-проектов).

    PostgreSQL отвечает всем современным стандартам СУБД. Больше подходит для серьезных проектов, требующих сложных баз данных. По скорости работы PostgreSQL уступает MySQL. Кроме того, администрирование PostgreSQL достаточно сложно.

    В небольших фирмах и компаниях, в которых нет необходимости использовать сервер и закупать дорогостоящие базы данных типа "клиент-сервер", применяются локальные (настольные) СУБД. Основными представителями таких СУБД являются Microsoft Access, Paradox, Visual FoxPro и dBase.

    Paradox и Access входят в офисные пакеты. СУБД Paradox, выпускаемая компанией Corel, входит в пакет WordPerfect Office. СУБД Access выпускается Microsoft и входит в состав MS Office.

    СУБД dBase IV и Visual Foxpro – самостоятельные программные продукты. Однако обе базы обладают схожими свойствами и возможностями, вполне достаточными для поддержки данных в небольших компаниях.

    8.3. Основные возможности баз данных на примере MS Access

    Microsoft Access в настоящее время является одной из самых популярных настольных систем управления базами данных. Отметим несколько причин такой популярности.

  • Высокая степень универсальности и продуманности пользовательского интерфейса, который рассчитан на работу с пользователями самой различной квалификации, делает MS Access особенно привлекательной в качестве средства решения задач организации и обработки данных для не имеющих опыта в профессиональном программировании специалистов. Возможности MS Access помогают специалистам создавать приложения для собственного пользования.
  • Богатый набор визуальных средств разработки, позволяющий пользователю постоянно видеть результаты своих действий и корректировать их, легок в усвоении и применении для конструирования и модифицирования объектов MS Access. Важным средством, облегчающим работу с MS Access для пользователей всех уровней, являются "шаблоны" и "мастера" – специальные программные надстройки, предназначенные для создания объектов базы данных в режиме последовательных диалогов. Работа в режиме конструктора предполагает более гибкое управление ресурсами и возможностями объектов СУБД.
  • Шаблоны баз данных можно использовать без изменений или настроить в соответствии с конкретными потребностями. Например, шаблоны базы данных помогают сформировать таблицы из имеющихся вариантов таблиц и предоставляют набор форм и отчетов, соответствующих создаваемому типу базы.

    При помощи мастеров можно создавать таблицы, запросы, формы и отчеты, основываясь на типовых решениях. Мастера ведут разработчика по шагам, высвечивая на экране вопросы и подсказывая, что необходимо сделать, или предлагая возможность выбора из имеющихся образцов. Используя мастер запросов, можно сконструировать простой запрос или запрос на основе главной и связанной таблиц. Мастер форм предлагает свободный выбор полей, отображаемых на форме. Кроме того, можно указать способ группировки и сортировки данных, а также включить в форму поля из нескольких таблиц или запросов, при условии, что заранее заданы отношения между этими таблицами и запросами. Мастер отчетов, подобно мастеру форм, создает отчет на основании ответов пользователя. Построенный таким образом отчет можно использовать без изменений или далее настроить в соответствии со своими требованиями.

    Конструкторы предназначены для создания объектов произвольной структуры. Конструктор ("построитель") выражений помогает быстро и без ошибок создать сложное выражение, используемое в критериях или в вычисляемых полях. Построитель выражений упрощает доступ к именам полей и элементов управления и ко многим встроенным функциям, доступным при создании выражений. С помощью построителя выражений можно выбирать готовые выражения для отображения номеров страниц, текущей даты и времени. Построитель выражений можно запустить из большинства мест, где выражения вводятся вручную, например, при задании свойств полей таблицы. Для запуска построителя выражений достаточно нажатия на кнопку Построить ().

  • В MS Access глубоко развиты возможности интеграции с другими программными продуктами, входящими в состав MS Office, а также с любыми программными продуктами, поддерживающими технологию OLE(Object Link Embedded).
  • Специфической особенностью СУБД Access является то, что вся информация, относящаяся к одной базе данных, хранится в едином неделимом файле, расширение которого .accdb. Такое решение удобно для непрофессиональных пользователей, поскольку обеспечивает простоту при переносе данных с одного рабочего места на другое. Следует отметить, что внутренняя организация данных в базе менялась от версии к версии, но фирма Microsoft поддерживает технологию конвертирования баз данных, созданных в ранних версиях MS Access (mdb-формат), в формат, используемый в более поздних версиях.
  • Обычному пользователю не обязательно знать устройство форм, отчетов, запросов и других объектов. Он работает не с конструкторами объектов базы данных, а с приложением. Создание законченного приложения – задача разработчика базы данных. Приложение может быть построено только с использованием объектов базы данных (форм, отчетов и т.д.), или же при конструировании приложения могут использоваться программные расширения – макрокоманды, записываемые в макросах, или модули, содержащие процедуры на языке VBA.
  • В MS Access 2007 при создании новой базы данных или при открытии базы данных, созданной ранее, на экране появляется область переходов (рис.8.3). В этой области доступны типы объектов, которые может содержать база данных Access, и конкретные объекты. Эта область используется в Access 2007 для выполнения большинства задач работы с объектами базы. В предлагаемом обзоре будут рассмотрены только Таблицы, Запросы, Формы, Отчеты, Макросы и Модули.
  • (рис 8.3) Типы объектов MS Access в области переходов

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

    Основные этапы разработки базы данных

    В процессе разработки конкретного программного приложения в среде MS Access можно выделить типичные этапы, относящиеся уже к непосредственному конструированию базы данных, которое выполняется после предварительного проектирования. Между перечисляемыми ниже этапами существуют обратные связи, подразумевающие возврат к более ранним шагам, исходя из вновь открывшихся обстоятельств, которые невозможно было заранее учесть или предвидеть.

    База данных MS Access является реляционной базой данных и состоит из множества взаимосвязанных таблиц, которые и представляют отношения. Столбцы таблицы отражают сведения, одинаковым образом характеризующие объекты реального мира, которые моделируются с использованием данной таблицы. Для каждого свойства выделяется отдельный столбец – поле таблицы. Строки таблицы содержат информацию об экземплярах реальных объектов и называются записями.

    Разработка и описание структур таблиц данных

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

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

    Далее на логическом уровне описываются структуры потоков информации в автоматизируемой предметной области, т. е. выделяются поля таблиц данных. Для задачи об оплате звонков по мобильным телефонам таблицы могут иметь следующие структуры. Таблица Тарифы будет содержать код и название тарифа, код и название услуги, стоимость услуги за единицу времени. Таблица Абоненты должна содержать характеристики абонентов, такие как Код абонента, Номер телефона, ФИО, Код тарифа. Наконец, таблица Звонки должна содержать Код звонка, Номер телефона звонившего (первого абонента), Номер телефона второго абонента, Код услуги, Дата и продолжительность разговора.

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

    После выполненного проектирования будущих таблиц необходимо выполнить описание структур таблиц средствами СУБД. Это можно сделать в режиме конструктора. Можно использовать встроенные шаблоны таблиц или списков SharePoint, например, шаблоны "Контакты", "Задачи", "Вопросы" и "События". Если имена полей выбранного шаблона недостаточно информативны, их можно изменить. В режиме конструктора можно менять любые свойства полей, менять поля местами или добавлять новые поля. Использовать конструктор для модификации таблиц можно в любое время, даже после ввода данных в таблицу.

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

    Поля могут иметь любой используемый в офисных приложениях тип данных: Счетчик, Текстовый, Числовой, Дата/время, Логический, Поле объекта OLE. Возможно использование поля комментариев (Memo). MS Access автоматически накладывает условия на значения, определяемые типом поля, например, не допускается ввод текста в числовые поля. Установка типа данных одновременно определяет набор дополнительных атрибутов соответствующего поля. В каждом поле могут храниться данные только одного типа. Изменение типа поля после ввода данных в таблицу может привести к потере данных.

    (рис 8.4) Поля таблицы и их свойства

    Если поле используется в качестве первичного ключа таблицы, то оно может иметь любой тип данных. Часто применяется тип данных Счетчик, который гарантирует, что при вводе данных в это поле автоматически попадает номер записи в возрастающей последовательности. Можно задействовать в качестве первичного ключа определенный пользователем набор полей. МЕМО-поля и поля объекта OLE не могут быть первичными ключами. Во время ввода данных в поля первичного ключа MS Access автоматически следит за тем, чтобы в поля вводились уникальные или повторяющиеся значения в соответствии с заданным свойством Индексированное поле. Ключи не только идентифицируют записи таблиц, но и используются для установки межтабличных связей.

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

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

    При проектировании базы данных можно предусмотреть возможности работы с внешними данными. Это импорт данных и связь с внешними таблицами данных. В случае импорта происходит создание дубликата внешних данных во вновь создаваемой таблице. К импортируемым данным могут применяться все средства манипуляции данными, обеспечивается быстродействие при обращении к ним и независимость от исходного источника данных. Однако возникают проблемы, связанные с поддержкой актуальности и соответствия друг другу двух копий одной и той же информации. Eсли актуальность данных является критичным фактором, то необходимо использовать связь с внешними данными. В этом случае в базе данных появляется лишь ссылка на внешние источники данных, и работа с ними происходит с помощью специальных драйверов, которые традиционно входят в пакет MS Access. Это драйверы для работы с данными, созданными в форматах Paradox, Excel, dBase, FoxPRO, а также в текстовом (txt) и гипертекстовом (htm) форматах. При связывании с внешними данными естественно возникают ограничения возможностей по управлению структурой таблиц, а также зависимость от состояния внешнего источника, к которому осуществляется подключение.

    Установка связей между таблицами

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

    Механизм описания логических связей между таблицами в MS Access реализован в виде объекта, называемого Схемой данных. Схема данных (рис.8.5) представляет собой графическое изображение таблиц и их взаимосвязей. Если таблицы служат для физического хранения данных, то схема данных отражает связи между таблицами базы и возможности доступа к данным таблиц с использованием этих связей, т. е. доступ к данным на логическом уровне.

    (рис 8.5) Схема базы данных

    Для каждой таблицы, включенной в схему, отражены поля, выделен первичный ключ и связанные поля соединены линиями. Значки на концах линий указывают на тип отношения. На рис.8.5 все таблицы связаны наиболее часто встречающимся отношением "один-ко-многим". Все связываемые таблицы помещаются в окно схемы, при этом размещение всех таблиц базы данных в схеме не является обязательным.

    Следует отметить, что одно и то же поле некоторой таблицы может быть использовано для связи этой таблицы с несколькими таблицами. Установка связей между таблицами позволяет получать информацию из нескольких таблиц. Таблица является главной или подчиненной в зависимости от типа установленной связи. Поле связи в главной таблице обычно является первичным ключом таблицы или имеет индекс, тип которого – совпадения не допускаются, и таким образом однозначно определяет запись в этой таблице. Обычно в подчиненной таблице связываемое поле суть первичный ключ или его часть. Оно носит название внешнего ключа. Содержимое внешнего ключа подчиненной таблицы должно совпадать с первичным ключом или индексом главной таблицы. Очевидно, что связь может устанавливаться при совпадении типов полей главной и подчиненной таблиц. Если связующее поле таблицы не характеризует запись однозначно, то таблица не может выступать в качестве главной при связи по этому полю.

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

    MS Access автоматически следит за обеспечением целостности данных, если оно установлено (рис.8.6). К нарушению целостности данных приводят следующие действия:

  • добавление записей в подчиненную таблицу при отсутствии соответствующей записи в главной таблице. Например, добавляется запись об абоненте, но информация о выбранном им тарифе отсутствует в базе данных;
  • изменение поля связи в главной таблице, следствием которого будет нарушение связи с данными в подчиненной таблице. Например, если код тарифа в главной таблице будет изменен, то коды в полях связи записей главной и подчиненной таблиц не будут совпадать;
  • удаление записи из главной таблицы при наличии связанных записей в подчиненной таблице. Это приводит к появлению "осиротевших" записей подчиненной таблицы. Так нарушение целостности может возникнуть в случае удаления из таблицы Тарифы записи, соответствующей тарифу, используемому в таблице Абоненты или в таблице Контакты (рис.8.5).
  • Если установлено обеспечение целостности данных (рис.8.6), при изменении значения внешнего ключа записи подчиненной таблицы эта запись может быть сохранена лишь в том случае, если значение связующего поля присутствует в главной таблице. Удалить запись главной таблицы можно лишь в том случае, если эта запись не связана ни с одной записью любой из подчиненных таблиц.

    В случае необходимости обеспечения целостности данных в MS Access предусмотрено задание дополнительных свойств для устанавливаемой связи (рис.8.6), а именно каскадное обновление значений связанных полей и каскадное удаление связанных записей. Каскадное обновление предусматривает обновление внешнего ключа во всех записях подчиненных таблиц при изменении значения поля связи в главной таблице. Т. е. если изменился бы код услуги в таблице Услуги, то автоматически код услуги заменился бы на новый в связанных записях таблиц Звонки и Контакты. Каскадное удаление приводит к удалению всех записей подчиненных таблиц, связанных с удаляемой записью главной таблицы. Если бы удалялась запись таблицы Услуги, то автоматически удалились бы связанные записи таблиц Звонки и Контакты.

    (рис 8.6) Установка связей между таблицами

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

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

    Данные могут быть введены различными способами. Самый простой способ – это ввод данных вручную в режиме Таблицы. При подобном способе выполняется автоматический контроль на соответствие вводимых данных типам полей таблицы. Если данные введены некорректно, то продолжение работы невозможно до тех пор, пока не будет введено правильное значение. Можно копировать уже введенные строки таблицы и корректировать их после добавления в таблицу. Система контролирует допустимость использования повторяющихся значений в ключевых полях в соответствии с заданными свойствами полей.

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

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

    (рис 8.7) Возможности импорта данных

    Импорт данных можно выполнить, открыв файл необходимого типа (рис.8.8). Импорт возможен и через буфер обмена.

    (рис 8.8) Типы открываемых данных

    Если при вводе данных обнаружено, что структура таблицы спроектирована некорректно, например, имеются лишние поля или, наоборот, некоторые поля пропущены, задан неверный порядок полей или их тип и т.п., то ошибки можно исправить, перейдя в режим конструктора таблиц. Как уже говорилось, важным преимуществом интерфейса СУБД Access является гибкая система перехода от одного режима работы с объектом к другому режиму. Если таблица уже содержит данные, при изменении структуры таблицы они теряются только в исключительных случаях, например, при изменении типа поля. MS Access предупреждает об этом соответствующим сообщением.

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

    Поиск и выборка данных из базы данных

    К простейшим реализованным в MS Access способам обработки табличных данных относятся сортировка записей, поиск записи по условию, получение выборки записей таблицы, удовлетворяющей некоторому критерию (фильтрация данных таблицы).

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

    В MS Access поиск нужной информации может быть выполнен при помощи средств поиска, аналогичных средствам поиска в любом офисном приложении. Поиск ведется быстрее в индексированном поле. Для логических данных и данных типа Дата/Время удобно вести поиск с учетом формата полей. В этом случае образец поиска задается в том виде, в каком выводятся на экран данные, среди которых осуществляется поиск, а не в том виде, в каком они хранятся в базе данных. Например, если для дат установлен формат даты, высвечивающий названия месяцев, то, применив образец поиска "*окт", можно найти все записи, соответствующие октябрьским дням.

    Фильтрация является самым простым способом отбора информации. При помощи фильтрации можно видеть на экране не всю таблицу, а только часть записей, удовлетворяющих заданному условию. Фильтры применяются как в таблицах, так и в формах. Команды фильтрации показаны на рис.8.9.

    (рис 8.9) Команды фильтрации

    Пользователь может выделить фрагмент значения поля и использовать выделенный фрагмент в качестве условия фильтрации, может отфильтровать отдельные значения поля или задать условие отбора с применением логических операций. Если пользователь не владеет записью логических функций, можно воспользоваться бланком фильтра, задание условий на вкладках которого равносильно применению логических функций И/ИЛИ (рис.8.10).

    (рис 8.10) Возможности фильтрации данных и бланк фильтра

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

    (рис 8.11) Бланк расширенного фильтра

    Однако этих возможностей недостаточно для задач обработки данных, которые возникают в реальных приложениях. Для их решения применяется инструментарий запросов к базе данных. Запросы в MS Access различаются по выполняемым функциям: запросы на выборку данных или изменение данных, запросы на создание или удаление таблиц, группирующие запросы и т.д. В таблицах базы данных хранятся, как правило, лишь исходные данные, а все результаты, которые могут быть получены на их основании, вычисляются с помощью запросов. Такой подход позволяет уменьшить объем хранимой в базе данных информации.

    В запросах можно использовать данные одной таблицы или нескольких связанных таблиц. Если таблицы не связаны в схеме, их можно связать в запросе. Если таблицы связаны в схеме, то в запросе можно изменить свойства установленной связи. Например, в запросе Стоимость звонка установлена дополнительная связь между таблицами Абоненты и Контакты (рис.8.12).

    (рис 8.12) Окно конструктора запроса с добавленной связью

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

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

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

    В процессе создания запроса формируется структура запроса, т. е. указывается, какие поля источников данных запроса должны выводиться в колонках таблицы запроса; задаются порядок вывода записей и условия вывода записей. На рис.8.12 показано окно конструктора запроса, а на рис.8.13 – окно просмотра запроса в режиме таблицы.

    (рис 8.13) Запрос в режиме таблицы

    Колонки запроса могут содержать как поля источников данных запроса, так и выражения, построенные на основе этих полей (вычисляемые поля). В вычисляемых выражениях могут применяться встроенные функции. Поля данных могут переименовываться в запросе, например, поле нт на рис.8.12 и рис.8.13.

    Важными отличиями между фильтрами и запросами являются следующие:

  • фильтр всегда выводит все столбцы таблицы, а запрос – только те, которые явно указаны в бланке запроса;
  • запрос применяется ко всем данным таблицы-источника, а фильтр может накладываться на уже отфильтрованные данные.
  • Среди задач обработки данных достаточно типичной является проблема группировки данных по одному или нескольким признакам. Например, в рамках построенной базы данных об оплате звонков может быть поставлена задача определения суммарной стоимости звонков каждого абонента. Решить ее можно, построив запрос, содержащий групповые операции.

    (рис 8.14) Запрос с группировкой в режиме конструктора

    На рис.8.14 показано окно конструктора запроса, рассчитывающего суммарную стоимость звонков каждого абонента. При этом в бланк запроса включен запрос Стоимость звонков и таблица Абоненты, которые связаны в запросе по коду абонента. Операция суммирования значений нескольких записей запроса Стоимость звонков, осуществляемая для каждого абонента, определяется групповыми операциями Sum и Группировка, расположенными в одноименной строке. В процессе выполнения этого запроса суммируются стоимости звонков при постоянных значениях кода абонента и, соответственно, при постоянных значениях фамилии абонента, его имени и номера телефона. Результирующая запись – одна для каждого абонента (рис.8.15). При задании групповых операций доступны встроенные статистические функции.

    (рис 8.15) Запрос с группировкой в режиме таблицы

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

    (рис 8.16) Параметрический запрос

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

    (рис 8.17) Перекрестный запрос в режиме конструктора

    В приведенном на рис.8.17 запросе наименование услуги выбрано в качестве заголовков столбцов, а фамилия и имя абонента – в качестве заголовков строк. В результате перекрестный запрос отражает суммарное время звонков каждого абонента с разбивкой по характеру звонков (рис.8.18)

    (рис 8.18) Выполненный перекрестный запрос

    Мастер запросов Повторяющиеся записи позволяет установить, сколько раз встречаются те или иные значения в полях таблицы. Это тип запроса также относится к группирующим запросам. Для вывода повторов используется группирующая функция Count, а условие вывода записи – количество записей в группе превышает 1. Можно модифицировать запрос, чтобы искать любое количество повторений значений, например, превышающее 10.

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

    В завершение обзора средств построения запросов следует отметить, что помимо мощного и эффективного визуального конструктора запросов в MS Access доступен также и режим непосредственного ввода SQLвыражений. Данный режим существует параллельно с конструктором и мастерами запросов. Перейдя в режим SQL, можно просмотреть SQL-выражение, соответствующее построенному запросу. Пользователь, владеющий синтаксисом языка SQL, может модифицировать запрос в режиме SQL. Очевидно, что такая техника работы требует большей квалификации, но одновременно дает в руки разработчика мощный и универсальный аппарат управления данными.

    Конструирование отчетов

    MS Access, подобно другим офисным приложениям, предоставляет возможности распечатки информации. Можно распечатать таблицы, запросы или формы. В составе СУБД имеется средство подготовки отчетов по хранимой информации. Под отчетом традиционно понимается специальным образом структурированное представление хранимых данных, выводимое, как правило, на бумажный носитель. Отчеты являются исключительно средством вывода информации, тогда как экранные формы позволяют вводить новую и корректировать существующую информацию. Отчеты предоставляют средства оформления документов в соответствии с потребностями пользователя. Использование отчетов позволяет проводить многоуровневую сортировку и группировку данных, а также вычислять промежуточные и общие итоги.

    Разбивка отчета на страницы предполагает организацию вывода колонтитулов в начале и конце каждого листа, повтор головки таблицы на каждой странице, включение отчеркивающих линеек и т.д. Для нумерации страниц в отчетах применяются встроенные переменные Page и Pages, возвращающие соответственно номер текущей страницы отчета и общее количество страниц в нем. Возможно отображение системной даты и системного времени благодаря использованию функции Now().

    Идеология работы с отчетами допускает построение простых отчетов, работу с мастером, макетом и конструктором отчетов. Простейший отчет можно представить как табличный или отчет с полями, расположенными в столбец. Мастер отчетов помогает создать существенно более сложный и интересный для пользователей отчет в диалоговом режиме. Режим конструктора является средством работы со структурой отчета и позволяет выполнить более тонкую настройку отчета. Во время работы в этом режиме можно просматривать информацию в виде таблицы или в виде формы, одновременно изменять, если необходимо, данные, получая обновленную информацию в режиме предварительного просмотра отчета. Режим макета позволяет изменять структуру отчета, одновременно просматривая результаты. В этом режиме можно внести большинство изменений, обычно вносимых в конструкторе, и при этом видеть, как фактически выглядит форма или отчет.

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

    (рис 8.19) Суммарный отчет о стоимости звонков

    В отчете можно выполнить дополнительные вычисления с полями каждой записи. В приводимом на рис.8.19 фрагменте отчета вычисляется стоимость каждого звонка. Отчеты можно структурировать, задавая группировки по одному или нескольким полям. Для каждого уровня группировки можно предусмотреть вывод промежуточных итогов c применением обычных итоговых функций, например, функции Sum() для получения суммарного итога или функции Avg() для получения среднего арифметического. В примере рассчитанные стоимости звонков суммируются для каждого абонента, и информация о каждом абоненте выводится в алфавитном порядке.

    На начальном этапе разработки отчета рекомендуется воспользоваться услугами мастера отчетов, который в диалоговом режиме создаст походящий набросок отчета, избавляя пользователя от многих рутинных операций, например, таких как добавление полей и подписей к ним или выбор стиля оформления отчета. Далее полученный макет отчета в режиме конструктора приводится пользователем к желаемому виду. На рис.8.20 видна структура отчета. Он состоит из нескольких областей (разделов): заголовка отчета, верхнего колонтитула, области данных, нижнего колонтитула и примечания отчета. Разделы содержат элементы отчета, которые в режиме конструктора представляются в виде полей разных типов и являются объектами редактирования. Некоторые области, как в данном случае примечание отчета, могут быть пустыми. В области данных располагаются поля записей источника отчета с содержательной для пользователя информацией. Здесь могут быть размещены вычисляемые поля, в том числе поле, позволяющее нумеровать строки отчета. При выполнении группировок и/или сортировок данных в отчете появляются заголовки и примечания групп, которые содержат поля записей источника отчета, используемые как вспомогательные для выполнения сортировки и группировки. Эти области располагаются в порядке, установленном разработчиком отчета.

    (рис 8.20) Структура суммарного отчета

    Модификация элементов отчета, в том числе и разделов отчета, выполняется путем изменения их свойств. Вывод значений полей источника данных отчета основан на принципе наследования свойств: если при создании таблицы было определено некоторое свойство отображения поля, то установленный способ отображения используется в запросах, формах, отчетах до тех пор, пока свойство не будет переопределено явным образом в окне свойств соответствующего объекта. Например, в таблице Контакты тип поля Стоимость единицы был определен как Денежный, поэтому в отчете значения этого поля отображаются с двумя знаками после запятой и с указанием валюты.

    Можно добавлять новые элементы к отчету, используя панель элементов или удалять включенные в отчет элементы. Возможно перемещение элементов отчета между разделами отчета.

    Конструирование экранных форм для работы с данными

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

    Использование экранных форм для ввода данных обуславливается в первую очередь тем, что количество полей в таблице может оказаться достаточно большим и вводить информацию в подобную таблицу будет технически неудобно. При вводе данных непосредственно в таблицу базы данных возможны ошибки, связанные с внесением данных не в те поля или не в те записи таблицы. Может случиться так, что пользователь должен вводить данные одновременно в несколько таблиц, т. к. таблицы связаны в базе, и отсутствие данных в главной таблице приведет к невозможности ввода данных в подчиненную таблицу. Более того, система ввода/вывода должна быть организована в виде, максимально приближенном к традиционным формам представления информации для конкретной задачи. Часто требуется обеспечить разделение доступа или ограничить доступ к некоторым данным для различных категорий пользователей. Все перечисленное можно реализовать при помощи экранных форм.

    Формы являются основными средствами создания интерфейса пользователя – именно через формы можно управлять выполнением всего спектра задач приложения и автоматизировать действия пользователя.

    Для создания формы можно воспользоваться возможностями построения простых форм (табличная или форма "в столбец") или мастером форм либо разработать форму в режиме конструктора. Выбор способа создания формы зависит от квалификации пользователя и сложности разрабатываемой формы. Весьма плодотворным также оказывается комбинированный подход: сначала используется мастер формы, а затем полученная форма дорабатывается в режиме конструктора. Режим макета позволяет модифицировать структуру формы и одновременно видеть измененное представление данных. При любом способе создания формы для нее, прежде всего, определяется источник данных – таблица или запрос. Если форма основана на запросе, то он автоматически выполняется при открытии формы.

    К числу важных достоинств MS Access относится то, что работа с экранными формами универсальна и подобна работе с отчетами. Режим конструирования экранной формы аналогичен режиму конструктора отчета. Структура формы ориентирована на возможности представления табличных данных. Форма состоит из разделов, основные из которых – заголовок, примечание формы и область данных. Именно в области данных отображается информация, отличающая одну запись от другой, т. е. различные значения свойств объектов реального мира. Процесс проектирования формы в среде MS Access сводится к добавлению управляющих элементов и изменению их свойств. Можно добавить такие элементы управления, как надпись, поле, кнопка, флажок, переключатель, список, набор вкладок и др. (элементы управления показаны на рис.8.21). Помимо этого к форме можно подключать дополнительные элементы управления ActiveX, что значительно расширяет возможности представления данных. Каждый элемент управления обладает своим набором свойств, изменение которых приводит к изменению его вида и поведения, например, можно менять цвет, шрифт, изменять размеры элемента и т.п. Сама форма и ее разделы также рассматриваются как элементы управления и обладают настраиваемыми наборами свойств. Источником вычисляемого элемента, размещаемого в форме, является расчетная формула, построенная по правилам формирования выражений. Для упрощения записи выражений можно воспользоваться Построителем выражений.

    (рис 8.21) Панель элементов управления формы

    На рис.8.22 показана составная форма Абоненты, которая содержит командные кнопки для вызова двух других форм. Основная форма Абоненты построена на многотабличном запросе, и данные, высвечиваемые в этой форме, организованы в соответствии с главной таблицей Абоненты. Верхняя часть формы показывает информацию о некотором абоненте. Подчиненная форма Звонки отображает в табличном виде информацию о звонках выбранного абонента. Перемещение в форме Абоненты возможно по абонентам или по звонкам. При переходе к следующему абоненту изменяются строки формы Звонки, в которые выводится информация, относящаяся уже к другому абоненту.

    Нажатие на кнопку Новый звонок вызывает загрузку формы, которая высвечивает данные только по выбранному абоненту, на что указывает выполняемая в форме фильтрация (рис.8.22). Это достигается за счет того, что MS Access позволяет отображать в объекте базы, вновь загружаемом при помощи командной кнопки, или все отобранные в запросе записи, или записи, которые относятся к субъекту, выбранному в основной форме. По сути, из единой формы Абоненты реализовано управление данными, находящимися в системе взаимосвязанных таблиц. Структура формы Новый звонок соответствует структуре таблицы Звонки. Но можно построить форму, в которой поля таблицы будут расположены в любом порядке.

    (рис 8.22) Составная форма

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

    Через форму довольно просто вносить изменения в данные базового источника. Следует отметить, что если источником данных формы является многотабличный запрос, то могут модифицироваться сразу несколько таблиц. Изменения в главной форме вызывают модификацию полей не только главной, но и подчиненной таблицы, если изменяемые поля связаны друг с другом и предполагается каскадное обновление данных.

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

    В форме операции поиска и сортировки можно выполнять в основном теми же способами, что и в таблицах. Способы фильтрации в форме совпадают с аналогичными возможностями для таблиц.

    MS Access позволяет создавать формы в виде сводных таблиц или сводных диаграмм, которые строятся абсолютно аналогично построению этих объектов в MS Excel. Доступны те же типы диаграмм, что и в MS Excel.

    Создание пользовательского приложения

    Экранные формы часто применяются для создания приложения, работа с которым предполагает различные способы работы с базой. Диспетчер кнопочных форм обеспечивает быструю и гибкую разработку внешнего интерфейса системы (по сути, разработку приложения) определяющего перечень основных режимов работы с созданной базой данных и их иерархию. При этом создается основная форма (рис.8.23), которая в MS Access носит название Главная кнопочная форма. Она содержит командные кнопки, нажатие на которые открывает формы или отчеты для просмотра информации в разных разрезах, фильтрует выводимые на экран данные и прочее. Во время загрузки очередного объекта происходит передача данных между объектами базы, например, очередная вызванная форма может использовать данные, отобранные во время работы вызвавшей ее формы.

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

    На рис.8.23 отображена главная кнопочная форма, имеющая первый уровень иерархии. Нажатие на кнопки Просмотр форм или Просмотр отчетов высвечивает кнопочные формы второго уровня, которые содержат названия вызываемых форм или отчетов соответственно (рис.8.24). Нажатие на каждую из кнопок высвечивает выбранную форму или отчет. Возможен возврат на предыдущий уровень иерархии и выход из формы с закрытием приложения. MS Access.

    (рис 8.23) Главная кнопочная форма (рис 8.24) Страница кнопочной формы

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

    (рис 8.25) Таблица элементов кнопочных форм

    Организация защиты данных в СУБД MS Access

    MS Access обеспечивает два традиционных способа защиты базы данных. Простейший способ защиты – это установка пароля, требуемого при открытии базы данных. Тогда при каждом открытии базы данных будет появляться диалоговое окно, в котором требуется ввести пароль. Этот способ достаточно надежен, т. к. MS Access шифрует пароль, и к нему нет прямого доступа при чтении файла базы данных. После открытия базы данных все ее объекты становятся полностью доступными в течение сеанса работы с базой. Можно считать эту меру защиты достаточной для баз данных, которые совместно используются небольшой группой пользователей или установлены на автономном компьютере.

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

    По умолчанию в базе определены две группы пользователей: Admins и Users. Для каждой группы задаются разрешения на доступ к объектам базы данных (права доступа). Члены группы Admins, как правило, имеют разрешения на доступ ко всем объектам базы данных. Поскольку группа Users объединяет всех пользователей, имеет смысл ей присваивать некоторый минимальный набор прав. Можно создавать собственные учетные записи групп, предоставляя этим группам соответствующие разрешения и добавляя в группы пользователей, исходя из функциональной специфики предметной области. Один и тот же пользователь может являться членом различных групп.

    Как группам, так и пользователям предоставляются разрешения на доступ, определяющие допустимые для них действия по отношению к каждому объекту базы данных. Набор возможных прав, очевидно, определяется спецификой объекта. При запуске MS Access от пользователей требуется идентифицировать себя и ввести пароль.

    Дополнительные режимы работы с базой данных

    К этим возможностям относятся создание резервной копии, восстановление и сжатие баз данных, документирование объектов базы данных.

    При практической эксплуатации базы данных MS Access возникает необходимость общего копирования БД, восстановления БД после сбоев, сжатия БД и наконец, репликации – режима получения текущей копии с возможностью эксплуатации ее на переносном или изолированном компьютере с последующей синхронизацией существующих копий БД.

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

    Восстановление базы используется после нарушения целостности файла БД, а преобразование базы необходимо для работы с базами, созданными в более ранних версиях MS Access.

    Разделение базы данных на клиентское и серверное приложения может потребоваться по различным причинам. Серверная база данных содержит таблицы и хранится на файловом сервере. В клиентской базе данных, которая содержит ссылки на таблицы серверной базы данных, хранятся все формы, запросы, отчеты, макросы и модули. Клиентская база данных устанавливается на рабочих станциях пользователей. Такое разделение обеспечивает наиболее эффективный способ эксплуатации системы:

  • пользователи не могут вносить изменения в структуру таблиц и их взаимосвязи;
  • когда пользователь открывает форму, эта форма открывается локально на компьютере пользователя, а не передается по сети. По сети передаются только данные в связанных таблицах.
  • Разделить базу данных можно вручную или при помощи служебной программы "Разделитель баз данных".

    Средства макропрограммирования в MS Access

    В ответ на определенные действия пользователя могут выполняться процедуры обработки событий, например, нажатие на некоторую кнопку формы может инициировать автоматическое создание новой таблицы определенной структуры. Основной набор средств MS Access, рассмотренный выше, ориентирован на пользователей, не владеющих языками программирования. Пользователи, знакомые с языками программирования, могут использовать макросы и модули (процедуры на языке Visual Basic for Application, VBA). С их помощью можно существенно расширить функциональные возможности создаваемого приложения и настроить его на нужды конечных пользователей.

    В MS Word и MS Excel имеется средство автоматической записи макросов – макрорекордер. После включения записи макроса можно создать процедуру, выполнив необходимые действия и остановив запись макроса. Все действия пользователя, выполненные между включением и выключением записи макроса, преобразуются в текст процедуры VBA. Этот текст затем можно просмотреть и отредактировать с помощью редактора VBA. Выполнение записанной процедуры равносильно повторению действий пользователя. В MS Access средств автоматической записи макросов нет. Автоматическая генерация кода VBA происходит только при создании объектов в режиме мастера.

    Макрос в MS Access представляет собой структуру, состоящую из одной или нескольких макрокоманд СУБД Access, которые выполняются либо последовательно, либо в порядке, определенном некоторыми заданными в макросе условиями. С помощью макросов можно выполнить практически все действия с объектами MS Access. Основное назначение макросов – это создание интерфейса приложения. С помощью макросов можно расположить на экране меню и панели инструментов, удобные для приложения.

    Макросы легко создавать – для этого не нужно изучать синтаксис языка программирования, а достаточно знать лишь основные приемы работы в MS Access. Однако использование макросов имеет и некоторые недостатки, а именно: возможности макрокоманд ограничены по сравнению с возможностями языка VBA; процедуры VBA выполняются быстрее; макросы являются объектами, существующими отдельно от форм и отчетов, в которых они используются, и поэтому при увеличении количества макросов их поддержка становится достаточно трудоемкой. Тем не менее, во многих случаях использование макросов вполне оправдано, т. к. это существенно упрощает и ускоряет разработку приложения. С помощью макросов можно создавать небольшие однопользовательские приложения, однако если скорость работы приложения критична, лучше применять процедуры VBA.

    Если количество макросов оказалось очень большим, можно объединить несколько макросов в группу макросов. Рекомендуется, например, все макросы, связанные с событиями в форме или отчете, объединять в группу макросов, соответствующую данной форме или отчету соответственно. При этом каждый макрос группы должен иметь свое имя, а имя объединенного объекта будет являться именем группы макросов.

    Работа по созданию и запуску макросов выполняется так же, как и работа с любым объектом базы. Отличия определяются типом объекта. Макрос создается и редактируется в режиме конструктора. В окне конструктора выбирается макрокоманда из списка всех макрокоманд. Макрокоманды можно сгруппировать по категориям: работа с данными; выполнение; работа с объектами; импорт/экспорт данных и объектов, настройка интерфейса приложения. В категорию работы с данными входит набор макрокоманд, обеспечивающих отбор данных (фильтрация записей в формах и таблицах), перемещение по данным и элементам управления, а также обновление данных в активных формах, таблицах и запросах. К категории выполнения можно отнести выполнение команд, макросов, процедур или запросов, запуск другого приложения, прерывание выполнения и завершение работы в MS Access. Для настройки интерфейса можно вывести на экран или, наоборот, скрыть встроенную или пользовательскую панель инструментов, подать звуковой сигнал и т. п.

    Наиболее обширная категория макрокоманд – это макрокоманды работы с объектами. MS Access состоит из нескольких компонентов, каждый из которых предоставляет собственный набор объектов, информация о которых содержится в библиотеках объектов. Например, библиотека объектов MS Access хранит информацию об объектах, предназначенных для отображения данных, для работы с приложением. В частности, это объекты формы или отчета. Макрокоманды для этих объектов позволяют в первую очередь выполнять копирование, переименование и сохранение объектов. Библиотека объектов DAO (Data Access Objects) предоставляет объекты доступа к данным, которые позволяют манипулировать данными из Visual Basic, т. е. управлять базами данных из любого приложения, поддерживающего VBA.

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

    Выполнение макроса инициируется нажатием на кнопку Выполнить .

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

    Наиболее часто макросы используются в приложении MS Access для обработки событий объектов. События – это любые действия, распознаваемые объектом, которые происходят в результате манипуляций пользователя, выполнения инструкций VBA или генерируются системой. Примером события является вывод формы на экран или нажатие кнопки. Для каждого объекта базы определены свои собственные события, перечень которых расположен на вкладке События диалогового окна свойств объекта (рис.8.27).

    (рис 8.26) Группа Макрос вкладки Работа с базами данных (рис 8.27) События элемента Кнопка

    Каждому событию можно назначить макрос или процедуру VBA, которые будут автоматически выполняться в ответ на произошедшее событие. Практически программирование в MS Access сводится к написанию макросов или процедур, обрабатывающих события, т. е. программируется реакция объектов на события.

    В форме Звонки абонентов (рис.8.28) размещена дополнительная командная кнопка Добавить звонок (имя кнопки n_call), при нажатии на которую открывается форма Новый звонок в режиме добавления данных. При этом открытие формы сопровождается звуковым сигналом. Для выполнения перечисленных действий создан макрос new_call (рис.8.29) из двух макрокоманд – открытия формы и подачи сигнала. Аргументы макрокоманды Открыть форму указывают на имя открываемой формы Новый звонок и режим данных Добавление. Указанный макрос выполняется автоматически при возникновении события Нажатие кнопки (рис.8.27).

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

    (рис 8.28) Модифицированная составная форма (рис 8.29) Макрос открытия формы

    Разработка программных приложений для MS Access

    Для программирования в MS Access используется процедурный язык Visual Basic for Applications (VBA) с добавлением объектных расширений и элементов SQL (более подробно о языке VBA см. раздел 3). Язык программирования VBA является общим инструментом для всех приложений MS Office, позволяющим решать любые задачи программирования, начиная от автоматизации действий конкретного пользователя и кончая разработкой полномасштабных приложений, использующих MS Office в качестве среды разработки.

    Код VBA в приложении MS Access содержится в модулях. Модули являются такими же объектами MS Access, как таблицы, запросы, формы, отчеты и макросы. Основное содержание модулей – это процедуры на языке VBA. Модули, в отличие от макросов, являются более мощным средством разработки программных расширений в среде MS Access. Применение модулей требует от пользователя навыков программирования, а также знания основных принципов объектно-ориентированного программирования.

    Если в базе данных существуют макросы, то они могут быть преобразованы в процедуры на VBA. Это касается как макросов, связанных с событиями в формах и отчетах, так и общих макросов, не связанных с формами и отчетами. Все они преобразуются в отдельные модули, причем макросы, выполняемые при возникновении событий, преобразуются в процедуры обработки событий. На рис.8.30 приведен преобразованный в процедуру макрос new_call, показанный на рис.8.29. На вкладке События для кнопки n_call (рис.8.27) в строке, соответствующей событию Нажатие кнопки, вместо названия макроса будет находиться текст [Процедура обработки событий], означающий вызов процедуры нажатия на кнопку n_call.

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

    (рис 8.30) Макрос, преобразованный в процедуру

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

    Важнейшей частью объектно-ориентированного программирования в MS Access является программирование доступа к данным, которое возможно благодаря использованию объектов DАО. С помощью этих объектов, их свойств и методов можно создавать базу данных, изменять структуру таблиц и запросов, устанавливать и изменять связи между данными, а также извлекать, добавлять, удалять и изменять данные в базе MS Access. Объекты DAO позволяют взаимодействовать с базами данных из любых приложений MS Office или работать с данными файлов разных форматов (например, MS Excel, dBase или Paradox), подключаться к базам данных на удаленных серверах и разрабатывать клиент-серверные приложения, используя источники данных ODBC.

    Вопросы для самопроверки

  • Каковы основные функции баз данных?
  • Какие существуют типы организации баз данных?
  • Как организована реляционная база данных?
  • Перечислите объекты базы данных.
  • Укажите различия между таблицами и запросами, между формами и отчетами.
  • Какие объекты базы данных используются для хранения данных?
  • Что такое поле таблицы?
  • Понятие записи таблицы.
  • Какие типы полей допустимы в таблицах базы данных?
  • Какие свойства полей позволяют ограничить ввод данных?
  • В каких целях используются экранные формы?
  • Перечислите способы создания форм.
  • Какие разделы может содержать форма?
  • Как заблокировать внесение изменений в поля формы?
  • Какие способы защиты данных существуют в настольных СУБД (на примере Access)?
  • Вернуться к учебному плану