Открываем базу.
Опять... А нельзя ли как-нибудь этого Прянишникова временно посадить под замок?
Чтобы не открывал... Закрыть надо, а не работать! Слышишь? Закрыть!
Аркадий Стругацкий, Борис Стругацкий.
Улитка на склоне-1 (Беспокойство)
Начнем с того, что посмотрим на уже созданную кем-то базу. Базы Access имеют расширение mdb и особых навыков при открывании не требуют. Однако, стоит обратить внимание вот на какой забавный факт: если есть уже открытая база и в ней выполняется какой-нибудь долгоиграющий макрос или запрос, то до момента завершения оного вы вряд ли дождетесь открытия той базы, которую хотите увидеть. Отсюда китайская хитрость:
Если сложилась описанная выше ситуация, можно, пользуясь Total Commander, создать кнопку Access в панели инструментов и используя не двойной щелчок, а Drag'n'Drop открыть БД.
Но вот она на экране. На что же стоит обратить внимание?

В соответствии с требованиями к реляционной СУБД имеется возможность создавать и редактировать:
- Таблицы, как основной элемент БД. По хорошему – все имена таблиц начинаются с префикса tbl.
- Запросы – то, что обсуждалось на прошлой лекции. По хорошему – все имена запросов начинаются с префикса qry.
- Формы – объекты, позволяющие осуществить визуализацию данных таблиц. По хорошему – все имена форм начинаются с префикса frm.
- Отчеты для вывода данных на печать и представления каких-то результатов в «красивом виде». По хорошему – все имена отчетов начинаются с префикса rpt.
- Страницы доступа к данным, для работы через Internet
- Макросы – фактически, процедуры, сформированные из команд, заданных, что называется, «на человеческом языке». По хорошему – все имена макросов начинаются с префикса mcr.
- Модули – совокупности процедур, написанных на языке программирования Visual Basic for Applications (VBA). По хорошему – все имена модулей начинаются с префикса u.
В отличие от большинства программных средств Access лишь ограниченно поддерживает миграцию с более ранних версий в поздние. То есть, при конвертации БД, созданной в Access 97 в Access 2000 могут возникнуть вполне ощутимые проблемы.
Не стоит расслабляться и думать, что сформированная web-страница для доступа к данным решит все проблемы. Сформированные страницы корректно работают только в Internet Explorer. Проверено на Access 2000.
Для каждого класса существует закладка, переключение между которыми производится в левой части формы базы данных. Каждый из объектов может быть открыт либо по двойному щелчку, либо по нажатию на соответствующую кнопку. Если нажать на кнопку «Конструктор», либо выбрать соответствующий пункт контекстного меню, то можно будет увидеть свойства данного объекта – его «конструкцию» и попробовать что-то поменять.
Среди всего прочего стоит выделить то, что в Access называется «связанная таблица». Связанная таблица физически находится в другой БД, но при выполнении запросов участвует, что называется, по полной программе. Таблица является «живой» - произведя изменения в ней, вы производите изменения в исходной таблице в другой БД, кроме того, если кто-то что-то поменял в таблице в этой другой БД, то вы увидите это также. Свойства этой таблицы изменить нельзя – на то она и связанная.
Стоит выделить такой инструмент как «Схема данных». Схема данных конструируется тем, кто эту БД создает и показывает таблицы БД и связи между ними (вспоминаем ER – Модели из предыдущей лекции). Переходим к самому сладкому – конструированию БД.
Конструирование БД
Обсуждали проект. Сидоров предлагает крупноблочную архитектуру. Петрович настаивает, что все надо строить по старинке, из кирпича, не по-ламерски. Самый радикальный проект предложил Алекс: построить несколько десятков деревянных коттеджей и потом соединить их подземными туннелями. На Западе сейчас так модно. Напомнили ему, что заказчик требует именно 12-этажный дом. Пытались решить вопрос дуэлью в Quake. Алекса с его коттеджами завалили сразу, но между Петровичем и Сидоровым вышла ничья. В итоге каждый будет строить по своему плану, а потом попытаемся все это соединить, чтоб не рухнуло.
Хроники лаборатории. На стройке.
Таблицы
Итак, нужно создать группу таблиц, удовлетворяя тем требованиям, которые были рассмотрены в предыдущей лекции. Таблицы можно создавать несколькими способами.
Создание таблицы «с нуля».
Для этого нам потребуется знание работы с конструктором таблиц. Перейдем к ранее открытой нами базе данных и попробуем создать еще одну таблицу с помощью конструктора. Для этого дважды щелкаем по иконке «Создание таблицы в режиме конструктора» и приступаем к делу.

Первым делом я создал поле Code, тип которого – счетчик, а смысл – ключевое поле таблицы. Свойства поля при этом были заполнены автоматически. Но, надо же указать, что это поле – ключевое. Делается это просто. Щелкаем правой кнопкой мыши справа от имени поля – там, где на рисунке виден черный треугольник.

В меню выбираем пункт «Ключевое поле» и, как результат, получаем следующую картинку.

Далее, введем какое-нибудь текстовое поле.

Размер текстового поля не может превышать 255 символов и его нужно устанавливать вручную. Обратите внимание на то, что поле сделано индексированным, при этом, в данном поле допустимы повторяющиеся значения (вспоминаем – поле индексировано, значит поиск по нему быстрый, но вот база – база разбухает). И еще – по умолчанию пустые строки запрещаются, но я в свойствах поля установил, что они могут существовать.
Неплохо, также заполнять поле «Подпись», для того, чтобы в отчете автоматически выводилось «Название компании», а не безликое «Name».
Рассматривать все остальные методы работы и свойства я не буду, ибо наш курс является существенно кратким. После того, как все сделано, все поля определены, например как здесь:

можно сохранять таблицу, либо нажав на изображение дискетки, либо попытавшись закрыть конструктор, ответить «Да» на вопрос о сохранении.
Имена полей не должны содержать символов кириллицы и иметь пробелы. Вместо пробела можно ставить знак нижнего подчеркивания, а для задания имен пользоваться транслитом, либо вспоминать английский. Нет, конечно, ругаться Access на мелкие шалости в виде кириллицы и пробелов не будет. Но какие красивые слова в свой адрес вы услышите от программиста....
Создание таблицы из уже существующей.
Допустим, надо сделать таблицу на основе уже существующей, либо перенести таблицу из одной базы в другую.
Сначала разберемся с переносом. Тут есть выбор из двух вариантов – импортирование и связывание. В первом случае – создается копия таблицы. Во втором – создается связь с таблицей в другой БД, но физически она остается там же. Как это сделать...
Щелкаем правой кнопкой мыши по свободному пространству во вкладке «Таблицы».

И, в зависимости от задачи выбираем «Импорт» или «Связь с таблицами». Далее, по шагам выполняем действия и получаем результат:
Выбираем БД, в которой находится таблица, с которой нужно установить связь (которую нужно импортировать)

Выбираем таблицу (таблицы)

Нажимаем на кнопку «ОК» и любуемся результатом.

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

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

и запускаем его.

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

щелкаем по нему правой кнопкой мыши и выбираем пункт «Добавить таблицу»

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

и жмем на кнопку «Добавить».
Попробуем создать одну из связей. Так, таблицы address2 и products связаны по полям comp_okpo и of_txt. Захватываем название поля comp_okpo и бросаем его на of_txt..

В появившемся окне «Изменение связей» можно попытаться обеспечить каскадное удаление и обновление полей. То есть, сделать так, чтобы при удалении и обновлении удалялись/обновлялись все связанные записи.
Нажмем на кнопку «Создать» и любуемся результатом – появлением новой связи.
Работа с данными одной таблицы.
Откроем любую из заполненных таблиц. К примеру, listcomp. Сразу же, невесть откуда, на экране появится новая панель

Рассмотрим ее подробнее

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

Сортировка в строковых полях ведется в лексикографическом порядке. Т.е. при сортировке по возрастанию сначала будут идти пустые записи, потом записи, начинающиеся с символа (кавычка, минус и т.п.), и только потом – с букв.
Теперь о фильтрации. Допустим, я хочу отобрать только те записи, в которых в поле Business присутствует слово «фармацевтическая», либо его аналоги. Для этого достаточно выделить часть слова, допустим «фармац» и щелкнуть по выделению правой кнопкой мыши

и выбрать пункт меню «Фильтр по выделенному», либо нажать на соответствующую кнопку панели инструментов.

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

В поле, где был создан фильтр находится выражение «Like "*фармац*"». Мы отбирали по слову «фармац». При этом этот набор символов находился «внутри» фразы, соответственно, фильтрация и осуществлялась по принципу «неважно где, но чтобы было». Если же, есть желание, чтобы указанное слово или фраза были только вначале – убираем первую звездочку - «Like "фармац*"», а если нужно, чтобы все это было в конце того, что находится в поле - «Like "*фармац"». Если речь идет о числовых полях, то в фильтре можно использовать хорошо известные со школы выражения: >=, <=, >,<. Знак равно обычно не ставится, а просто указывается число, которому должны быть равны значения данного поля. Если нужно усложнить выражение фильтра – используйте операторы OR, END и NOT. Допустим, выражение «(Like "*фармац*" Or Like "*лекарст*") And Like "*произв*"» приведет к отбору только тех записей, в которых есть слова "фармац" или "лекарст" и присутствует слово "произв". Обратите внимание на скобки – при построении такого рода выражений стоит представлять вместо Or знак «+», а вместо And знак «*». Соответствующим образом организуется и приоритет операций. Стоит отметить оператор Not, который действует как знак «-», правда, с соответствующими оговорками. Так, конструкция Not(Like "*фармац*" Or Like "*лекарст*") эквивалентна Not Like "*фармац*" And Not Like "*лекарст*", то есть Or при раскрытии скобок заменяется на And.
Фильтрация не означает удаления ненужных записей. Применение фильтра приводит только к отбору данных по указанным в фильтре условиям.
Иногда бывает полезнее поставить фильтр «от противного», то есть, убрать ненужные записи. Это также возможно сделать через контекстное меню.

Если посмотреть на конструктор фильтра, то установка его таким образом эквивалентна следующему выражению:

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

