Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пос_БД_SQL_Server_Access.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
2.41 Mб
Скачать
    1. Выполнение процедур vba

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

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

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

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

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

Function FFF()

FF()

End Function

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

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

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

  3. встроенные функции 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, “Студенты” указывают, что закрывается форма с именем “Студенты”. Этот метод не возвращает значение, поэтому аргументы не заключаются в скобки.

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

Пример 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