Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практические задания / Prakticheskaya_rabota_11.docx
Скачиваний:
21
Добавлен:
09.12.2018
Размер:
225.81 Кб
Скачать

Поиск данных с использованием индексов

Рассмотрим, как найти данные о студенте в таблице базы данных Учебный процесс по первичному ключу. На- помним, что таблица СТУДЕНТ имеет составной ключ, включающий поля, номер группы НГ и номер студента в группе НС. Для выполнения процедур поиска воспользуемся кнопочной формой поиск.. Создадим эту форму в режиме конструктора форм, не выбирая для нее источника данных. Создадим кнопку для запуска процедуры, используя панель элементов при отключенном мастере. В режиме формы она может иметь вид, представ- ленный на рис. 8.

Рис. 8. Кнопочная форма для запуска процедуры

Для быстрого поиска записи по первичному составному ключу используйте метод Seek объекта DAO.Recordset. Объект DAO.Recordset представляет набор записей, который обеспечивает доступ к его записям и обработку ка- ждой из них. Для создания набора записей используйте метод openRecordset объекта Database(база данных).

Метод Seekприменяется к индексированному набору записей —объекту DAO.Recordset,источником записей для которого является таблица. Он находит запись, удовлетворяющую заданным условиям для текущего индек- са, и делает эту запись текущей. Текущий индекс указывается с помощью свойства Indexобъекта DAO.Recordset пе- ред вызовом метода Seek..

Для выполнения сформулированной задачи в процедуре понадобятся: объектная переменная типа Databaseдля хранения ссылки на объект, представляющий базу данных, и типа DAO.Recordset—для хранения ссылки на объект, представляющий набор записей. Синтаксис методов SeekиOpenRecordsetтребует использования объектной переменной для представления существующего табличного Объекта DAO.Recordsetи объекта Database.

Процедура поиска по первичному ключу

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

PrivateSubКнопка_Сliск()

  • Определение объектных переменных

Dim dbsУчебный_пpoцecc As Database

Dim rstСтудентAs DAO.Recordset

  • Определение строковых переменных.

DimstrNGAsString

DimstrNSAsString

  • Запись вобъектную переменную ссылки на текущую БД

SetdbsУчебный_процесс =CurrentDb()

  • Открытие набора записей для таблицы СТУДЕНТ и запись ссылки на него в объектную переменную rstСтудент

SetrstСтудент=dbsУчебный_процесс.openRecordset_(" СТУДЕНТ ",dbopenTable)

    • Задает индекс сименем PrimaryKey,построенный по ключу таблицы НГ+НС;этот индекс будет использован при поиске.

rstСтудент.Index="PrimaryKey"

    • Присваивает строковым переменным значения, задаваемые пользователем вокне ввода параметров

strNG=InputBox("Введиномер группы", "Ввод параметров поиска")

strNS=InputBox("Введиномер студента", "Ввод параметров поиска")

    • Метод Seek, примененный кнабору записей, отыскивает иделает текущей запись суказываемыми варгументах значениями первичного составного ключа

rstСтудент.Seek"=", strNG, strNS

    • Инструкция условного перехода проверяет наличие записи суказанным ключом.

IfrstСтудент.NoMatchThen

    • Вывод сообщения изавершение процедуры

MsgBox"Идентификатор не найден!"

ЕхitSub

EndIf

    • Вывод данных из указанных полей найденной записи

MsgBox"Студент-" &rstСтудент! [Фио]&", "&rstСтудент![ГОДР]&_"года рождения", vbОKonly,_"Данные из записи, найденные методом Seek"

EndSub

Рассмотрим более подробно объяснение используемых в процедуре инструкций.

1. Откройте окно модуля формы, щелкнув на кнопке панели инструментов Программа (Code). Форма должна быть закрыта или находиться в режиме конструктора.

2. В шаблон процедуры обработки события click(нажатие кнопки) для кнопки поиски по первичному ключу (идентификатору) PrivateSubКнопка_click()запишите приведенные выше инструкции процедуры.

3. Приведенные ниже инструкции описывают объектные переменные для хранения ссылок на базу данных и набор записей.

DimdbsУчебный_процессAsDatabase

DimrstСтудентAsDAO.Recordset

4. Для присваивания объектной переменной ссылки используется инструкция Set. Приведенная ниже инст- рукция присваивает объектной переменной типа Databaseзначение ссылки на текущую базу данных.

SetdbsУчебный_процесс=CurrentDb()

5. Для поиска записи в таблице Студент с использованием индекса создайте на ее основе набор записей. Ис- пользуйте для этого метод OpenRecordsetобъекта Database и сохраните ссылку на этот объект в объектной переменной rstСтудент.

SetrstСтудент=dbsУчебный_процесс.OpenRecordset("СТУДЕНТ",dbOpenTable)

6. Прежде чем использовать метод Seek, присвойте свойству indexнабора записей имя первичного индекса таблицы студент. Метод seekбудет производить поиск записи, используя этот индекс. Напомним: ин- декс с именем PrimaryKey построен по ключу таблицы НГ +НС.

rstСтудент.Index="PrimaryKey"

7. Для ввода параметров поиска НГ и НС используйте функцию InputBox, которая выводит на экран диалого- вое окно с полем ввода и организует ожидание ввода текста. При нажатии пользователем кнопки ОК функция возвращает содержимое поля ввода. Присвойте введенное пользователем значение параметра стро- ковым переменным strNGиstrNS:

strNG=InputBox("Введи номер группы", "Ввод параметров поиска")

strNS=InputBox("Введи номер студента", "Ввод параметров поиска")

Рис 9. Окна ввода значений для строковых переменных

Формируемые функцией inputBox окна ввода значений для строковых переменных приведены на рис.9. Первый аргумент функции inputBoxопределяет текст, отображаемый в диалоговом окне, второй аргумент- текст, отображаемый в заголовке диалогового окна, а третий аргумент—текст, отображаемый в поле ввода (в примере не задан).

8. Для поиска записи используйте метод Seek, примененный к набору записей rstСтудент. Этот метод на- ходит запись, в которой значения первичного составного ключа равны указанным в аргументах значениям, и делает ее текущей

rstСтудент.Seek"=", strNG,strNS

9. Для проверки результата поиска используйте свойство NoMatchнабора записей rstСтудент. Свойство приоб- ретает значение True, если запись с заданным ключом не найдена, иFalse—в противном случае. Использо- вание значения этого свойства в инструкции условного перехода if.. Then... Endif позволяет направить выполнение процедуры по различным ветвям.

10. Для вывода данных из полей найденной записи используйте инструкцию MsgBox, результаты выполнения которой приведены на рис. 10.

Рис. 10. Результат поиска по идентификатору

Соседние файлы в папке Практические задания