Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
14
Добавлен:
24.05.2015
Размер:
1.51 Mб
Скачать

Лабораторная работа №6 Работа с базами данных

Цель работы: Изучить основы работы с базами данных, ознакомиться с объектами доступа к данным, научиться создавать и открывать базы данных, создавать приложения по работе с базами данных.

Порядок выполнения работы:

  1. Изучить теоретический материал, представленный ниже.

  2. Выполнить индивидуальное задание.

  3. Представить работу преподавателю.

Порядок работы при объектном доступе к данным

При извлечении информации с помощью объектного доступа к данным надо:

создать рабочую область (объект workspace);

открыть базу (источника) данных (объект Database);

создать набор записей (объект Recordset);

непосредственно работать с конкретными записями и полями.

Создание рабочей области

Рабочую область можно создать методом CreateWorkspace Объекта DBEngine.

Синтаксис:

Set workspace = CreateWorkspace(Name, UserName, Password, UseType)

Параметр

Описание

Workspace

Объектная переменная, представляющая создаваемый объектWorkspace.

Name

Строковое выражение, содержащее уникальное имя нового объекта Workspace.

UserName

Строковое выражение, определяющее владельца нового объектаWorkspace.

Password

Строковое выражение, содержащее пароль для нового объект Workspace.

UseType

Определяет тип рабочей области. Допустимые значения: dbUseJet (создание рабочей области ядра Microsoft Jet); D dbUseODBC (создание рабочей области ODBCDirect).

Например, для создания рабочей области Microsoft Jet можно использовать следующие инструкции:

Dim ws As CreateWorkspace

Set ws = DBEngine.CreateWorkspace(Name:=”Myws”, UserName:=”admin”, _

Password:=””, UseType:=dbUseJet)

Рабочую область ODBCDirect можно создать следующим образом (ссылка на объект DBEngine применяется по умолчанию, поэтому во второй инструкции объект DBEngine опущен):

Dim ws As CreateWorkspace

Set ws = DBEngine.CreateWorkspace(Name:=”Myws”, UserName:=”UID”, _

Password:=””, UseType:=dbUseODBC)

Создание базы данных

Если базы данных не существует на диске, то надо создать всю ее структуру, а потом заполнить. Удобнее это сделать, например, при помощи Access, но можно создать базу данных и с помощью VBA непосредственно из Excel. На простом примере покажем, как это делается. Приводимая ниже процедура издает базу данных, которая записывается в файл Example.MDB. База данных состоит из одной таблицы Первый курс, в которой имеется четыре поля Фамилия, Группа, Предмет, Оценка. В коде также устанавливаются размеры их полей и типы вводимых в них значений. На рис. при помощи Access показана структура созданной в Excel базы данных (заполнять эту базу данных мы будем уже в следующем примере). База данных может создаваться только один раз, а потом она уже должна открываться. В противном случае будет генерироваться ошибка. Для избежания этой ситуации в программе предусмотрена простейшая проверка наличия файла с базой данных. Если такой файл имеется, то происходит выход из программы еще до начала создания базы данных.

Sub CreateDB_Click()

' проверка наличия файла на диске

If Dir(ThisWorkbook.Path & "\ira1.MDB") <> Empty Then

MsgBox "База данных уже существует"

Exit Sub

End If

Dim ws As workspace

Dim db As Database

Dim tb As TableDef

Dim fIdName As Field

Dim fIdGroup As Field

Dim fIdSubject As Field

Dim fIdMark As Field

' Создание рабочего пространства

Set ws = DBEngine.Workspaces(0)

' Создание базы данных в каталоге рабочего файла

Set db = ws.CreateDatabase(ThisWorkbook.Path & "\1.MDB", _

dbLangGeneral)

' Создание таблицы

Set tb = db.CreateTableDef("Первый курс")

' Создание полей

With tb

Set fIdName = .CreateField("Фамилия", dbText, 30)

Set fIdGroup = .CreateField("Гpynna", dbText, 50)

Set fIdSubject = .CreateField("Предмет", dbText, 50)

Set fIdMark = .CreateField("Оценка", dbInteger, 10)

End With

' Присоединение каждого поля к таблице

With tb.Fields

.Append fIdName

.Append fIdGroup

.Append fIdSubject

.Append fIdMark

End With

' Присоединение таблицы к базе данных

db.TableDefs.Append tb

' Закрытие базы данных

db.Close

End Sub

Приведем необходимые пояснения к программе.

Метод CreateDatabase создает базу данных.

Синтаксис:

Set database = object.CreateDatabase (Name, Locale, Options)

Параметр

Описание

Database

Объектная переменная, представляющая создаваемый объект Database

Object

Объектная переменная, представляющая существующий объект Workspace

Name

Полное имя создаваемой базы данных

Locale

Задает порядок, в котором сравниваются строки. Для языков с латинскими буквами значение этого параметра равно DblangGeneral, для русского языка – DblangCyrillic

Options

Задает версию формата данных

Метод CreateTableDef создает новую таблицу в базе данных.

Синтаксис:

Set tabledef = object.CreateTableDef (Name, Attributes, Source, Connect)

Параметр

Описание

Tabledef

Объектная переменная, представляющая создаваемый объект Tabledef

object

Объектная переменная, представляющая существующий объект Database

Name

Имя таблицы

Attributes

Задает атрибуты таблицы

Source

Задает имя таблицы из внешнего источника данных, на основе которой строится данная таблица

Connect

Содержит информацию о базе данных, из которой берется таблица

Метод CreateField создает новое поле в таблице в базы данных.

Синтаксис:

Set field = object.CreateField (Name, Type, Size)

Параметр

Описание

field

Объектная переменная, представляющая создаваемый объект Field

object

Объектная переменная, представляющая объект Relation или Tabledef, для которого создается поле

Name

Имя поля

Type

Тип данных. Допустимые значения: dbBigint, dbBinary, dbBoolean, dbByte, dbChar, dbCurrency, dbDate, dbDecimal, dbDouble, dbfloat, dbGUID, dblnteger, dbLong, dbLongBinary, dbMemo, dbNumeric, dbSingle, dbText, dbTime, dbTimeStamp, dbVarBinary.

Size

Размер в байтах поля

Открытие базы (источника) данных

Если база данных существует, то ее достаточно открыть. Сделать это можно методом OpenDatabase объекта Workspace.

Синтаксис:

Set database = object.OpenDatabase (Name, Options, Readonly, Connect)

Параметр

Описание

Database

Объектная переменная, представляющая создаваемый объект Database.

Object

Объектная переменная, представляющая существующий объект Workspace. Если этот параметр опущен, то метод OpenDatabase использует стандартную рабочую область.

Name

Строковое выражение, задающее имя существующего файла базы данных с ядром Microsoft Jet или имя источника данных ODBC.

Options

Для рабочей области ядра Microsoft Jet допустимыми являются следующие значения аргумента параметра:True (открытие базы данных для монопольного доступа); False (по умолчанию, открытие базы данных для общего доступа).Для рабочей области ODBCDirect допустимыми являются следующие значения аргумента параметра: dbDriverNoPrompt, dbDriverPrompt, dbDriverComplete, dbDriverCompleteRequired.

Readonly

Допустимые значения:True (база данных открывается только для чтения); False (по умолчанию, база данных открывается как для чтения, так и записи).

Connect

Дополнительный параметр, содержащий сведения о подключении, в том числе и пароли

Например, для открытия базы данных с ядром Microsoft Jet можно использовать следующие две инструкции:

Dim db As Database

Set db = ws.OpenDatabase(Name:=ThisWorkbook.Path & "\Пример.mob", Options:=True)

Объект Recordset

После открытия базы данных можно создать объект Recordset. Он представляет собой записи .исходной таблицы базы данных или результирующий набор записей, возвращаемый в результате запроса. Позволяет управлять данными в базе данных на уровне записи. На уровне полей управление данными осуществляется объектом Field.

Имеются следующие типы объекта Recordset:

Тип

Описание

Table

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

Dynaset

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

Snapshot

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

Forward-only

Статический режим с последовательным доступом. Перемещаться от записи к записи можно только вперед. Этот режим самый скоростной.

Dynamic

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

Создание объекта Recordset

Объектная переменная типа Recordset создается при помощи метода OpenRecordset. Как и любую объектную переменную, ее надо сначала объявить, а только потом установить ссылку на объект, возвращаемый методом OpenRecordSet.

Синтаксис для объекта Database:

Set recordset = object.OpenRecordset (Source, Type, Options, Lockedits)

Синтаксис для объектов QueryDef, Recordset и TableDef:

Set recordset = object.OpenRecordset(Type, Options, Lockedits)

Параметр

Описание

Recordset

Объектная переменная, представляющая открываемый объект Recordset.

Object

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

Source

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

Type

Константа, указывающая тип открываемого объекта Recordset. Допустимые значения: dbOpenTable, dbOpenDynaset, dbOpenSnapshot, dbOpenForwardOniy и dbOpenDynamic.

Options

Специфицирует работу пользователя с объектом Recordset. Приведем некоторые из допустимых значений: dbAppendOnly (пользователь может добавлять записи, но не редактировать уже существующие); dbReadOnly (запрещено вносить изменения в записи); dbDenyWrite (другим пользователям запрещено вносить изменения).

Lockedits

Устанавливает тип блокировки данных. Допустимые значения: dbReadOnly, dbPessimistic, dbOptimistic и dbOptimisticValue.

Методы и свойства объекта Recordset

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

Методы объекта Recordset:

Метод

Описание

AddNew

Создает и добавляет новую запись. После внесения изменений в новую запись следует вызвать метод Update для сохранения изменений и добавления записи в объект Recordset. До вызова метода Update изменения в базу данных не заносятся.

Clone

Создает копию объекта Recordset.

Синтаксис:Set Копия = Оригинал.Clone

Close

Закрывает открытый объект доступа к данным.

Delete

Удаляет текущую запись в обновляемом объекте Recordset.

Edit

Копирует текущую запись из обновляемого объекта Recordset в буфер копирования для последующего изменения. После внесения изменений в новую запись следует вызвать метод Update для сохранения изменений и добавления записи в объект Recordset

MoveFirst

Делают текущей первую, последнюю, следующую или предыдущую запись объекта Recordset.

Findfirst

Находят первую, последнюю, следующую или предыдущую запись, удовлетворяющую заданным условиям, и делают эту запись текущей. Синтаксис: (FindFirst | FindLast I FindNext I FindPrevious}

Criteria,

где Criteria — это выражение или переменная типа String, используемая для поиска записи.

Приведем несколько примеров критериев:

"[Оценка] > 3"

"[Фамилия] =- 'Петров' "

"[Оценка] =5 AND [Предмет] = 'Информатика' "

"[ДатаЭкзамена] = #17/06/99#

Seek

Находит в индексированном объекте Recordset типа Table запись, удовлетворяющую заданным условиям для текущего индекса, и делает эту запись текущей.

Синтаксис: Seek Comparison, Key1, Key2,... Кеу13

Comparison—допустимые значения: "<", "<=", "=", ">=" или ">";

Key1, Key2, ..., Кеу13 — одно или несколько значений ключевых полей в текущем индексе объекта Recordset.

GetRows

Загружает строки объекта Recordset в массив.

Синтаксис:Set ИмяМассива = Ha6opЗаписей.GetRows (NumRows)

где NumRows — число строк.

Update

Сохраняет вставки и изменения, произведенные в объекте Recordset при помощи методов AddNew и Edit

CancelUpdate

Отменяет все изменения объекта Recordset, выполненные при помощи методов AddNew и Edit.

Перечислим наиболее часто используемые свойства объекта Recordset.

Свойство

Описание

bof

Возвращает значение True, если указатель текущей записи расположен перед первой записью набора, и значение False, если расположен на первой записи набора или на любой записи после нее.

eof

Возвращает значение True, если указатель текущей записи расположен после последней записи набора, и значение False, если на последней записи набора или на любой записи перед ней.

Bookmark

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

NoMatch

Возвращаемое значение True, если нужная запись не найдена, и False — в противном случае.

RecordCount

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

Filter

Задает или возвращает значение, определяющее записи, которые будут включены в открываемый объект Recordset. При указании критерия фильтрации названия полей заключаются в квадратные скобки. Приведем несколько примеров критериев:

[Оценка] = 5

[Оценка] >= 3

[Оценка] =5 AND [Предмет] = "Информатика"

[Оценка] = 4 AND [Предмет] = "Информатика"

(Оценка] >= 4 AND [Предмет] IN ("Информатика", "Право")

[Длина]*[Ширина] > 100

В критериях вместо знака равенства допустимо использование ключевого слова like, например

[Оценка] LIKE 5

Sort

Задает или возвращает порядок сортировки записей в объекте Recordset (только в рабочей области Microsoft Jet).Для сортировки по возрастанию используется ключевое слово ASC, по убыванию — desc. Например:

[Оценка] ASC[Фамилия] DESC

и сортировка первоначально по полю Оценка, а потом по полю Фамилия [Оценка] ASC, [Фамилия] DESC

Пример приложения по работе с базами данных

Рассмотрим работу с базой данных на примере следующего простого приложения, где используются все основные операции с записями. База данных находится в файле Example.MDB, который был нами создан при разработке приложения в разделе "Создание базы данных" этой главы. Его также легко создать в Access. База данных имеет простейшую структуру: состоит из одной таблицы Первый курс, в которой имеется только четыре поля: Фамилия, Группа, Предмет и Оценка. При запуске приложения на экране отображается диалоговое окно Первый курс (рис. 9.3).

Опишем действия программы:

  1. При активизации диалогового окна выводит в поля ввода информацию о первом студенте из таблицы и в надписи Число записей указывает общее число записей в таблице.

  2. При нажатии кнопок ">" и "<" происходит перемещение на одну запись вперед и назад, соответственно, а при нажатии кнопок ">>" и "<<" перемещение в конец и начало таблицы.

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

  4. При нажатии кнопки Удалить удаляется запись.

  5. При нажатии кнопки Новая запись создается новая запись по данным, внесенным в поля ввода.

  6. При нажатии кнопки Редактировать вносятся изменения в запись из базы данных.

  7. При нажатии кнопки Закрыть закрывается база данных и диалоговое окно

  8. При выборе переключателя хорошисты и отличники в диалоговом окне выводятся данные только о хорошистах и отличниках, а при выборе переключателя все — выводится информация обо всех студентах.

Для создания этого приложения сконструируйте форму, на которой разместите пять надписей, четыре поля ввода, десять кнопок, рамку и два переключателя. Установите значения свойства Name полей ввода равными txtName, txtGroup, txtSubject, txtMark, КНОПОК — равными cmdSearch, cmdSearchNext, cmdDelete, cmdAddNew, cmdEdit, cmdClose, cmdMoveFirst. cmdMovePrevious, cmdMoveNext, cmdMoveLast, переключателей — равными optBest, optAll, а надписи Всего записей — lblNumberOfRec. Установите значения свойств Caption формы, рамки, переключателей и надписей в соответствии с рисунком. В модуле формы наберите следующий код:

Option Explicit

Соседние файлы в папке Лаб.5 Лебедев А.В