Сделай Сам Свою Работу на 5

СТРУКТУРА БАЗЫ ДАННЫХ BIBLIO





 

Одна из двух стандартных БД, поставляемых с Visual Basic, является BIBLIO. Она имеет простую структуру, содержит заголовки (наименования) книг, имена авторов и издателей в виде четырех таблиц (рис. 4). Вместо имен полей каждой таблицы на рисунке отображены некоторые содержащиеся в них данные. Приведены только те поля, которые необходимы, чтобы показать связи между таблицами. Имена полей отображены как заголовки столбцов. Первое правило при проектировании БД не дублировать данные. Хранение имени автора совместно с наименованием книг нарушило бы это правило, поскольку автор обычно имеет больше одной книги. В этом случае необходимо было бы повторить имя автора в более чем одной строке таблицы Titles. Имена авторов хранятся в отдельной таблице - Authors. Сказанное относится и к именам издателей. Так как имя каждого издателя упоминается в нескольких книгах, то информация о них в таблице Titles не хранится. Зачем повторять адрес издателя с каждым наименованием книги? Пока обосновано существование трех таблиц в БД. Каждая книга может иметь более одного автора, а имя автора может появляться не только в одном наименовании книги. Хранение имен каждого из авторов или их ID для каждого наименования книги потребовало бы значительных дополнительных записей в таблице Titles. В данном случае целесообразно создание четвертой таблицы Title Author,содержащей поля ID-автора (Au_Id) и ISBN книг. Связь между таблицами Title Author и Authors осуществляется посредством ключей Au_Id. Очевидно, что имена авторов не могут обрабатываться подобно именам издателей.



Таблица Title Author находится между таблицами Titles и Authors и соединяет их с парой полей - ISBN книги и ID автора. Для просмотра имени автора конкретной книги необходимо выполнить следующие действия:

1. Выберете наименование книги в таблице Titles.

2. Прочитайте значение ISBN в Title и используйте его как ключ для нахождения соответствующей строки (строк) в таблице Title Author.

3. Из каждой строки таблицы Title Author прочтите ID автора и используйте его в качестве ключа для поиска имени автора в таблице Authors.

 

 

 

 

Рис.4. Структура базы данных BIBLIO

Описанная методика не сможет эффективно работать, если нет способа быстрого поиска записи по значению конкретного поля. А он может быть выполнен при соответствующей индексации таблиц.



Как видите, индексы - неотъемлемая часть БД. Например, таблица Title Author (Автор книги) индексируется по полю ISBN. Если необходимо обеспечить поиск в противоположном направлении (дано имя автора, а требуется найти книги, в которых оно появляется), необходимо проиндексировать таблицу Title Author по полю AuID. Очевидно, таблица Authors (Авторы) должна быть индексирована по полю AuID, так как в таблице Title Author хранятся ID авторов, а не их имена. Таблица Publishers (Издатели) индексируется по полю PublD, чтобы можно было быстро перейти от названия книги к ее издателю. Как видно из рис.4, в первых столбцах трех таблиц имеется знак “+”, что свидетельствует о наличии в этих таблицах первичных ключей. При нажатии “+”( выборе записи с конкретным первичным ключом) отображается таблица, связанная с исходной. В полученной таблице выводятся записи, которые имеют вторичные ключи, совпадающие с выбранным первичным ключом.

ПРОВЕРКА КОРРЕКТНОСТИ ДАННЫХ

 

Как уже отмечалось, элемент управления Data может использоваться для редактирования записей. Однако приложения БД должны проверять правильность (validating) вводимых пользователем данных перед их сохранением. Элемент управления Data предоставляет несколько событий и методов для проверки правильности вводимых данных перед их сохранением в БД.

Событие Validate

Проверку правильности вводимых данных выполняет событие Validate элемента управления Data:

Private Sub object_Validate (action As Integer, save As Integer),

где параметр action (действие) - это целое число, задающее операцию, выполнение которой вызывает данное событие. Его значения приведены в табл. 4.



 

Таблица 4. Значение параметра action события Validate

Константа Значение Описание
vbDataActionCancel Отмена операции при выходе из процедуры
vbDataActionMoveFirst Метод MoveFirst (Перейти к первой записи)
vbDataActionMovePrevious Метод MovePrevious (Перейти к предыдущей записи)
vbDataActionMoveNext Метод MoveNext (Перейти к следующей записи)
vbDataActionMoveLast Метод MoveLast (Перейти к последней записи)
vbDataActionAddNew Метод AddNew (Добавить новую запись)
vbDataActionUpdate Операция обновления (не UpdateRecord))
vbDataActionDelete Метод Delete (Удалить)
vbDataActionFind Метод Find (Найти)
vbDataActionBookmark Установлено свойство Bookmark (Закладка)
vbDataActionClose Метод Close (Закрыть)
vbDataActionUnload Выгрузка формы из памяти

 

Чтобы отменить операцию, вызвавшую событие Validate, значение vbDataActionCanсel следует установить с помощью кода. Например, если пользователь изменяет данные в элементе управления, а затем щелкает на кнопке MoveNext, то можно отменить изменения и операцию MoveNext.

Параметр save (сохранить) - это выражение типа Boolean, указывающее, изменялись ли данные. Можно установить его значение в False, чтобы отменить изменения.

Событие Error

Другим полезным событием при проверке правильности данных является событие Error (Ошибка). Когда модифицируется запись в БД, механизм JET гарантирует, что введенные данные не противоречат правилам, определенным при проектировании БД. Например, если требуется, чтобы указанное поле было уникальным, то запись не будет модифицирована, если введенное значение уже использовалось. Если поле превышает максимальную длину, изменения будут также отклонены.

Если данные не удовлетворяют правилам, определенным в проекте БД то генерируется ошибка выполнения программы. Перед сообщением об ошибке генерируется событие Error. Можно выявить причину ошибки, вызвав ее обработчик.

 

Cобытие Error объявляется следующим образом:

Sub Object_Error (dataerr As Integer, response As Integer),

где параметр dataerr (данные об ошибке) - это номер ошибки, a response (отклик) - целое число, которое устанавливается при появлении события, чтобы затем в обработчике ошибки выполнить соответствующие действия. Значения параметра response перечислены в табл. 5. Ошибку необходимо обработать внутри процедуры Error, а затем установить параметр response в 0, чтоб предотвратить генерирование ошибки выполнения программы.

 

Талица 5. Значение параметра response события Error

Константа Значение Описание
vbDataErrContinue Продолжать выполнение
vbDataErrDisplay Отображение сообщения по ошибке (установлено по умолчанию)

.

ВВОД ДАННЫХ

 

Для записи введенных данных в БД используются следующие методы:

§ AddNew. Добавляет запись в таблицу.

§ Delete.Удаляет текущую запись.

§ Update.Записывает текущую запись в БД.

§ Refresh.Перезагружает данные из БД (обновляет RecordSet).

Элемент Data можно использовать для ввода данных. Для этого необходимо присвоить свойству EOFAction элемента управления Data значение vbEOFActionAddNew. При переходе с последней записи на следующую элемент Data отображает новую пустую запись. Ее можно заполнить и записать в БД. Однако этот метод не наглядный и неэффективный для профессиональных приложений.

Краткое описание вышеперечисленных методов.

AddNew. Чтобы добавить новую запись в таблицу, вызовите метод AddNew объекта RecordSet. Новая пустая запись добавляется в конец набора RecordSet. Теперь можно ввести данные.

Update, Refresh. Когда пользователь сообщает о намерении сохранить новую запись в БД (щелкая на кнопке ОК или перемещаясь на новую запись), то вызываете метод Update объекта RecordSet. Чтобы отклонить данные, вызовите метод Refresh, который обновляет набор записей, прочитав его из БД. Поскольку добавленная запись не была сохранена в БД, то при обновлении RecordSet она будет потеряна.

Delete. Для удаления записи вызовите метод Delete объекта RecordSet. Из RecordSet будет удалена текущая запись, но только после того, как механизм JET проверит все задействованные отношения. Если БД содержит некоторые ссылки, то удалить запись, связанную с другой записью, нельзя. Мы не будем подробно рассматривать целостность ссылок, но покажем, как механизм JET поддерживает ее в БД.

На рис.5. приводится приложение Data Entry, реализующее ввод данных с помощью элемента Data. При нажатии на кнопку Add Record (Добавить запись), вызывается метод AddNew и кнопки Add Record и Delete Record (Удалить запись) одновременно "прячутся". На их месте отображаются кнопки OK и Cancel. Можно сохранить новую запись в БД, щелкнув на кнопке OK, или отказаться от сохранения, щелкнув на кнопке Cancel. В любом случае кнопки ОК и Cancel скроются и снова отобразятся кнопки Add Record и Delete Record.

 

Рис. 5. Приложение Data Entry

 

Форма приложения Data Entry содержит элемент Data, объект RecordSet- таблица Titles БД BIBLIO. Все элементы управления Textbox связаны с элементом управления Data и отображают поля таблицы Title, ISBN, Description, Subject и Comments.

Каждая запись в таблице Titles имеет ключ, связывающий название книги с именем издателя. Вместо использования текстового поля, в котором пользователь мог бы ввести ID издателя, будем использовать элемент управления ComboBox с именами всех издателей. Пользователь может выбрать одного издателя по имени. Этот элемент не является обычным элементом управления ComboBox. Это связанный с данными элемент управления ComboBox, который будет рассмотрен в параграфе "Усовершенствованные элементы управления, связанные с данными".

Для построения данного приложения выполните следующие действия:

1. Поместите элемент управления Data в форму и установите в его свойстве DatabaseName (Имя БД) путь к БД BIBLIO, а в свойстве RecordSource (Источник записей) - таблицу Titles.

2.Разместите в форме пять элементов TextBox (см. рис. 5) и свяжите их с элементом Data, имя которого Data1 (установлено по умолчанию). Установите в свойстве DataField (Поле) каждого элемента TextBox имя соответствующего поля таблицы.

3.Создайте четыре кнопки Command и установите в их свойствах Name (Имя) и Caption (Надпись) значения, приведенные в табл. 6.

 

Таблица 6. Свойства Name и Caption кнопок Command

Caption Name
Add Record AddBttn
Delete Record DelBttn
OK OKBttn
Cancel CancelBttn

 

Разместите кнопки в форме так, чтобы кнопка OK совпала с кнопкой AddRecord, а кнопка Cancel – c кнопкой Delete.

Код приложения Data Entry (Ввод данных):

 

Option Explicit

Dim prevISBN

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.