Российской Федерации Старооскольский технологический институт им. А. А. Угарова


НазваниеРоссийской Федерации Старооскольский технологический институт им. А. А. Угарова
страница12/15
ТипПрактическая работа
1   ...   7   8   9   10   11   12   13   14   15

Практическая работа №11


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

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

Студент должен:

уметь:

  • проектировать реляционную базу данных;

  • использовать язык запросов для программного извлечения сведений из баз данных;


знать:

  • основы теории баз данных; модели данных;

  • особенности реляционной модели и проектирование баз данных, изобразительные средства, используемые в ER-моделировании;

  • основы реляционной алгебры;

  • принципы проектирования баз данных, обеспечение непротиворечивости и целостности данных;

Теоретическая часть

Программы VВAмогут создаваться не только пользователем, но иавтоматически приработе мастеров Access. Рассмотрим пример процедуры обработки события, созданной мастером кнопок.

Пусть в форме для просмотра информации о группе по желанию пользователя необходимо открывать список студентов текущей группы

Практическая часть

Создадим форму группа на основе одноименной таблицы, воспользовавшись режимом Автоформа: в столбец (AutoForm:Columnar) Создадим форму студент на основе одноименной таблицы, воспользовавшись режимом Автоформа: ленточная (AutoForm: Tabular).

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



Рис. 1. Форма Группа с кнопкой для вызова формы Студент

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

Рассмотрим процедуру, которую сформировал мастер для открытия формы при нажатии кнопки. Откроем форму группа в режиме конструктора. Установив курсор на кнопку список студентов, выберем в контекстном меню команду Обработка событий (BuildEvent). Открывается окно модуля формы (рис. 2), связанного с формой Группа.

В окнеотображается процедура обработки для события - щелчок мыши (Click) на кнопке Список студентов, подготовленная мастером.



Рис. 2. Окно модуля формы Группа с процедурой обработки события Click для элемента список студентов

Процедура обработки события является личной процедурой типа Sub. Инструкция subобъявляет процедуру с составным именем список_студентов_click(), включающим имя кнопки и имя события Пустые круглые скобки говорят об отсутствии аргументов.

Рассмотрим текст программы, записанный между инструкциями sub и EndSub.

Инструкция DoCmd.OpenFormstDocName…stLinkCriteria реализует главную функцию процедуры —открывает форму СТУДЕНТ.

DoCmd является объектом активного приложения Access, предназначенным для выполнения макрокоманд.OpenForm — метод, применяемый к данному объекту. Методу передаются два аргумента. Первый из передаваемых аргументов задает имя открываемой формы, второй передает строковое выражение, задающее условие отбора записей в открываемой форме. В данной инструкции для хранения значений аргументов используются переменные строкового типа StDocName…stLinkCriteria.

В процедуре эти переменные ранее явно описываются инструкцией Dim.

DimstDocNameAs Siring

DimstLinkCriteriaAs String

Для переменных указываются именаstDocNameиSiLinkCriteriaистроковый тип данныхString.

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

ИнструкцииstDocName = "Студент" и stLinkCriteria = "[НГ]=" &’’’’&Мe! [нг] &’’’ являются инструкциями присваивания, благодаря которым переменные получают конкретные значения. Первая переменная сохраняет имя формы студент, вторая — выражение, указывающее, что связь таблиц осуществляется по полю нг и выборка данных в открываемой форме Студент должна производиться по значению этою поля в текущей записи формы группа. В процедурах VBA для ссылок на элементы управления текущей формы или отчета может быть использовано ключевое слово Me, заменяющее полный идентификатор текущего объекта — формы группа Forms! [группа]

Аргументы, записываемые в инструкции, разделяются запятыми. Два аргумента в инструкции DoCmdOpenForm ... были пропущены, запятые фиксируют их отсутствие. В конце инструкции отсутствие недостающих аргументов не помечается.

ИнструкцияOnErrorGoTo Егг_Список_студентов_Сlickпозволяет при возникновении ошибки передать управление программе обработки ошибок.. Метка Егг_список_студентов_click: определяет начало этой программы.

Программа обработки ошибок помещена между инструкциями ExitSub и EndSub, что позволяет отделить ее от части программы, соответствующей нормальному выполнению процедуры. В этой процедуре программа обработки ошибок включает две инструкции.

MsgBox выводит стандартное сообщение об ошибке. Аргумент Err.Description определяет строковоезначение, которое возвращается при ошибке. Description является свойством объекта Error. Значением свойстваDescription является краткое предупреждающее сообщение с описаниемошибки.

Инструкция Resume указывает, с какой инструкции необходимо возобновить выполнение процедуры. В данномслучае — передает управление на метку, за которой стоит инструкция, осуществляющая выход из процедуры.

Корректировка процедуры, созданной мастером

Процедура, созданная мастером, может быть откорректирована и дополнена пользователем. Например, для подтверждения необходимости вывода списка студентов текущей группы можно записать инструкции, организующие диалог, после описания строковых переменных (см. рис. 2).

Dim Ответ AsInteger

Ответ = MsgBox(" Вывести список студентов группы " &НГ& "?",vbOKCancel)

IfОтвет = vbCancelThen

ExitSub

EndIf

Первая инструкция определяет переменную Ответ для сохранения числового значения. Вторая присваивает этой переменной значение, возвращаемое функцией MsgBox. Функция MsgBox выводит в диалоговом окне (рис. 3) вопрос, включающий номер группы нг из текущей записи формы, и кнопки ОК и Отмена (Cancel). Возвращаемое функцией значение 1 или 2 соответствует нажатой кнопке.

Третья инструкция

If условие Then

[инструкция]

[Else

[инструкции] ]

EndIf

выполняет группу инструкций в зависимости от значения выражения (True или False), заданного в условии. Если была нажата кнопка Cancel, выполняется инструкция, завершающая процедуру по Exitsub, иначе выполнение процедуры продолжается с инструкции, следующей за Endif. Приставка указывает на использование значений встроенных констант VBA.



Рис. 3. Диалоговое окно функции MsgBox

Для открытия списка студентов только в режиме чтения достаточно дополнить инструкцию DoCmd. OpenForm… пятым аргументом acFormReadOnly.

Приставка ас указывает, что вкачестве аргумента используется значение встроенной константы Access.
Заменитевпроцедуре ключевое слово Ме наForms! [Группа]иубедитесь, что процедура работает по-прежнему.
Запишите вкачестве аргумента, задающегоусловие отбора, прямо винструкцию выражение
“[нг]=”&’’’’&Me![нг]&’’’’.При этом можно удалить инструкцию описания переменной stLinkCriteriaиприсваи-
ванияей значения.

Выполнение запросов впроцедуре обработки события

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

Для подсчета изменившегося числа студентов вгруппе иобновления поля кол втаблице ГРУППА воспользуйтесь
созданными для этих целей запросами Число студентоввгруппахиОбновление ГРУППА_КОЛ.


Кроме того, поскольку для некоторых групп могут быть уничтожены все записи остудентах, адва предыдущих
запроса не решают задачу обновления поля кол, вэтом случае потребуется запрос обнуление ГРУППА_КОЛбезпод-
чиненных вСТУДЕНТ (рис 4).

Выполнение перечисленных запросов впроцедуре позволит автоматически поддерживать правильные значения в
таблице группа и освободит пользователя от необходимости помнить ивручную выполнять разрозненные дейст-
вия. Впроцедуре для выполнения запросов может быть использован объектDoCmdиего метод OpenQuery.


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



Рис.4. Запрос на обновление полей втаблице Группа для записей, не

имеющих подчиненных



Рис. 5. Диалоговое окно функции MsgBox

Для анализа возвращенного функцией значения ипринятия решениядальнейшихдействияхиспользуйте инструкцию условного перехода.

Ifусловие Then

[инструкции]

[Else

[инструкции]]

1ndif

о

Эта инструкция взависимости от значения выражения, заданного вусловии (Trueили False), выполняет ту или иную группу инструкций. Для создания процедуры выполните следующие действия:

l.Откройте форму студент врежиме конструктора.

2. Откройте окно свойств формы на вкладке События (Events). Враскрывающемся списке Закрытие (Close) выберите значение [Процедура обработки события]ищелкните по значку построителя вконце строки. Таким образом, связывается выполнение создаваемой процедуры сзакрытием формы. Воткрывшемся окне модуля формы вшаблон процедуры обработки события PrivateSubForm_Close() (рис 6) запишите инструкции процедуры.



Рис. 6. Инструкции начала иконца процедуры обработки события Closeдля формы Студент

3. Для определения переменных, сохраняющих строковые значения имен запросов ичисловое значение, воз-
вращаемое функцией MsgBox, запишите инструкциюDim.

DimstDocName,stDocNamel,stDocName2AsString, ОтветAsInteger

  1. Запишите инструкцию присваивания переменной ответ значения, возвращаемого функцией MsgBox.

Ответ =MsgBox("Выдобавляли или удаляли записи остудентах вгруппах?", vbYesNo)

Приставка vbвзначении второго аргумента указывает на использование значения встроенной константы VBA, определяющего вывод вдиалоговом окне кнопокДаиНет.

  1. Для проверки, нажата ли пользователем вдиалоговом окне кнопкаНет ивыполнения вэтом случае инст-
    рукции выхода из процедуры ExitSub, запишите инструкцию условного перехода, опустив необязательную ее часть.

IfОтвет=vbNoThen

ExitSub

EndIf

Если переменная Ответ получила значение, соответствующее нажатию кнопкиНет, выполняется инструкция, следующих за Thenизавершающая процедуру по ExitSub, иначе выполнение процедуры продолжается син-
струкции, следующей за Endif.

  1. Для обновления поля кол втаблице группа запишите инструкции выполнения перечисленных выше запросов. Используйте объект DoCmdиприменяемый кданному объекту метод openQuery.Аргументом этого метода яв-
    ляетсяимя выполняемого запроса. Если для сохранения имен запросов предусмотрены переменные, им, пре-
    ждечем они будут использованы, должны быть присвоены эти имена.

StDocName="Числoстудентов вгруппах”

stDocNamel="06нoвлениеГРУППА_КОЛ"

stDocName2="Обнуление ГРУППА_КОЛ без подчиненных вСТУДЕНТ"

DoCmd.SetWarningsFalse

DoCmd.OpenQuery(stDocName)

DoCmd.OpenQuery(stDocNamel)

DoCmd.OpenQuery(stDocName2)

DoCmd.SetWarningsTrue

Метод Setwarningsсаргументом Falseпозволяет отключить вывод стандартных предупреждений на экран во время выполнения запросов. После выполнения запросов этот режим восстанавливается.

В окончательном виде процедураможет иметь вид, представленный на рис. 7.

7. Закройте окно редактора VBAивозвратитесь вAccess, выбрав команду File|CloseandReturntoMicrosoftAccess.

8.Откройте форму Студент. Добавьте или удалите несколько записей остудентахОткройте таблицу группа иубе-
дитесь, что ваша процедура работает.

9.Измените инструкцию DoCmd,заменив вней имена переменных на имена запросов. Удалите из инструкции описания переменные stDocName,stDocNamelиstDocName2иинструкции присваивания им значений. Убе-
дитесь, что ивэтом случае процедура работает правильно.



Рис. 7. Процедура обработки события (Close) для формы Студент

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

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

Контрольные вопросы

  1. Что такое программа VBA?

  2. Для отображения в открываемой форме только связанных записей необходимо…?

  3. Программа обработки ошибок помещена…?

  4. На что указывает инструкция Resume?

  5. На что указывает приставка ас?

  6. Для анализа возвращенного функцией значения ипринятия решениядальнейшихдействиях, какую необходимо использовать инструкцию?

  7. Что позволяет метод Setwarningsсаргументом False?

  8. Что такое индекс?

  9. Для быстрого поиска записи по первичному составному ключу используйте…?

  10. Когда используется свойство NoMatch?


1   ...   7   8   9   10   11   12   13   14   15

Похожие:

Российской Федерации Старооскольский технологический институт им. А. А. Угарова iconРоссийской Федерации Старооскольский технологический институт им. А. А. Угарова
Якунина М. И., преподаватель иностранного языка огапоу «Старооскольский педагогический колледж»

Российской Федерации Старооскольский технологический институт им. А. А. Угарова iconРоссийской Федерации Старооскольский технологический институт им. А. А. Угарова
Техническая эксплуатация и обслуживание электрического и электромеханического оборудования

Российской Федерации Старооскольский технологический институт им. А. А. Угарова iconРоссийской Федерации Старооскольский технологический институт им. А. А. Угарова
ПМ. 01 Документирование хозяйственных операций и ведение бухгалтерского учёта имущества организации

Российской Федерации Старооскольский технологический институт им. А. А. Угарова iconРоссийской Федерации Старооскольский технологический институт им. А. А. Угарова
Общие проблемы экологии: учебное пособие. – Старый Оскол: сти ниту «мисиС», 2015. – с

Российской Федерации Старооскольский технологический институт им. А. А. Угарова iconРоссийской Федерации Старооскольский технологический институт им. А. А. Угарова
Методические указания для студентов очной формы обучения по выполнению практических работ (заданий)

Российской Федерации Старооскольский технологический институт им. А. А. Угарова iconРоссийской Федерации Старооскольский технологический институт им. А. А. Угарова
Мдк. 02. 02. Управление проектами: учебное пособие. – Старый Оскол: сти ниту «мисиС», 2016. – 101 с

Российской Федерации Старооскольский технологический институт им. А. А. Угарова iconРоссийской Федерации Старооскольский технологический институт им. А. А. Угарова
...

Российской Федерации Старооскольский технологический институт им. А. А. Угарова iconРоссийской Федерации Старооскольский технологический институт им. А. А. Угарова
...

Российской Федерации Старооскольский технологический институт им. А. А. Угарова iconРоссийской Федерации Старооскольский технологический институт им. А. А. Угарова
ПМ. 02 Ведение бухгалтерского учёта источников формирования имущества, выполнение работ по инвентаризации имущества и финансовых...

Российской Федерации Старооскольский технологический институт им. А. А. Угарова iconРоссийской Федерации Бузулукский гуманитарно-технологический институт...
Методические указания предназначены для студентов факультета заочного обучения

Вы можете разместить ссылку на наш сайт:


Все бланки и формы на filling-form.ru




При копировании материала укажите ссылку © 2019
контакты
filling-form.ru

Поиск