![](/user_photo/2706_HbeT2.jpg)
Контрольные вопросы
Сформулируйте назначение, свойства и характеристики СУБД Access.
Перечислите основные элементы интерфейса пользователя Access 2007.
Что такое реляционная модель данных? Каковы её особенности?
Как создается таблица данных в среде Access?
Перечислите и охарактеризуйте типы данных полей Access.
Объясните, что означают свойства полей: “маска ввода”, “подпись”, ”формат поля”, «условие на значение»?
Как осуществляется добавление, удаление и изменение последовательности полей?
Для чего и как создается поле подстановок в таблицах данных?
Что означает потенциальный ключ, первичный ключ, внешний ключ таблицы?
Как устанавливается ключевое поле и индексы таблицы в Access?
Что такое индекс таблицы? Для чего необходимы индексы? Как можно выполнить просмотр и установку индексов?
Как можно создать индекс в модели DAO VBA?
Каковы преимущества индексированного поиска? Объясните, как программно можно произвести индексированный поиск?
Объясните смысл понятия «целостность данных». Как обеспечивается контроль целостности данных в Access?
Охарактеризуйте типы связей между таблицами БД. Как связываются таблицы в Access? Продемонстрируйте установку и удаление связей.
Продемонстрируйте просмотр записей таблицы с использованием фильтра.
Как можно добавить и удалить записи из таблицы Access, используя средства интерфейса и программно?
Рекомендуемая литература
Рудикова Л.В. Базы данных. Разработка приложений. – СПб.: БХВ - Петербург, 2006. – 496 с.
Тимошок Т.В. Microsoft Office Access 2007. Самоучитель. Изд-во «Диалектика», 2008. - 464 с.
Харитонова И., Вольман Н. Программирование в Access 2002: учебный курс. – СПб.: Питер, 2002. – 480 с.
Глушаков С. В. Microsoft Access 2007. Лучший самоучитель. /С.В. Глушаков, А.С. Сурядный, М.И. Шумилов. - М.: АСТ МОСКВА, 2008. - 444 с.
Коннолли Т., Бегг К. Базы данных. Проектирование, реализация и сопровождение. Теория и практика, 3-е изд.: Пер. с англ.: Уч. Пос. – М.: Издательский дом «Вильямс», 2003. – 1440 с.
Приложение 1. Краткие исходные сведения по языку VBA
Для программирования в MS Access используется процедурный язык Visual Basic for Application (VBA) с включением в него библиотек объектов и языка SQL Jet. Язык VBA является объектно-ориентированным языком с поддержкой модели программирования, ориентированной на обработку событий, происходящих в процессе работы пользователя с приложением. Подробные сведения по программированию на языке VBA в Access изложены в специальной литературе, например, в [3], [4].
Код VBA приложения состоит из модулей. Модули состоят из подпрограмм и функций, являющихся процедурами VBA. Модули делятся на два типа: стандартные модули и модули класса. Первые не связаны с конкретным объектом и могут использоваться в разных местах приложения. Модуль класса содержит описание класса и используется при создании объектов класса.
Для объявления переменной обычно используется оператор Dim с синтаксисом
Dim <имяПеременной> [As<типДанных>] [,<имяПеременной >[As <типДанных>]]. Типы данных (data type) и операции VBA описаны в справочной системе (Справка Microsoft Visual Basic).
Объект- это экземпляр определенного класса. Класс в VBA программируется в виде модуля класса. При этом в разделе объявлений описываются свойства класса, а потом определяются методы класса. Примерами объектов Access являются таблицы, поля, формы, отчеты, запросы и др. Свойство – это характеристика объекта, которая может принимать определенное значение. Синтаксис установки значения свойства: объект.свойство = выражение. Метод представляет собой процедуру или функцию, предназначенную для изменения поведения объекта. Синтаксис метода: объект.метод, например, вызов форма1.Refresh обновляет данные в форме1. Событие – это действие или изменение, связанное с объектом. Например, щелчок мыши, сигнал таймера и др. Для любого события объекта может определяться процедура его обработки.
Упорядоченный набор объектов одинакового типа – экземпляров одного класса – образует семейство, которое тоже является объектом. Объекты и семейства VBA образуют объектные модели. Например, объект Application (исходный объект в иерархии объектов, предоставляющий доступ к остальным объектам) содержит семейство Forms, которое состоит из объектов – форм Form. Любой объект формы Form содержит семейство Controls, состоящее из объектов Control (элемент управления, например текстовое поле, кнопка и др.).
Обращение к объекту (ссылка на объект) включает последовательность имен в иерархии объектов, разделяемых точкой. Например, выражение
Application.CurrentProject.AllForms(“Сотрудники”) является ссылкой на объект – форму Сотрудники. В скобках указывается имя объекта семейства или его индекс. Для разделения имени семейства и имени объекта может использоваться также восклицательный знак. Например,
Forms![Заказы]![Код Заказа] есть ссылка на элемент управления Код заказа в открытой форме Заказы семейства Forms. Объект Application представляет собой ссылку на активное приложение Access.
В состав MS Access включено несколько библиотек объектов, основными из которых являются следующие:
Библиотека объектов Microsoft Access (Microsoft Access 12.0 Object Library);
Библиотека объектов доступа к данным (Microsoft DAO 3.6 Object Library);
Библиотека объектов ActiveX (Microsoft ActiveX Data Objects 2.1 Library);
Расширения ADO для поддержки DDL и защиты информации (Microsoft ADO Extensions 2.8 for DDL and Security);
Библиотека объектов Microsoft Jet и репликации (Microsoft Jet and Replication Objects 2.6 Library).
В данной лабораторной работе в программах доступа к данным используется только объектная модель DAO (Data Access Objects). Модель ADO не рассматривается и не используется в связи с ограниченным ресурсом времени. Подключение библиотеки классов Microsoft DAO 3.6 Object Library перед её использованием производится при помощи команды меню Tools| References.
Приложение 2. Создание индекса
В объектной модели DAO для создания индекса таблицы используется метод CreateIndex объекта TableDefs. После создания объекта Index необходимо добавить индексируемое поле (для составного индекса - поля) в семейство Fields объекта Index, а затем добавить объект Index в семейство Indexes объекта TableDef.
В листинге 1 представлен пример создания индекса для таблицы Усилители.
Листинг 1.
' Процедура создания индекса, модель DAO
Sub CreateIndex()
' Объявление объектных переменных и их инициализация
Dim db As Database, td As TableDef, fld As Field
Dim idx As Index
Set db = CurrentDb
Set td = db.TableDefs("Усилители")
With td
'Создание индекса
Set idx = .CreateIndex("Усиление")
With idx
.Fields.Append .CreateField("Коэф_усиления ")
End With
'Добавление индекса в семейство Indexes объекта TableDef
.Indexes.Append idx
End With
db.Close
End Sub
Приложение 3. Поиск записей
При поиске нужных записей для объектов типа Recordset может использоваться группа методов Find и метод Seek. Метод Seek является более быстрым, так как основан на применении индексов таблиц.
В объектной модели DAO имеется четыре метода, относящиеся к группе Find:
FindFirst – определяется первая запись, удовлетворяющая условиям поиска,
FindLast - определяется последняя запись, удовлетворяющая условиям поиска,
FindNext – определяется следующая запись, удовлетворяющая условиям поиска,
FindPrevious - определяется предыдущая запись, удовлетворяющая условиям поиска.
Единственный аргумент каждого из этих методов задает условия поиска.
В листинге 2 приведен пример поиска с помощью метода FindFirst. Условия поиска задаются в окне InputBox, результаты поиска в примере выводятся в окно сообщений Immediate.
Листинг 2.
Function FindChip()
Dim db As Database, rs As DAO.Recordset, i As Integer, idOU As Long
Set db = CurrentDb
Set rs = db.OpenRecordset("Усилители", dbOpenSnapshot)
'ищем первую запись по заданному критерию
idOU = Trim(InputBox("Введите значение коэффициента усиления "))
rs.FindFirst "Коэф_усиления > " & idOU
'если не нашли, то выходим из функции
If rs.NoMatch Then
MsgBox " Такие микросхемы отсутствуют "
Exit Function
Else
Debug.Print " Микросхема " & " " & rs.Fields("Тип") & " " _
& " К-т усиления = " & rs.Fields("Коэф_усиления")
Do Until rs.EOF
rs.FindNext " Коэф_усиления > " & idOU
If rs.NoMatch = False Then
Debug.Print " Микросхема" & " " & rs.Fields("Тип") & " " _
& " К-т усиления = = " & rs.Fields("Коэф_усиления ")
End If
rs.MoveNext
Loop
End If
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
End Function
Метод Seek обеспечивает быстрый поиск с использованием индекса, который нужно предварительно создать, если такого индекса нет, и установить его в качестве текущего. Он позволяет найти только первую запись, удовлетворяющую условию. Синтаксис метода Seek:
<таблица>.Seek <сравнение> ,<ключ1>, <ключ2>,…
Аргумент <сравнение> представляет собой один из операторов сравнения: =, >, >=, < , <=. В аргументах <ключ> указываются значения, которые необходимо найти.
В листинге 3 представлен пример индексного поиска в таблице «Усилители». Ввод условия поиска выполняется через окно InputBox, вывод результата поиска осуществляется в окно MessageBox.
Листинг 3.
' Пример быстрого (индексного) поиска с помощью
' метода Seek для объектов Recordset
Private Sub SeekMkch()
Dim db As Database, td As TableDef, Gain As Long, rs As Recordset
Set db = CurrentDb
' Создание объекта Recordset
Set rs = db.OpenRecordset("Усилители", dbOpenTable)
' Установка активного индекса, соответствующий индекс должен существовать
rs.Index = "Усиление"
Gain = Trim(InputBox("Введите значение коэффициента усиления"))
rs.Seek ">", Gain
' вывод результата поиска
If rs.NoMatch Then
MsgBox "Такой микросхемы нет!"
Else
MsgBox ("Найден Тип " & rs.Fields("Тип") & " " _
& "Коэффициент усиления = " & rs.Fields("Коэф_усиления "))
' Вариант вывода в окно Immediate , команда меню View | Immediate Window
' Debug.Print "Микросхема" & " " & rs.Fields("Тип") & " " _
' & "К-т усиления = " & rs.Fields("Коэф_усиления ")
End If
rs.Close
db.Close
End Sub
Приложение 4. Добавление, изменение и удаление записей
В модели DAO для изменения текущей записи используется метод Edit объекта Recordset, производятся нужные изменения и затем вызывается метод Update для сохранения изменений. Соответствующий пример приведен в листинге 4.
Листинг 4.
'Изменение записи в таблице "Заказчики"
Sub UpdateRecord()
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("Заказчики")
rs.MoveFirst
Do Until rs.EOF
If rs.Название = "Отдел 2" Then
rs.Edit
rs.КонтактноеЛицо = "Киселев М.С."
rs.Update
End If
rs.MoveNext
Loop
rs.Close
End Sub
Добавление новой записи осуществляется с помощью метода AddNew объекта Recordset. Далее присваиваются значения всем или обязательным полям и методом Update сохраняются данные. Пример программы представлен в листинге 5.
Листинг 5.
' Добавление новой записи с помощью метода AddNew
Sub CreateNewRecord()
Dim dbs As Database, rstCustomer As Recordset
' Открытие базы данных
Set dbs = CurrentDb
'Создание переменной типа Recordset (набор записей), представляющей таблицу ‘ "Заказчики"
Set rstCustomer = dbs.OpenRecordset("Заказчики")
' Создание новой записи
rstCustomer.AddNew
' Ввод значений в поля
rstCustomer!Название = "Отдел 4"
rstCustomer!КонтактноеЛицо = "Дмитриев Р.В."
rstCustomer!НомерТелефона = "21-74-68"
' Сохранение новой записи методом Update
rstCustomer.Update
dbs.Close
End Sub
Удаление текущей записи производится методом Delete. Удаляемую запись нужно сделать текущей. Пример:
Листинг 6.
' Пример удаления записи из таблицы "Заказы"
Sub DeleteRecord()
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("Заказы")
Do Until rs.EOF
If rs.КодЗаказа = 2 Then
rs.Delete
End If
Loop
End Sub
Составил доц. Щетинин Ю.И.