русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Выполнение процедур VBA


Дата добавления: 2015-07-09; просмотров: 921; Нарушение авторских прав


 

Существуют следующие способы вызова процедур VBA:

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

· Вызов процедуры-функции в выражении;

· Вызов процедуры в другой процедуре;

· Выполнение макрокоманды ЗапускПрограммы (RunCode) в макросе. Данная макрокоманда может вызывать встроенную функцию VBA или функцию, созданную пользователем. Для запуска процедуры Sub надо создать функцию, которая вызывает процедуру Sub, и с помощью макрокоманды ЗапускПрограмм (RunCode) вызвать эту функцию.

Function FFF()

FF()

End Function

Процедура состоит из последовательности инструкций:

методы, применяемые к объектам базы данных;

команды для управления последовательностью выполнения операций в программе;

встроенные функции Access.

Метод имеет формат:

<объект>.<метод>[[(]<список аргументов>[)]]

Список аргументов заключается в скобки, если метод должен возвратить значение.

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

Пример метода, возвращающего значение:

Dim dbs As Database

Dim rst As Recordset

Set dbs = CurrentDb()

Set rst = dbs.OpenRecordset (“Студенты”, dbOpenTable, ReadOnly)

 

Здесь метод OpenRecordset открывает таблицу с именем “Студенты” в текущей базе данных в режиме только для чтения как набор данных типа таблица. Объектом является текущая база данных CurrentDb(), представленная объектной переменной dbs. Метод возвращает значение, которое является ссылкой на открытую только для чтения таблицу. Инструкция Set присваивает это значение объектной переменной rst.



Примеры методов, не возвращающих значения.

Forms!Студенты![Номер_зачетки].SetFocus

Здесь метод SetFocus выполняется для объекта - поля Номер_зачетки в форме Студенты и переводит на него фокус. При этом аргументы отсутствуют.

DoCmd.Close acForm, “Студенты”

Здесь метод Close выполняется для объекта DoCmd, что позволяет запустить соответствующую макрокоманду. Аргументы acForm, “Студенты” указывают, что закрывается форма с именем “Студенты”. Этот метод не возвращает значение, поэтому аргументы не заключаются в скобки.

 

Примеры модулей

 

Пример 1. Поиск записи по ключу и замена не ключевых полей в таблице ПОСТАВКА.

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

Dim dbs As Database

Dim rst As Recordset

'определение полей для ввода ключей

Dim it As Integer

Dim dp As Date

Dim kp As Integer

'запись в dbs ссылки на текущую базу данных

Set dbs = CurrentDb()

'запись в rst ссылки на таблицу Поставка

Set rst = dbs.OpenRecordset("Поставка", dbOpenTable)

'задание индекса, построенного по ключу

rst.Index = "PrimaryKey"

'присвоение переменным значений, задаваемых

'пользователем в окне ввода

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

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

kp = InputBox("Введите код поставщика", "Ввод параметров поиска")

'метод Seek отыскивает и делает текущей

'запись с введенными ключами

rst.Seek "=", it, kp, dp

'проверяется наличие записи с указанным ключом

If rst.NoMatch Then

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

Exit Sub

End If

'вывод данных из найденной записи

MsgBox " " & "Индекс товара" & rst![Индекс товара] _

& "," & " Дата " & rst![Дата поступления] & ","_

& " Поставщик " & rst![Код поставщика], vbOKOnly

'открытие режима редактирования записи

rst.Edit

rst![Количество] = InputBox("Введите количество")

rst![Закупочная цена] = InputBox("Введите закупочную цену")

'обновление записи

rst.Update

MsgBox "Замена произведена", vbOKOnly

 

Пример 2. Поиск записей с заданным индексом товара и редактирование закупочной цены в таблице ПОСТАВКА.

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

Dim dbs As Database

Dim rst As Recordset

'определение поля для поиска

Dim it As Integer

'запись в dbs ссылки на текущую базу данных

Set dbs = CurrentDb()

'запись в rst ссылки на таблицу Поставка

Set rst = dbs.OpenRecordset("Поставка", dbOpenTable)

'задание индекса, построенного по полю Индекс товара

rst.Index = "Индекс товара"

'присвоение переменной it значения, задаваемого

'пользователем в окне ввода

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

'метод Seek отыскивает и делает текущей

'запись с введенным полем

rst.Seek "=", it

'проверяется наличие записи с указанным полем

If rst.NoMatch Then

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

Exit Sub

End If

Do Until rst![Индекс товара] <> it

'вывод данных из найденной записи

MsgBox " " & "Индекс товара " & rst![Индекс товара] &_

"," & " Дата " & rst![Дата поступления] & "," & _

" Поставщик " & rst![Код поставщика] & "," & " Количество "_ & rst![Количество] & "," & " Закуп_цена " _

& rst![Закупочная цена], vbOKOnly

'открытие режима редактирования записи

rst.Edit

rst![Закупочная цена] = InputBox("Введите закупочную цену")

'обновление записи

rst.Update

MsgBox "Замена произведена", vbOKOnly

‘перемещение на следующую запись

rst.MoveNext

If rst.EOF Then Exit Do

Loop

Пример 3. Рассчитать суммарную поставку по каждому индексу товара в таблице ПОСТАВКА.

 

Dim dbs As Database

Dim rst As Recordset

Dim it As Integer

Dim Sp As Integer

Set dbs = CurrentDb

Set rst = dbs.OpenRecordset("Поставка", dbOpenTable)

rst.Index = "Индекс товара"

it = rst![Индекс товара]

Sp = 0

Do While Not rst.EOF

If it = rst![Индекс товара] Then

Sp = Sp + rst![Количество]

Else

MsgBox "Индекс товара " & it & Chr(13) &_

"Суммарная поставка " & Sp, vbOKOnly

it = rst![Индекс товара]

Sp = 0

Sp = Sp + rst![Количество]

End If

rst.MoveNext

Loop

MsgBox "Индекс товара " & it & Chr(13) & _

"Суммарная поставка " & Sp, vbOKOnly

Пример 4. Создать новую таблицу Продукты из двух полей Индекс товара и Название, обеспечить ввод данных в эту таблицу.

 

On Error GoTo Err_Кнопка_Click

Dim dbs As DAO.Database

Dim rst As DAO.TableDef

Dim Fiel1 As DAO.Field

Dim Fiel2 As DAO.Field

Dim rstt As DAO.Recordset

Dim indi As DAO.Index

Set dbs = CurrentDb()

'создание таблицы

Set rst = dbs.CreateTableDef("Продукты")

'описание первого поля Fiel1

Set Fiel1 = rst.CreateField("Индекс товара", dbInteger)

'добавление поля Fiel1 в семейство полей таблицы tb1

rst.Fields.Append Fiel1

'описание второго поля Fiel2

Set Fiel2 = rst.CreateField("Название", dbText, 20)

'добавление поля Fiel2 в семейство полей таблицы tb1

rst.Fields.Append Fiel2

'добавление таблицы в семейство таблиц

dbs.TableDefs.Append rst

'создание индекса с именем ИндексПродукт

Set indi = rst.CreateIndex("ИндексПродукт")

'задание поля, по которому строится индекс

indi.Fields.Append indi.CreateField("Индекс товара")

'добавление индекса в семейство индексов

rst.Indexes.Append indi

MsgBox "Таблица Продукты создана", vbOKOnly

zzz:

Set rstt = dbs.OpenRecordset("Продукты")

Do While MsgBox("Будем вводить данные", vbOKCancel) = vbOK

'добавление пустой записи

rstt.AddNew

rstt![Индекс товара] = InputBox("Введите индекс товара")

rstt![Название] = InputBox("ВВедите название")

'запись введенных данных в таблицу

rstt.Update

Loop

'описание ошибочной ситуации

Exit_Кнопка_Click:

Exit Sub

Err_Кнопка_Click:

If Err.Number = 3010 Then

MsgBox "Таблица уже существует", vbOKOnly

GoTo zzz

Else

MsgBox Err.Description

End If

Resume Exit_Кнопка_Click

 

Пример 5. В форме Поставщики_Города при выборе города из списка выводить на экран форму Поставщики со списком поставщиков из выбранного города.

Исходные данные:

таблица Поставщики (Код поставщика, Поставщик, Город, Воронежский), таблица Города (Город).

Поле Город в таблице Поставщики является полем с раскрывающимся списком, источником списка является таблица Города. Имеется форма Поставщики.



<== предыдущая лекция | следующая лекция ==>
Основные методы объекта Recordset. | Для решения задачи необходимо создать форму Поставщики_Города нижеследующего вида и связать с ней процедуру.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.543 сек.