Таблица 2.3. Примеры условий на значение поля
Условие | Комментарий |
>= 0 | значение должно быть больше или равно 0 |
< #10.03.98# | дата, предшествующая 10 марта 1998 года |
>10 Or Is Null | значение должно быть больше 10 или пусто |
<= 20 And >= 10 | значения должны находиться между 10 и 20 |
Not «Москва» | значение, отличное от слова «Москва» |
Between 0 And 100 | значения должны находиться между 0 и 100 |
"Омск" Or "Томск" | любое значение из списка городов |
In ("Омск"; "Томск") | любое значение из списка городов |
In (1; 3; 5; 11; 17) | любое значение из списка чисел |
Like "А*" | любой текст, начинающийся с буквы A |
Условие на значение задается в окне Построителя выражений выражением, состоящим из операторов сравнения (>, >=, <, <= и т.д.) и операндов — значений, используемых для сравнения (см. рис. 2.11).
Рис.2.11.
Если выражение не содержит оператора, то Access будет использовать оператор «равно» (=). Условие может содержать несколько сравнений, разделенных логическими операторами Or (логическое сложение) или And (логическое умножение). Для отрицания некоторого условия используется логический оператор Not (логическое отрицание). Текстовые значения должны заключаться в кавычки. Если в качестве операнда используется дата, то ее нужно заключить в символы номера (#).
Для проверки, попадает ли значение в заданный интервал, можно использовать логический оператор And или оператор Between. Чтобы проверить, содержится ли значение в заданном списке, нужно использовать логический оператор Or или оператор In. Проверку соответствия вводимого значения текстового поля или поля Memo некоторому шаблону можно осуществить с помощью оператора Like.
Для создания условия на значение поля можно использовать построитель выражений, который вызывается при нажатии кнопки Построить. Он содержит перечень операторов, функций и констант, которые можно добавлять в создаваемое выражение.
7). Индексированное поле
Создается индекс по данному полю. Индекс указывает местоположение записей таблицы на диске и помогает Access быстро находить нужные данные. Если таблица содержит много записей и часто проводится операция поиска или сортировки по определенным полям, то ее выполнение можно значительно ускорить, создав индекс по этим полям. Access также использует индексы для установления связей между таблицами. Ключевые поля таблицы индексируются автоматически. При индексировании поля есть две возможности. Выбор варианта Да (Совпадения не допускаются) означает, что создается уникальный индекс. В этом случае таблица не может иметь в этом поле повторяющиеся значения. При выборе варианта Да (Совпадения допускаются ) создается индекс, учитывающий возможность повторения значений в этом поле.
Для создания индекса, основанного на нескольких полях (составного индекса) нужно щелкнуть по кнопке Индексы панели инструментов и ввести в столбце Индекс окна диалога имя индекса. Затем в столбце Имя поля следует указать первое поле индекса и добавить дополнительные поля в расположенные ниже строки, не вводя других имен индексов. В столбце Порядок сортировки можно изменить порядок сортировки для любого поля, входящего в создаваемый индекс.
Для удаления индекса нужно щелкнуть по кнопке Индексы, выделить
строки, определяющие удаляемый индекс, и нажать клавишу Delete.
8). Сообщение об ошибке
Содержит текст сообщения, которое будет выведено на экран при вводе в поле данных, нарушающих условие на значение. Например, если задать для поля Оценка условие In (2; 3; 4; 5) и ввести текст сообщения: «Введена неверная оценка», то при попытке ввода любого символа, отличного от вышеперечисленных цифр, или текстового значения, Access 2007 откажется занести его в таблицу Сессия и выдаст введенное ранее сообщение.
2.4. Ключевое поле
Как уже говорилось, обычно таблица содержит ключевое поле (ключ). Использование ключа дает следующие преимущества:
– Access поддерживает уникальность записей, не позволяя вводить и хранить в таблице записи, имеющие одинаковое значение в ключевом поле;
– используя ключ, Access устанавливает связи между таблицами;
– при создании индекса по ключевому полю, Access ускоряет поиск нужных записей и выполнение запросов;
– Access автоматически сортирует и отображает записи таблицы в порядке возрастания или убывания значений в ключевом поле.
Простейший способ создания ключевого поля заключается в создании поля типа Счетчик и объявлении его ключевым. Если до сохранения созданной таблицы ключ не был определен, то Access 2007 создает его именно таким способом. Если в таблице имеется поле, содержащее значения, уникальные для каждой записи, то это поле можно объявить ключевым. Пример поля такого типа — поле Код студента в таблице Студенты, содержащее номера зачетных книжек студентов (см. рис. 2.12).
Рис. 2.12
Такое поле называется простым ключом. В том случае, когда нельзя гарантировать уникальность значений ни одного из полей, можно создать ключ, состоящий из нескольких полей. Такое ключевое поле называется составным ключом. Пример составного ключа — совокупность полей Код студента и Код экзамена в таблице Сессия. Ни одно из этих полей по отдельности не может использоваться в этой таблице в качестве ключевого, так как каждое из них содержит повторяющиеся значения. Однако комбинация значений этих полей уникальна, поэтому их совокупность может служить ключом. Чтобы объявить одно или несколько полей ключевыми, нужно выделить эти поля, щелкнув по ним мышью. Если полей несколько, то их выделение следует производить, держа нажатой клавишу Ctrl. Затем нужно щелкнуть по кнопке Ключевое поле панели инструментов. Для удаления ключа достаточно выделить составляющие его поля и повторно щелкнуть по кнопке Ключевое поле. Другой способ — щелкнуть по кнопке Индексы и затем удалить индекс PrimaryKey.
2.5. Подстановка данных
Подстановка данных является очень полезной возможностью в Access 2007. Ее использование во многих случаях позволяет существенно упростить процедуру ввода данных. Фактически подстановка сводится к созданию столбца подстановки (либо из существующей таблицы, либо из фиксированного количества введенных значений) (см. рис.2.13).
Рис. 2.13.
Чтобы создать подстановку для поля таблицы, проще всего использовать соответствующий мастер. Для этого нужно выбрать в качестве типа данных поля значение: Мастер подстановок (см. рис. 2.14).
Рис. 2.14
2.6. Установка свойств таблицы
Кроме задания свойств полей пользователь имеет возможность задать свойства таблицы. Эти свойства относятся ко всей таблице и всем ее записям. В частности, можно задать условия на значения в записях, относящиеся не к одному, а нескольким полям таблицы, и указать текст выводимого сообщения при нарушении этих условий.
Для установки свойств таблицы нужно щелкнуть правой кнопкой мыши в окне конструктора и выбрать в появившемся контекстном меню пункт Свойства (см. рис.2.15).
Рис. 2.15
В появившемся слева окне Свойства таблицы (см. рис 2.16.) следует задать нужные свойства таблицы.
Рис. 2.16
Пример. Можно задать следующее условие на значения в записях таблицы Заказы: дата получения заказа не превосходит дату его отправки. Для этого вызовем окно Свойства таблицы, щелкнем по ячейке Условие на значение и с помощью построителя выражений введем выражение: [Дата получения]<=[Дата отправки]. Затем введем в ячейку Сообщение об ошибке текст: Попытка ввода ошибочной даты.
Рис. 2.17. Сообщение об ошибке
Если теперь попытаться ввести в таблицу новую запись или изменить уже существующую запись таким образом, что введенное условие окажется нарушенным, то Access 2007 откажется выполнить эту операцию и выдаст предупреждающее сообщение (см. рис. 2.17).
Глава 3. Связи в ACCESS
3.1. Определение связей между таблицами
В созданной базе данных таблицы связаны друг с другом. Для связанных таблиц изменение некоторых свойств полей становится невозможным. В связанную таблицу нельзя добавить новое поле или удалить существующее поле, но можно добавить записи, а также изменить значения отдельных полей. Если связь установлена с таблицей Access, то доступна также операция удаления записей.
После того как в БД созданы основные таблицы, следует указать, как они связаны друг с другом. Эти связи Access будет использовать в запросах, формах и отчетах при отборе информации из нескольких таблиц. Задание связей между таблицами позволяет также обеспечить защиту целостности данных в БД. Окно связей вызывается командой Схема данных меню Работа с базой данных (см. рис. 3.1)
Рис. 3.1.
Связь между двумя таблицами, одна из которых является главной, а другая подчиненной, устанавливает соответствие между записями этих таблиц. Для установления связи нужно, чтобы в главной таблице существовало поле или группа полей, совокупность значений которых однозначно определяла бы запись (была уникальной). Обычно в качестве поля (группы полей) связи выбирается ключевое поле таблицы, но достаточно, чтобы оно имело уникальный индекс. В соответствие ему ставится поле (группа полей) подчиненной таблицы, называемое внешним ключом. Связь между записями устанавливается по совпадению значений в полях связи.
!!! Поля связи могут иметь разные имена, но они должны иметь один тип данных и иметь однотипное содержимое.
Исключение из этого правила: поле типа Счетчик можно связывать с числовым полем, имеющим в свойстве Размер поля значение «Длинное целое». Кроме того, связываемые поля числового типа должны иметь одинаковые значения свойства Размер поля. Например, для получения информации о студентах и полученных ими оценках следует определить связь по полям Код Студента в таблицах Студенты и Сессия. Главной в этой связи будет таблица Студенты, а подчиненной — таблица Сессия. Каждой записи в главной таблице — данным о студенте — соответствует несколько (или ни одной) записей из подчиненной таблицы — информация об его оценках. Поле Код Студента в таблице Сессия является внешним ключом.
3.2. Типы связей между таблицами
1. Связь типа «один-ко-многим»
Описанная выше связь между таблицами Студенты и Сессия — пример связи типа «один-ко-многим». Это наиболее распространенный тип связи. При таком типе связи каждой записи в главной таблице могут соответствовать одна, несколько или ни одной записи в подчиненной таблице (например, сотрудники одного отдела: отдел один, а сотрудников в нем много), а каждая запись в подчиненной таблице не может иметь более одной соответствующей ей записи в главной таблице.
2. Связь типа «один-к-одному»
При связи типа «один-к-одному» каждой записи в главной таблице может соответствовать не более одной записи в подчиненной таблице, и наоборот, каждая запись в подчиненной таблице не может иметь более одной соответствующей ей записи в главной таблице (например, у гражданина страны есть только один паспорт, а не много).
Этот тип связи применяется реже, так как такие данные могут быть помещены в одну таблицу. Связь типа «один-к-одному» обычно используют для разделения таблиц, имеющих много полей, а также для сохранения сведений, относящихся к подмножеству записей в главной таблице. Например, такой тип связи использован при установлении связей между таблицами Студенты и Общежитие (см. рис.3.2).
Рис. 3.2. Связи между таблицами в БД Деканат
3. Связь типа «многие-ко-многим»
При установлении связи между таблицами возможна ситуация, когда между ними нельзя установить отношение «главная-подчиненная» из-за того, что любой записи в одной таблице может соответствовать несколько записей из другой таблицы. Примером могут служить таблицы Студенты и Преподаватели, так как каждый студент сдавал экзамены нескольким преподавателям, а каждый преподаватель принимал экзамен у нескольких студентов. Поэтому между этими таблицами нельзя установить ни одну из описанных выше связей. Это пример связи типа «многие-ко-многим». Access непосредственно не поддерживает такой тип связи. Но ее можно реализовать в виде двух связей типа «один-ко-многим» с помощью третьей (связующей) таблицы. В качестве такой связующей таблицы в БД Деканат используется таблица Сессия (см. рис. 3.2). Она связана как с таблицей Студенты по полю Код студента, так и с таблицей Преподаватели по полю Код преподавателя.
После того как эти связи установлены, можно легко определить с помощью соответствующих запросов, у каких студентов принимал экзамены данный преподаватель или кому сдавал экзамены данный студент.
3.3. Создание связей
Для создания связей между таблицами нужно вернуться в окно БД и закрыть все открытые таблицы (иначе на экране вы увидите сообщение: ТАБЛИЦА ЗАБЛОКИРОВАНА ЯДРОМ БАЗЫ ДАННЫХ). Далее нужно щелкнуть по кнопке Схема данных панели инструментов, либо вызвать щелчком правой кнопки мыши контекстное меню и выбрать в нем пункт Схема данных. Если связи в БД определяются впервые, то будет открыто пустое окно Схема данных. В это окно нужно добавить таблицы, между которыми устанавливается связь. Для добавления таблиц следует вызвать щелчком правой кнопки мыши контекстное меню окна Схема данных и выбрать в нем пункт Добавить таблицу. Откроется диалоговое окно Добавление таблицы, содержащее список таблиц БД (см. рис. 3.3). Для добавления таблицы нужно щелкнуть по ее имени, а затем — по кнопке Добавить. После того как все таблицы отобраны, нужно закрыть это окно и вернуться в окно Схема данных.
Рис. 3.3. Окно Добавление таблицы
Диалоговое окно Добавление таблицы дает возможность добавить как таблицы, так и запросы. Иногда нужно определить связи между таблицами и запросами или только между запросами, чтобы Access знал, как правильно объединять эти объекты.
Чтобы определить связь между таблицами, находящимися в окне Схема данных, следует перенести с помощью мыши поле связи главной таблицы и поместить его на поле связи подчиненной таблицы. Откроется диалоговое окно Изменение связей (см. рис. 3.4).
Рис. 3.4.
В левом столбце выводятся имена главной таблицы и ключа, используемого для связи, а в правом столбце — имена подчиненной таблицы и внешнего ключа. Для изменения поля следует открыть список полей справа от его имени. Если связь производится по нескольким полям, то их имена можно добавить, используя пустые строки. Обычно Access сам определяет тип создаваемой связи, проводя анализ полей, для которых определяется связь. Если только одно из полей является ключевым или имеет уникальный индекс, создается связь «один-ко-многим». Связь «один-к-одному» создается в том случае, когда оба связываемых поля являются ключевыми или имеют уникальные индексы.
Создавая связь, нужно настроить режим обеспечения целостности данных . Обеспечение целостности позволяет избежать ситуации, когда в подчиненной таблице имеются записи, не связанные с записями главной таблицы. Если этот режим включен, то Access не разрешит добавить в подчиненную таблицу запись, для которой не найдется связанной с ней записи из главной таблицы. Нельзя будет также удалить из главной таблицы запись, имеющую связанные с ней записи в подчиненной таблице. Например, нельзя будет добавить в таблицу Сессия запись с кодом студента, отсутствующим в таблице Студенты. Соответственно, из таблицы Студенты нельзя удалить запись о студенте, пока в таблице Сессия содержатся сведения о его оценках.
Режим обеспечения целостности данных этой связи можно включить, если выполнены следующие условия:
· поле связи главной таблицы является первичным ключом или имеет уникальный индекс;
· связанные поля имеют один и тот же тип данных;
· обе связанные таблицы принадлежат одной базе данных Access.
Если для связи включен этот режим, то можно дополнительно указать, следует ли автоматически выполнять для связанных записей операции каскадного обновления и каскадного удаления. Если включить режим Каскадное обновление связанных полей, то при изменении значения ключа в главной таблице будут автоматически обновлены соответствующие значения в связанных записях подчиненной таблицы. При включении режима Каскадное удаление связанных записей при удалении записи из главной таблицы будут автоматически удалены связанные с ней записи в подчиненной таблице. В том случае, когда эти режимы не включены, а режим обеспечения целостности данных включен, Access не позволит изменить значение в ключевом поле главной таблицы, а также удалить запись в главной таблице, если в подчиненной таблице имеются данные, связанные с этой записью. После завершения операции создания связи нужно нажать кнопку ОК. Связь отображается в виде линии, соединяющей две таблицы. Если включен режим обеспечения целостности данных, то Access изобразит на конце линии, соответствующей главной таблице, цифру 1. На другом конце линии, соответствующем подчиненной таблице, будет изображен символ бесконечности ∞ для связи типа «один-ко-многим» и цифра 1 для связи типа «один-к-одному».
Если перенести с помощью мыши поле, не являющееся ключевым или не имеющее уникального индекса, на другое поле, которое также не является ключевым или не имеет уникального индекса, будет создана связь неопределенного типа. Режим обеспечения целостности данных в этом случае включить нельзя.
Любую связь можно изменить или удалить. Для изменения связи нужно сделать двойной щелчок по линии связи, и отредактировать ее в открывшемся окне Связи. Чтобы удалить связь, следует щелкнуть по ней и нажать клавишу Delete.
Глава 4. Работа с таблицей
1.1. Модификация БД. Операции над таблицами
Access позволяет достаточно просто внести изменения в БД. Однако прежде чем вносить в БД изменения, нужно иметь в виду следующее:
– Access не вносит автоматически сделанные в таблицах изменения в использующие эти таблицы объекты (запросы, формы и т.д.).
– Нельзя изменять тип данных для поля, которое используется при определении связи между таблицами. Сначала нужно удалить соответствующую связь.
– Прежде чем открывать таблицу в режиме конструктора для внесения изменений, нужно закрыть все объекты, которые на нее ссылаются.
Мы рассмотрим следующие операции над таблицей: копирование, переименование, удаление и экспорт. Все эти операции производятся в окне БД.
1. Копирование таблицы
Чтобы создать копию таблицы в БД, нужно вызвать ее контекстное меню и выбрать пункт Копировать (другой способ — выделить щелчком мыши таблицу и нажать клавиши Ctrl+C или щелкнуть по кнопке Копировать панели инструментов). Затем нужно нажать клавиши Ctrl+V или щелкнуть по кнопке Вставить панели инструментов. Access откроет диалоговое окно Вставка таблицы и предложит ввести имя новой таблицы; выбрать режим копирования. В зависимости от того, какой режим выбран, Access создаст пустую таблицу, имеющую такую же структуру, что и исходная таблица; создаст точную копию исходной таблицы (этот режим задан по умолчанию) или добавит данные из исходной таблицы в указанную таблицу.