Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР_ИОСУ.doc
Скачиваний:
5
Добавлен:
14.11.2019
Размер:
1.57 Mб
Скачать

Лабораторная работа № 7 Проектирование форм в Access 97

Целью предыдущей работы было создание многотабличной БД «Сессия». Структура таблиц этой БД и связи между ними показаны на рис.18.

В данной работе требуется создать несколько форм с элемента­ми управления, позволяющих выполнять такие операции с БД, как просмотр записей, редактирования, печать отчета и т.д.

1. Создание основной кнопочной формы

Вид основной кнопочной формы показан на рис.21.

Рис.21. Вид экрана с основной кнопочной формой

На ней имеются следующие элементы:

– заголовок «База данных Сессия»;

– четыре кнопки «Просмотр», «Корректировка», «Печать» и«Выход»;

– декоративный элемент – рисунок в нижней части формы.

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

Перейдя затем в режим «Программа», необходимо написать тек­сты процедур, определяющих действия системы при наступлении тех или иных событий (то есть какие методы будут применены для изме­нения свойств объектов). Для управляющих элементов данной формы (кнопок) таким событием является нажатие кнопки – «Click».

Тексты процедур приведены ниже.

Option Compare Database

Option Explicit

Private Sub выход_Сliск()

DoCmd.Close

End Sub

Private Sub корректировка_Сliск()

DoCmd.OpenForm “корректировка”

End Sub

Private Sub отчет_Сlicк()

DoCmd.OpenReport “отчет”, acViewPreview

End Sub

Private Sub Просмотр_Сlicк()

DoCmd.OpenForm “просмотр”

End Sub

В частности, первая процедура называется выход_Сlick(). При нажатии кнопки «выход» будет применен метод Close, результатом которого форма закроется.

Вторая процедура, корректировка_Сliск() активизирует метод OpenForm, открывающий вспомогательную форму «корректиров­ка» и т.д.

Как видно, во всех процедурах используется инструкция типа DoCmd.метод.

2. Создание вспомогательных форм

Для просмотра записей многотабличной БД удобно использовать т.н. «ленточную» форму, создать которую легче всего, используя мастер форм программы Access.

Рис.22. Ленточная форма с элементами управления

Предварительно нужно создать запрос к БД на выборку с помо­щью шаблона, в котором нужно указать, какие таблицы и какие поля используются при выводе данных на экран. Имя этого запроса, а также тип формы (табличная, ленточная) указывается при обра­щении к мастеру форм.

В созданную таким путем форму можно добавлять любые управля­ющие элементы. Для этого надо открыть созданную форму в режиме конструктора и, используя панель инструментов, поместить нужный элемент в раздел «примечание формы» и «заголовок формы» (рис.22).

Наибольшие трудности вызывает написание инструкций, обес­печивающих диалог пользователя с системой, например при необ­ходимости удаления, добавления или корректировки записей БД. Форма «корректировка» показана на рис.23.

На форме «корректировка» размещены следующие элементы управления: поле со списком (для вывода кода студента КС и списка фамилий), трех переключателей («флажков»), трех полей для ввода оценок (при открытии формы они невидимы), кнопки «ОК» подтверждения ввода и кнопки «возврат» для возврата в главную кнопочную форму.

Для того чтобы «привязать» поле формы к определенному полю базы данных, необходимо указать в окне свойств данного элемента в качестве источника данных. Так, например, для поля со списком «код студента» в окне свойств в поле «тип источника строк» нужно указать таблица/запрос, а в поле «источник строк» – инструкцию SELECT с параметрами, определяющими название полей таблицы.

Рис.23. Вид формы «корректировка»

В этом же окне свойств объекта «поле со списком» необходи­мо указать номер выводимого в это поле столбца таблицы (в на­шем случае это «КС» – код студента, он первый в списке столб­цов таблицы «Студенты» и поэтому его номер – 0). Если в разво­рачивающем списке кроме кода студента нужно выводить еще фамилию и имя, то в окне свойств в поле «число столбцов» (на вкладке «макет») нужно ввести число 3, там же задается и ширина выводимых столбцов.

Ниже приведен текст программы для формы «корректировка».

Вначале идут описания глобальных (общих для все процедур формы) переменных.

Процедура OK_Click() описывает действия системы при нажа­тии кнопки «ОК» (подтверждения обновления значений полей БД «Математика», «Физика» и «Информатика» той записи, которая была выбрана в поле со списком. Кроме того, выполняется обнов­ление поля «Сумма».

Процедура Boзврат_Click() обеспечивает вызов основной кно­почной формы после нажатия кнопки «Возврат».

Процедура ПолеСоСписком_AfterUpdate() описывает, что дол­жно произойти после того, как будет выбрано значение из выпада­ющего списка. После описания переменной str2 как строковой вы­полняются следующие действия (результат применения метода AfterUpdate). Переменная strl (ранее она была описана как глобаль­ная) принимает то значение кожа студента (КС), которое окажется в поле формы после выбора нужной фамилии из списка. Это зна­чение должно быть затем вставлено в инструкцию SELECT для на­хождения соответствующей записи в базе данных

Рис.24. Окно свойств объекта «поле со списком»

Для формирования строки запроса SQL используются перемен­ные strl и str2.

Переменная str2 в результате принимает следующее значение

SELECT [Результаты].* FROM [Результаты] WHERE ((([Результаты].КС)= strl))

Это предложение в соответствии с синтаксисом языка SOL рас­шифровывается следующим образом: «получить значения всех по­лей таблицы «результаты» для тех записей, у которых значение поля КС совпадает со значением переменной strl. Найденная запись ко­пируется в глобальную переменную Recset типа Recordset (множе­ство записей). Это происходит в результате выполнения инструкции

Set Recset = CurDB.OpenRecordset(str2)

После этого переменным omat, ofis и oinf присваиваются значе­ния соответствующих полей таблицы «Результаты»: «Математика», «Физика», «Информатика». Эти значения затем присваиваются полям формы «поле_мат», «поле_физ» и «поле_инф».

Option Compare Database

Option Explicit

Private CurDB As Database

Private Recset As Recordset

Private str1 As String 'строковая переменная для значения из поля со списком

Private omat As Byte

Private ofis As Byte 'переменные для ввода оценок

Private oinf As Byte

Private Sub OK_Click()

Recset.Edit

Recset! Математика = omat

Recset! Физика = ofis

Recset! Информатика = oinf

Recset! Сумма = omat + ofis + oinf

Recset.Update

End Sub

Private Sub Возврат_Сliск()

DoCmd.Close

DoCmd. OpenForm “главная_кнопочная_форма”

End Sub

Private Sub ПолеCoCписком_AfterUpdate()

Dim str2 As String

str1 = ПолеСоСписком.SelText ' сначала str1–код студента КС

str1 = “ ' ” & str1 & “ ' )) “ ‘ затем добавляются апострофы и две скобки

str2 = “SELECT [Результаты].* FROM [Результаты] “

str2 = str2 & “WHERE ((([Результаты].КС) = “ & str1

Set CurDB = DBEngine.Workspaces(0).Databases(0)

Set Recset = CurDB.OpenRecordset(str2)

omat = Recset! Математика

ofis = Recset! Физика

oinf = Recset!Инфopмaтикa

Поле_мат.Value = omat

Поле_физ.Value = ofis

Поле_инф.Value = oinf

End Sub

Private Sub Флажок_матем_Сlicк()

If Флажок_матем.Value Then Поле_Maт.Visible = True

Else Поле_мат.Visible = False

End Sub

Private Sub Флажок_информ_Сlicк()

If Флажок_информ.Value Then Поле_инф.Visible = True

Else Поле_инф.Visible = False

End Sub

Private Sub Флажок_физ_Сlicк()

If Флажок_физ.Value Then Поле_физ.Visible =True

Else Поле_физ.Visible = False

End Sub

Процедура Флажок_матем_AfterUpdate() описывает то, что про­исходит после обновления значения переключателя «Флажок_матем» (первый слева на форме, показанной на рис. 23). Если в нем сто­ит галочка, он принимает значение «истина», в противном случае – «ложь». В соответствии с приведенной в программе инструкцией (предложение if... then) при каждом изменении состояния переклю­чателя изменяется свойство «быть видимым» объекта «поле_мат» – поля, предназначенного для ввода оценки по математике. Анало­гично работают и последние две процедуры.

Для того чтобы при нажатии на главной кнопочное форме кноп­ки «печать отчета» на экран выводился отчет, его предварительно нужно создать с помощью мастера отчетов и присвоить ему имя «отчет» (в принципе, имя может быть любым, лишь бы оно совпа­дало с именем, указанным в инструкции процедуры отчет_С1ick() главной кнопочной формы:

DoCmd.OpenReport “отчет”, acViewPreview

Встроенная константа acViewPreview, которая в инструкции сто­ит после имени отчета задает режим вывода «Previw», что означает вывод на экран перед печатью. Без этого параметра отчет будет выводиться сразу на принтер.