Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Обработка объектов СУБД MS Access
Цель работы – изучение способов обработки объектов СУБД MS ACCESS средствами языка программирования VBA. После выполнения работы студент должен знать основы обработки объектов СУБД MS ACCESS, уметь создавать пользовательские приложения автоматизированной обработки информации средствами СУБД MS ACCESS. Справочная информация Для организации обращения к базе данных, созданной средствами СУБД MS Access, могут быть использованы модели данных DAO (Data Access Objects), ADO (ActiveX Data Objects), ODBCDirect (Open Data Base Connectivity Direct). Первая из них является наиболее апробированной и удобнее других описывает доступ к файлам Access. Для извлечения данных с помощью объектного доступа (DAO) необходимо в общем случае: 1. Создать рабочую область (Объект Workspaсe); 2. Открыть базу данных (объект Database); 3. Создать набор записей (объект Recordset); 4. Выполнить непосредственное обращение к конкретным записям и полям; 5. Закрыть набор данных; 6. Закрыть базу данных; 7. Закрыть рабочую область (завершить сеанс работы). При запуске программ VBA из среды СУБД Access необходимость в пунктах 1 и 7 отпадает, т.к. СУБД сама выполняет эти действия, а пункты 2 и 6 выполняет пользователь, открывая и закрывая на время сеанса работы ту или иную базу данных. Таким образом, для обработки объектов в программе достаточно обратиться к открытой базе данных методом CurrentDb и выполнить пункты 3, 4 и 5. Например, для обращения к записям таблицы Студенты учебной базы данных Студент.mdb необходимо создать следующий фрагмент кода:
‘База данных Студент.mdb должна быть открыта средствами ‘СУБД Access ‘объявление объектных переменных Dim База, Запись As Variant ‘присвоение переменной ссылки на открытую (текущую) базу ‘данных Set База = CurrentDb ‘присвоение объектной переменной ссылки на набор записей ‘таблицы Студенты.mdb Set Запись = База.OpenRecordSet(" Студенты" ) ‘операторы обработки записей таблицы Студенты.mdb ‘закрытие набора записей таблицы Студенты.mdb Запись.Close
Перечень используемых объектов, их свойств, событий и методов можно увидеть в окне Object Browser редактора VBA (меню View à Object Browser ). Основные методы и свойства объекта Recordset, которые будут использованы нами в дальнейшем описании, приведены в прилож. 16. При обработке таблиц или запросов обычно выполняются операции по поиску, редактированию, удалению, просмотру, добавлению записей и расчету. Примеры программ, реализующих данные операции, приведены ниже.
Пример программы поиска Требуется создать процедуру поиска записей в таблице Студенты учебной базы данных. Поиск осуществляется по фамилии студента, значение которой вводится с клавиатуры. Если записи найдены, то выводится номер найденной записи с указанием фамилии, имени и отчества студента. Если подобных записей нет, то выводится сообщение об этом.
'Последовательный поиск по фамилии и вывод на экран ‘Программа не проверяет корректность введенной с клавиатуры фамилии Sub Поиск() Dim База, Запись As Variant Dim p As String * 20, i As Integer, признак As Boolean Set База = CurrentDb Set Запись = База.OpenRecordSet(" Студенты" ) признак = False 'признак характеризует хотя бы одну найденную запись p = InputBox(" Введите фамилию", " Поиск", " Шариков" ) If RTrim(p) = Empty Then Exit Sub With Запись Do Until Запись.EOF = True 'Свойство " End of File" - признак конца файла If RTrim(! [Фамилия].Value) = RTrim(p) Then i = i + 1 признак = True MsgBox str(i) & " -я запись. Студент " & ! [Фамилия].Value _ & " " & ! [Имя].Value & " " & [Отчество].Value End If .MoveNext 'метод перехода к следующей записи Loop If признак = False Then MsgBox " Записи с фамилией " _ & p & " отсутствуют" .Close End With End Sub
Пример программы поиска и редактирования записей Требуется создать процедуру поиска записей в таблице Студенты учебной базы данных. Поиск осуществляется по фамилии студента, значение которой вводится с клавиатуры. Если записи найдены, то значение фамилии студентов изменяются на другую, вводимую с клавиатуры. Если подобных записей нет, то сообщение об этом не выводится.
'Работа с записями таблицы - поиск и редактирование Sub редактирование() Dim База, Запись As Variant Set База = CurrentDb 'семейство объектов текущей базы данных Set Запись = База.OpenRecordSet(" Студенты" ) 'открытие набора записей текущей базы данных Do Until Запись.EOF = True 'Свойство " End of File" - признак конца файла If Запись! [Фамилия].Value = InputBox (" Введите _ искомую фамилию" ) Then Запись.Edit 'метод блокирует запись и разрешает обновление полей записи Запись! [Фамилия].Value = InputBox (" Введите _ новую фамилию" ) Запись.Update 'метод сохраняет изменения полей записи MsgBox Запись! [Фамилия].Value End If Запись.MoveNext 'метод перехода к следующей записи Loop End Sub
Пример программы поиска и удаления записей Требуется создать процедуру поиска и удаления записей в таблице Студенты учебной базы данных. Поиск осуществляется по фамилии студента, значение которой вводится с клавиатуры. Если записи найдены, то выводится фамилия, имя, отчество студента и номер группы, после чего спрашивается разрешение пользователя на удаление этой записи. Если подобных записей нет, то выводится сообщение об этом.
'Последовательный поиск по фамилии и удаление 'Программа не проверяет корректность введенной с клавиатуры 'фамилии Sub удаление() Dim База, Запись As Variant Dim p As String * 20, признак As Boolean, удаление As Byte Set База = CurrentDb Set Запись = База.OpenRecordSet(" Студенты" ) признак = False 'признак характеризует хотя бы одну найденную 'запись p = InputBox(" Введите фамилию", " Поиск и удаление" ) If RTrim(p) = Empty Then Exit Sub With Запись Do Until Запись.EOF = True If RTrim(! [Фамилия].Value) = RTrim(p) Then признак = True удаление = MsgBox(RTrim(! [Фамилия].Value) & " " & RTrim(! [Имя]) & " " & RTrim(! [Отчество]) _ & " " & ! [КодСпециальности] & " -" & ! [Курс] _ & ! [Группа], vbYesNoCancel + vbQuestion, _ " Удалить запись? " ) Select Case удаление Case vbYes MsgBox RTrim(p) & " отчислен(а)! ", vbCritical .Delete Case vbNo MsgBox " Ура! Не отчислили! ", vbExclamation Case vbCancel Exit Sub End Select End If .MoveNext 'метод перехода к следующей записи Loop If признак = False Then MsgBox " Записи с фамилией " _ & RTrim(p) & " отсутствуют" .Close End With End Sub
Пример программы расчета Требуется создать процедуру расчета и вывода на экран значения среднего возраста всех студентов таблицы Студенты учебной базы данных.
'Работа с записями таблицы - просмотр и расчет среднего возраста Sub Расчет() Dim База, Запись As Variant Dim СрВозраст As Single, СумВозраст As Integer, _ ЧислоЗаписей As Long Set База = CurrentDb 'семейство объектов текущей базы данных Set Запись База.OpenRecordSet(" Студенты" ) 'открытие набора записей текущей базы данных СумВозраст = 0 ЧислоЗаписей = 0 Do Until Запись.EOF = True ЧислоЗаписей = ЧислоЗаписей + 1 СумВозраст = СумВозраст + (Year(Date) - _ Year(Запись! [ДатаРождения].Value)) Запись.MoveNext 'метод перехода к следующей записи Loop СрВозраст = СумВозраст / ЧислоЗаписей 'или СрВозраст = СумВозраст /Запись.RecordCount 'сойство RecordCount возвращает число записей MsgBox " Средний возраст равен " & Format(СрВозраст, " Standard" ) End Sub
Пример программы ввода новой записи Требуется создать процедуру ввода новой записи в таблицу Студенты учебной базы данных.
'Работа с записями таблицы - добавление 'Программа не проверяет корректность вводимых значений, 'не отслеживает нажатие кнопки Cancel, 'не осуществляет поиск дублирующих записей в поле КодСтудента 'таблицы " Студенты" Sub добавление1() Dim База, Запись As Variant Set База = CurrentDb Set Запись = База.OpenRecordSet(" Студенты" ) With Запись .AddNew 'метод добавляет запись ! [КодСтудента].Value = InputBox(" Введите код", " Ввод", _ " 141111" ) ! [Фамилия].Value = InputBox(" Введите фамилию студента", _ " Ввод", " Шариков" ) ! [Имя].Value = InputBox(" Введите имя", " Ввод", " Полиграф" ) ! [Отчество].Value = InputBox(" Введите отчество студента", _ " Ввод", " Полиграфович" ) ! [ДатаРождения].Value = CDate(InputBox(" Введите дату _ рождения", " Ввод", " 01.02.01" )) ! [Адрес].Value = InputBox(" Введите домашний адрес", " Ввод", _ " Москва, Петровка - 25" ) ! [КодСпециальности].Value = InputBox(" Введите код _ специальности", " Ввод", " У" ) ! [Курс].Value = CInt(InputBox(" Введите курс", " Ввод", " 1" )) ! [Группа].Value = CInt(InputBox(" Введите группу", " Ввод", " 1" )) ! [Подгруппа].Value = CInt(InputBox(" Введите подгруппу", _ " Ввод", " 1" )) .Update 'метод сохраняет новую запись .Close End With End Sub
Для осуществления проверки вводимых с клавиатуры значений и поиска дублирующих по значению ключевого поля записей разумно будет разделить ввод информации на два этапа: ввод данных с клавиатуры в структурную переменную и запись данных из оперативной памяти, где хранятся значения структурной переменной, в таблицу. Ниже приведенная программа реализует данный подход.
Option Compare Database 'тип данных Type Студент описывается в декларативной части 'модуля Private Type Студент Код As String * 5 Фам As String * 20 Имя As String * 10 Отч As String * 20 Д_Р As Date Адр As String * 255 КодСпец As String * 1 Курс As Byte Группа As Byte Подгруппа As Byte End Type
Sub добавление2() Dim Экономист As Студент Dim q, База, Запись As Variant Set База = CurrentDb Set Запись = База.OpenRecordSet(" Студенты" ) With Экономист q = InputBox(" Введите код", " Ввод", " 02111" ) 'здесь может присутствовать проверка корректности 'введенного значения кода студента If RTrim(q) = Empty Then Exit Sub Else.Код = q q = InputBox(" Введите фамилию студента", " Ввод", " Шариков" ) 'здесь может присутствовать проверка корректности 'введенного значения фамилии, ' и т.д. If RTrim(q) = Empty Then Exit Sub Else.Фам = q q = InputBox(" Введите имя", " Ввод", " Полиграф" ) If RTrim(q) = Empty Then Exit Sub Else.Имя = q q = InputBox(" Введите отчество студента", " Ввод", _ " Полиграфович" ) If RTrim(q) = Empty Then Exit Sub Else.Отч = q q = CDate(InputBox(" Введите дату рождения", " Ввод", _ " 01.02.01" )) If RTrim(q) = Empty Then Exit Sub Else.Д_Р = q q = InputBox(" Введите домашний адрес", " Ввод", " Москва, _ Петровка - 25" ) If RTrim(q) = Empty Then Exit Sub Else.Адр = q q = InputBox(" Введите код специальности", " Ввод", " У" ) If RTrim(q) = Empty Then Exit Sub Else.КодСпец = q q = CInt(InputBox(" Введите курс", " Ввод", " 1" )) If RTrim(q) = Empty Then Exit Sub Else.Курс = q q = CInt(InputBox(" Введите группу", " Ввод", " 1" )) If RTrim(q) = Empty Then Exit Sub Else.Группа = q q = CInt(InputBox(" Введите подгруппу", " Ввод", " 1" )) If RTrim(q) = Empty Then Exit Sub Else.Подгруппа = q End With 'Здесь может присутствовать проверка наличия дублирующих 'записей в поле ‘КодСтудента, 'для чего необходимо организовать поиск значения КодСтудента _ 'в таблице Студенты, 'аналогичного значению, введенному с клавиатуры With Запись .AddNew ! [КодСтудента].Value = Экономист.Код ! [Фамилия].Value = Экономист.Фам ! [Имя].Value = Экономист.Имя ! [Отчество].Value = Экономист.Отч ! [ДатаРождения].Value = Экономист.Д_Р ! [Адрес].Value = Экономист.Адр ! [КодСпециальности].Value = Экономист.КодСпец ! [Курс].Value = Экономист.Курс ! [Группа].Value = Экономист.Группа ! [Подгруппа].Value = Экономист.Подгруппа .Update .Close End With End Sub
Задание 1. Поскольку создаваемые Вами программы обработки записей будут изменять значения таблиц Вашей личной базы данных, рекомендуется сделать копии этих таблиц. 2. Создайте программы, осуществляющие ввод, просмотр, поиск, редактирование и удаление записей для одной или нескольких таблиц Вашей личной базы данных. Детальные требования к программам необходимо согласовать с преподавателем. 3. Создайте программу расчета одного из финансово-экономических показателей по данным, хранящимся в таблицах Вашей личной базы данных, например: прибыли, доходов, расходов, рентабельности. Детальные требования к программе согласуйте с преподавателем. 4. Запуск созданных программ обработки записей базы данных организуйте из главной кнопочной формы. 5. * В рассмотренных выше программах интерфейс пользователя организован через стандартные диалоговые окна, реализованные с использованием функций и процедур MsgBox и InputBox. Их применение не всегда удобно, особенно при вводе и выводе большого количества данных. Создайте пользовательские формы, заменяющие стандартные диалоговые окна, и реализуйте их взаимосвязь с разработанными Вами программами.
15.8. Контрольные вопросы 1. Объясните принцип обращения к физическим данным, хранящимся в базе. 2. Объясните понятие модели доступа к данным. Какие модели Вы знаете? Чем они отличаются? 3. Какие объекты использованы в приведенных выше примерах программ? 4. Какие свойства и методы этих объектов использованы в приведенных выше примерах программ? 5. Почему в примерах отсутствует обращение к объекту Field? 6. * Предложите вариант программы поиска записей в родительской таблице и вывода значений соответствующих записей из дочерней таблицы. 7. * Предложите вариант программы поиска записей, в которой используются методы FindFirst, FindLast, FindNext, FindPrevious, Seek или свойство Filter.
Литература
Приложение 1 Образец оформления титульного листа
Приложение 2 Пример электронной таблицы
Приложение 3 |
Последнее изменение этой страницы: 2017-03-14; Просмотров: 435; Нарушение авторского права страницы