Читайте также: |
|
ЛАБОРАТОРНАЯ РАБОТА №7. Использование ACCESS VBA при решении задач обработки баз данных
Цель лабораторной работы
Лабораторная работа предназначена для получения практических навыков создания кодов VBA в Access на основе объектного событийно-управляемого подхода, что предполагает использование объектов Access Application, объектов доступа к данным DAO и объектов Access VBA.
Основные сведения об объектах ACCESS и DAO.
Объекты Access Application
К основным объектам Access Application относятся:
· Объект Application представляет саму СУБД Access, а также среду для выполнения макрокоманд и процедур VBA. При установке характеристик объекта Application изменяются свойства всей среды Access.
· Объекты Form ссылаются на конкретную открытую форму и являются членами совокупности Forms. Добавить объект или удалить его из совокупности Forms можно, только открыв или закрыв форму. Существует около 30 свойств событий, распознаваемых формой.
· Объекты Report ссылаются на конкретный открытый отчет и являются членами совокупности Reports. Добавить объект или удалить его из совокупности Reports можно, только открыв или закрыв отчет. Отчет распознает семь свойств событий.
· Объект Control представляет элемент управления в форме или отчете и принадлежит к совокупности Controls данной формы или отчета. Каждый тип элемента управления имеет собственный набор свойств, включая характеристики распознаваемых им событий.
· Объект DoCmd - необычный объект, доступный только в VBA. Не представляя никакой физической сущности с заданными свойствами и поведением, он осуществляет важную связь между макропрограммированием и программированием на VBA. Его можно использовать при выполнении макродействий в Visual Basic.
Использование объектов Access Application
В семействах Forms и Reports содержатся лишь объекты, которые были открыты при помощи оператора DoCmd: Open тип_объекта или его эквивалентов.
Объект Form представляет форму MS ACCESS, открытую в режиме Design(Конструктор), Form(Режим формы) или DataSheet (Режим таблицы).
Чтобы начать работу с объектом Form, необходимо открыть форму, используя метод OpenForm объекта DoCmd. При неоднократном обращении к одному и тому же объекту Form лучше объявить объектную переменную, которая будет передавать этот объект.
Объект Report представляет собой отчет MS ACCESS, открытый в режиме Design (Конструктор), Print Preview (Предварительный просмотр) или Layout Preview (Образец).
Чтобы в VB можно было работать с объектом Report, сначала надо открыть отчет методом OpenReport объекта DoCmd. Можно получить ссылку на объект Report и присвоить ее объектной переменной.
Метод объекта DoCmd, соответствующий макрокоманде, обычно выполняет точный эквивалент макродействия. Методы объекта не возвращают значения или объекты и поэтому имеют следующий синтаксис:
DoCmd. метод аргумент1, аргумент2,...,аргументN
Существует два типа методов DoCmd, работающих с объектом Application в Access. Согласно одному из них объект нужно задавать как аргумент метода.
Например:
DoCmd.OpenReport"Приказ"
Второй метод применяется к активному объекту, поэтому объект не нужно задавать в качестве аргумента.
Например:
DoCmd.Close
Объекты DAO
Объекты DAO используются для управления базами данных из всех приложений, поддерживающих VBA.
Они позволяют:
1) Проектировать и создавать базы данных, изменять определения таблиц, запросов, индексов и связей.
2) Добавлять, удалять и изменять записи в базах данных.
3) Защищать и обеспечивать безопасность данных в базах данных.
4) Работать с различными форматами данных и присоединять таблицы из других баз данных.
5) Использовать информацию из удаленных баз данных и создавать приложения клиент-сервер.
К наиболее часто используемым объектам DAO относятся:
· Объект Database представляет открытую базу данных. Одновременно в одном рабочем пространстве можно открыть несколько баз данных. Существующая база данных открывается в процедуре VBA с помощью метода OpenDatabase объекта Workspace (рабочего пространства, создаваемого автоматически при запуске Access). Для ссылки на текущую базу данных Access позволяет использовать функцию CurrentDb().
· Объект Recordset представляет набор записей в таблице базы данных либо набор записей, получаемых в результате выполнения запроса или оператора SQL. В непустом объекте Recordset можно указать одну текущую запись.
Каждый объект Recordset состоит из записей и полей. Создаются объекты Recordset при вызове метода OpenRecordset. Этим методом обладают разные классы объектов: Database, QueryDef, RecordSet, TableDef. Каждый объект этих классов может породить набор записей(таблицу), составляющую новый объект RecordSet.
Перемещение по записям
Методы MoveLast, MoveFirst, MoveNext и MovePrevious находят в указанном объекте Recordset последнюю, первую, следующую за текущей и предыдущую запись и делают ее текущей.
Для перемещения на заданное число записей вызывается метод Move.
Добавление записей методом AddNew
Синтаксис использования метода:
набор записей.AddNew
Удаление записей
Для удаления текущей записи объекта RecordSet используется метод Delete:
набор_записей.Delete
Изменение текущей записи
Для изменения текущей записи используется метод Edit:
набор_записей.Edit
Основные сведения о программировании в Access VBA
В Access выполнение программы можно задать тогда, когда объект распознает событие. Событие - это специальные изменения в состоянии объекта. В этом случае создается макрокоманда или процедура VBA, которая присваивается событийной характеристике объекта, и событие запускает программу.
Access поддерживает три типа модулей: стандартные, модули формы и модули отчета.
Стандартный модуль создается для хранения кода Access VBA так же, как создается любой другой объект БД. Использование стандартных модулей для хранения кода Access VBA ускоряет открытие форм и отчетов, но замедляет начальный запуск приложения.
Модули формы содержат код, отвечающий за обработку событий и называемый процедурой обработки событий, который является реакцией на события, запущенные формами или элементами управления форм. Когда создается объект формы, то создается класс объекта в базе данных. Создаваемые для формы процедуры обработки событий являются новыми методами, и следовательно, термин класс модуля для кода ассоциируются с конкретной формой.
Для открытия модуля формы необходимо нажать кнопку «Программа» на панели инструментов в режиме конструктора формы или выполнить команду Вид / Программа. В любом случае откроется модуль Form _ имя _ формы. В Access 97 формы имеют новое свойство «Наличие модуля». Если ему присвоено значение «Да», значит, форма имеет модуль класса, «Нет» – в форму нет необходимости добавлять какой-либо код.
Модули отчета содержат код, являющийся реакцией на события, запущенные отчетами, разделами отчетов. Элементы управления отчетов не запускают события. Модули отчета открываются так же, как модули формы и автоматически приобретают название Report_Имя_отчета.
Особенности работы с объектами
Перед каждой операцией работы с объектом необходимо применить ссылку на объект.
Один из способов ссылки на объект состоит в том, чтобы, начав с верхнего объекта иерархии, указать маршрут к целевому объекту (записав имена всех объектов и совокупностей на пути к нему). Объекты разделяются восклицательным знаком и точкой.
· Восклицательный знак применяется при переходе от совокупности к одному из ее членов:
имя_совокупности!имя_объекта
например:
Forms!formname
· Точка используется при переходе от объекта к одной из совокупностей:
имя_объекта.имя_совокупности
например:
Forms!formname.Controls
Forms!formname.Controls!controlname
· Если имя объекта содержит пробелы, его нужно заключить в квадратные скобки:
Forms!Switchboard
Reports![Expense Report]
· Для отделения названия характеристики от имени объекта используется операция точки:
Forms![Expense Categories].RecordSource
· синтаксис ссылки на поле в таблице или запросе зависит от того, относится ли таблица или запрос к базовому источнику записей открытой формы.
Ссылка на поле в источнике записей формы имеет синтаксис:
Forms!имя_формы!имя_поля
Ссылка на поле в таблице или запросе основана на применении синтаксиса:
имя_таблицы.Fields!имя_поля или имя_таблицы!имя_поля
имя_запроса.Fields!имя_поля или имя_запроса!имя_поля
В программировании на VBA переменная - это временная область памяти, содержащая значение или используемая для ссылки на объект. Такой области присваивается имя.
В VBA объект можно рассматривать как совокупность характеристик и методов. Процедура VBA способна непосредственно считывать и изменять характеристики, а также манипулировать объектом, выполняя его методы.
При работе с характеристиками в VBA доступны два действия:
· изменение значения характеристики, т.е. ее установка
· считывание значения характеристики, т.е. ее получение.
При установке значения характеристики ей присваивается значение:
объект.имя_характеристики=значение
или
объект.имя_характеристики<значение
При получении характеристики считывается ее текущее значение. Для хранения результата обычно используется переменная.
Если значение является текстовым, результат можно присвоить переменной в операции присваивания:
переменная=объект.имя_характеристики
Если характеристика представляет собой объект, то ссылка на объект присваивается объектной переменной:
Set переменная=объект.имя_характеристики
Чтобы задать объекту выполнение одного из методов, достаточно вызвать данный метод, используя ссылку на объект и на имя метода, разделенные операцией точки:
объект.метод
Большинство методов не возвращает результат, но есть и такие, которые возвращают текстовые значения и даже объекты.
Если метод возвращает текстовое значение, то для его сохранения в переменной можно использовать оператор присваивания:
переменная=объект.метод
Если метод возвращает объект, для присваивания результата объектной переменной используется оператор Set:
Set переменная=объект.метод
Содержание лабораторной работы
Решается задача обработки поступления товаров на склад. База данных должна содержать две таблицы. Входная информация для решения задачи содержится в таблице «Наличие», а выходная – в таблице «Накладные». При решении этой задачи должна корректироваться запись входной таблицы "Наличие" и добавляться новая запись в выходную таблицу "Накладные".
Справочная информация о товарах, хранящихся на складе, имеется в таблице “Наличие ”, содержащей следующие данные:
¨ Код товара
¨ Наименование товара
¨ Остаток
¨ Дата
¨ Единицы измерения
В форму осуществляется ввод информации о каждой поступившей на склад партии товаров:
Ø номер накладной
Ø код товара
Ø дата поступления
Ø количество
В таблице "Наличие" осуществляется поиск записи с введенным кодом детали. Если искомая запись найдена, то программа должна предусмотреть выполнение следующих операций:
1) Произвести корректировку найденной записи в таблице "Наличие", заключающуюся в добавлении к значению поля "Остаток" введенного значения "количество" и в замещении значения поля "Дата" на введенное значение "дата поступления"
2) Добавить новую запись в таблицу "Накладные".
Выходная таблица имеет следующий состав полей:
¨ Номер накладной
¨ Код товара
¨ Дата поступления
¨ Количество
Выполнение лабораторной работы
1. Загрузите ACCESS.
2. Создайте таблицу «Наличие» и введите данные по пяти товарам.
3. Создайте таблицу «Накладные».
4. Создайте форму следующего вида:
Задайте имена кнопкам соответственно: ОК и Выход, задайте имена полям соответственно: Номер накладной - nn, Код товара -kt, Дата поступления - dp, Количество -kp.
3. В окне свойств кнопки Ok на вкладке События выберите значение Процедура обработки события и здесь же нажмите кнопку (с тремя точками).
4. Введите текст процедуры в модуле формы «Поступление»:
Private Sub Ok_Click()
On Error GoTo Err_Ok_Click
n = nn.Value
t = kt.Value
d = dp.Value
k = kp.Value
Obrabotka
nn.Value = Null
kt.Value = Null
dp.Value = Null
kp.Value = Null
Exit_Ok_Click:
Exit Sub
Err_Ok_Click:
MsgBox Err.Description
Resume Exit_Ok_Click
End Sub
5. В секцию General введите следующие описания:
Option Compare Database
Option Explicit
Dim n As String
Dim t As String
Dim d As Date
Dim k As Single
6. Действуя по аналогии с п.3,4 введите текст процедуры обработки события Click для кнопки Выход:
Private Sub Выход_Click()
On Error GoTo Err_Выход_Click
DoCmd.Close
Exit_Выход_Click:
Exit Sub
Err_Выход_Click:
MsgBox Err.Description
Resume Exit_Выход_Click
End Sub
7. В окне VBA выполните команду Insert \ Procedure и затем в окне Add procedure введите имя Obrabotka и выберите тип function.
Function Obrabotka ()
Dim dbs As Database
Dim rst As Recordset
Dim nst As Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Наличие")
Set nst = dbs.OpenRecordset("Накладные")
rst.MoveFirst
Do Until rst.EOF
If t = rst![Код товара] Then
rst.Edit
rst![Остаток] = rst![Остаток] + k
rst![Дата] = d
rst.Update
nst.AddNew
nst![Номер накладной] = n
nst![Код товара] = t
nst![Дата поступления] = d
nst![Количество] = k
nst.Update
End If
rst.MoveNext
Loop
End Function
8. Выполните созданное приложение, вводя данные в поля формы "Поступление" и нажимая после каждого заполнения полей кнопку Ok.
Дата добавления: 2015-10-29; просмотров: 215 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
ТРИ НЕРАСПЕЧАТАННЫХ ПИСЬМА | | | История SWOT-анализа |