Практические задания / Prakticheskaya_rabota_13
.docxПрактическая работа №13
Создание формы средствами VBA.
Цель работы: научиться создавать процедуру для создания таблицы средствами VBA, определять структуру таблицы, состав полей и первичный ключ.
Теоретическая часть
Создайте в базе данных Учебный процесс средствами VBA новую таблицу Деканат с полями код и название. В качестве первичного ключа таблицы используйте поле код. Для проверки работоспособности программы оформите ее, как процедуру обработки события — нажатие кнопки в некоторой форме.
Практическая часть
Для работы со структурой таблицы используйте объекты Database, TableDef, Field и index. Объекты Database и TableDef представляют, соответственно, базу данных и структуру таблицы. Объекты Field и index позволяют определить, соответственно, поле таблицы и ключ таблицы.
1. В процедуре создайте объектные переменные типа Database, TableDef, Field и index, предназначенные для хранения ссылок на соответствующие объекты базы данных.
Dim dbs Учебный процесс As Database
Dim tbl As TableDef
Dim fiel As Field
DimindlAsIndex
2. Для создания нового объекта TableDef — таблицы с именем Деканат, примените метод CreateTableDef к объектной переменной dbsУчебный процесс, которая указывает на объект Database. Для создания новой объекта Field — текстового поля с именем Код, сохраняющего не более двух символов, примените метод createField к объектной переменной tbl, которая указывает на объект TableDef:
Setdbs Учебный процесс = CurrentDb ()
Settbl = dbsУчебный процесс. CreateTableDef («Деканат»)
Set fiel = tbl.CreateField(«Код», dbText, 2)
3. Для добавления поля (ссылка на него сохранена в объектной переменной fiel) в семейство Fields, входящее в объект TableDef, используйте метод Append и запишите:
tbl.Fields.Appendfiel
Обратите внимание, что перед именем семейства, так же, как перед именем метода, который выполняется для указанного перед этим объекта, ставится точка.
4. Для создания в таблице второго поля название используйте ту же объектную переменную fiel и также добавьте его в семейство Fields:
Set fiel = tbl.CreateField ("Название", ' dbText, 15)
tbl.Fields.Appendfiel
5. Для добавления таблицы — объекта TableDef (ссылка на него сохранена в объектной переменной tbl) в семейство TableDefs используйте метод этого семейства Append:
dbsУчебныйпроцесс. TableDef.Appendtbl
6. Теперь создайте первичный ключ новой таблицы:
• Прежде всего, создайте индекс, который будет использоваться в качестве первичного ключа, задав ему имя, например, то, которое по умолчанию используется при определении ключа таблицы в конструкторе — PrimaryKey. Для этого используйте метод Createlndex объекта TableDef:
Setindl = tbl.Createlndex("PrimaryKey")
• Следующей инструкцией задайте поле, на основе которого строится индекс (поле код) indl.createField("Код"), и включите его в семейство полей индекса. В модели объектов доступа к данным поля индекса включаются в семейство Fields, которое включается не только в объект TableDef, но и в объект Index.
indl.Fields. Append indl.CreateField("Код")
• Объявите индекс первичным ключом таблицы деканат. Для этого присвойте свойству индекса Primary значение True:
indl.Primary = True
• Добавьте индекс (ссылка на него сохранена в объектной переменной indl) в семейство индексов объекта TableDef:
tbl.Indexes.Appendindl
7. Окончательно процедура запишется следующем виде:
Private Sub Кнопка_Сliск ()
On Error GoTo Err_Кнопка_Сliск
Dim dbs Учебный процесс As Database
' Определение объектных переменных для таблицы и поля
Dim tbl As TableDef
Dim fiel As Field
Dim indl As Index
Set dbs Учебный процесс = CurrentDb()
' Создание нового объекта — таблицы с именем Деканат и присваивание объектной переменной ссылки на него
Settbl = dbs Учебный процесс. СrеаtеТаb1еDеf ("Деканат")
' Создание текстового поля с именем Код и длиной в 2 символа, присваивание объектной переменной ссылки на него
Set fiel = tbl.CreateField("Koд", dbTеxt, 2)
' Добавление поля в семейство Fields объекта TableDef с помощью метода Append
tbl.Fields.Appendfiel
' Создание второго поля в таблице
Set fiel = tbl.CreateField ("Название",dbText, 15)
tbl. Fields. Append fiel
' Добавление таблицы в семейство TablеDefs с помощью метода Append
dbsУчебный процесс.TableDefs.Append tbl
' Создание для новой таблицы индекса с именем PrimaryKey
Set ind1 - tbl. Createlndex("PrimaryKey")
' Определение поля, составляющего индекс (поле Код), и добавление его в семейство полей индекса
ind1 .Fields. Append ind1 .CreatеFiеld("Koд")
' определение индекса как первичного ключа для таблицы Деканат
ind1 .Primary = True
' добавление индекса в семейство индексов tbl. Indexes. Append ind1
Exit_Кнопка_Click:
Exit Sub
Еrr_Кнопка_Сliск;
MsgBox Err.Description
Resume Exit_Кнопка_Сlick
EndSub
8. Возвратитесь в Access и, нажав в форме кнопку, к которой привязана процедура обработки этого события, выполните процедуру. В БД создается таблица деканат с полями код и название, причем поле код объявлено ключевым, а индекс имеет имя PrimaryKey. Чтобы убедиться в этом, откройте таблицу в режиме конструктора.
-
Выполните процедуру повторно, и будет выведено сообщение, представленное на рис. 1
Рис. 1. Сообщение, формируемое инструкцией обработки ошибки
Это сообщение является результатом обработки ошибки, которая производится за счет инструкций в начале процедуры:
On Error GoTo Еrr_Кнопка__Сliск
ивконцепроцедуры:
Еrr_Кнопка_Сliск: MsgBox Err.Description
Resume Exit_Кнопка_Click
Аргумент Err.Description инструкции MsgBox определяет строковое значение, формируемое свойством Description, объекта Err. Значением свойства является предупреждающее сообщение с описанием перехваченной ошибки.
Контрольные вопросы
-
Что такое первичный ключ?
-
Что представляют объекты Database и TableDef?
-
Что позволяют определить объекты Field и index?
-
Что такое индекс?
-
Для добавления поля в семейство Fields, входящее в объект TableDef, что используется?
-
Для создания нового объекта TableDef, применяется метод?
-
Что ставится перед именем семейства, так же, как перед именем метода, который выполняется для указанного перед этим объекта?
-
Как объявить индекс первичным ключом таблицы?
-
Что определяет аргумент Err.Description инструкции MsgBox?
-
Как проверить работу процедур?