- •1. Операторы, процедуры, типы данных vba
- •Основные типы данных в vba
- •Преобразование типов данных
- •Is (оператор)
- •Функция IsArray
- •IsArray (Имя переменной)
- •IsDate (функция)
- •IsEmpty (функция)
- •IsError( функция)
- •IsMissing(функция)
- •IsNull (функция)
- •IsNumeric (функция)
- •IsNumeric(выражение)
- •IsObject(функция)
- •2. Работа с объектами
- •3. Применение процедур vba
- •Модель программирования в Access
- •Типы процедур
- •Поле со списком
- •Вызов процедур
- •Запуск процедур-функций
- •Запуск процедур-подпрограмм
- •4. Операторы vba
- •Логические операторы Логические операторы
- •Некоторые функции в vba
- •5. Объявление переменных, констант в vba
- •Создание пользовательских типов данных
- •Dim c As клиент
- •Cоздание массивов постоянной длины
- •Cоздание массива из списка значений
- •Создание динамических массивов
- •6.Организация ввода-вывода данных с помощью функций InputBox и MsgBox
- •7. Управляющие структуры
- •Структура If … Then
- •Структура If … Then … Else
- •Вторая группа операторов]
- •Второй блок операторов]
- •Алгоритм
- •Переход по метке
- •10: Программный код Cтруктура Select Case
- •8. Циклы в vba Cтруктура For ….Next
- •Операторы
- •Структура For Each … Next
- •Структура Do… Loop
- •Структура Do While … Loop
- •Структура Do ….While Loop
- •Cтруктуры Do Until … Loop и Do … Loop Until
- •9. Операторы Exit
- •Функции для работы со строковыми переменными
- •11. Классические задачи программирования: сортировка, поиск
- •If IsNull(массив(X)) Then Exit Function
- •12. Управление базами данных
- •Основные понятия базы данных
- •Установка значений свойств
- •Считывание свойств
- •Вызов методов
- •Объект.Метод
- •Присваивание значений возвращаемых из методов
- •13. Объект Database –база данных
- •Cвойства объекта Database
- •Методы объекта Database
- •14. Объект TableDef
- •Свойства объекта TableDef
- •Методы объекта TableDef
- •Использование свойства Fields объекта TableDef
- •Использование свойства TableDefs объекта Database
- •15. Объект Form –экранная форма Свойства объекта Form
- •Применение некоторых свойств oбъекта Form Свойство Me
- •Cвойство ActiveControl
- •Свойство CurrentRecord
- •Свойство Visible
- •Свойства OrderBy и OrderByOn
- •Методы объекта Form
- •Список и поле со списком
- •Глава 16. Объект DoCmd и его методы
- •Глава 17. Объект Recordset
- •Свойства объекта Recordset
- •Свойства bof и eof
- •Создание объекта Recordset
- •Глава 18. Применение объекта Debug
- •Глава 19. Применение свойства RecordCount
- •Применение свойства Fields
- •Применение метода GetRows объекта Recordset
- •Глава 21. Объекты QueryDef
- •Свойства объектов QueryDef
- •Использование метода Execute
- •Глава 22. Применение языка sql
- •Использование выражения select
- •Простые формы select
- •Фильтрация данных с помощью предложения where
- •Сортировка данных
- •Объединение таблиц
- •Глава 23. Объект Report События
- •Некоторые свойства объекта Report
- •Методы объекта Report
- •Применение свойств объекта Report
- •Глава 24. Настройка пользовательского интерфейса
- •Глава 25. Создание и изменение панелей команд
- •Глава 26. Создание и удаление контекстных меню
- •Приложение
- •Этапы реализации задачи:
- •If IsNull(.Fields!цена) Then Exit Do
Создание объекта Recordset
Объект Recordset подчинён объекту Database, поэтому сначала открывается объект Database.
Перед этим необходимо объявить объектные переменные типа Database, Recordset.
Dim basa as Database, nabor as Recordset
В общем случае можно работать с несколькими базами данных одновременно. Их только нужно открыть.
Set basa=Opendatabase(“ Путь_к_базе_данных”)
Путь_к_базе_данных задаётся строкой.
Если таблица или запрос находятся в текущей базе данных, то её открытие будет выглядеть следующим образом:
Set basa=CurrentDb
База данных имеет метод открытия набора записей.
Set nabor=basa.OpenRecordset(“имя_таблицы или запроса”[, тип_работы])
Первый параметр задаётся строковой переменной, второй параметр необязательный и он означает, какие операции в этом наборе можно производить.
Предусмотрены следующие режимы работы:
DbOpenTable-записи можно добавлять, изменять, редактировать.
DbOpenDynaset - для запросов, допускает любые операции.
DbOpenSnapshot -запрещает вставку, удаление, исправление, но позволяет переход к записям в произвольном порядке.
DbOpenForwardOnly - разрешает последовательный доступ от первой к последней записи.
Если тип не указан. по умолчанию для таблиц берётся первый, для запросов – второй.
Пример:
Организовать ввод данных в таблицу “Товары” через форму, созданную пользователем.
1.В конструкторе таблиц создали структуру таблицы, но не заполняем её.
2. В конструкторе форм создаём форму с 4 текстовыми полями и кнопкой.
3.В свойствах полей на вкладке «Другие» задаём имена и подписи полям, соответствующие именам полей в таблице.
4.По событию «Нажатие кнопки» пишем процедуру:
Форма будет выглядеть
следующим образом:
Текст процедуры:
Private Sub Кнопка4_Click()
Dim basa As Database, nabor As Recordset ‘ Объявление переменных basa, nabor типа
‘ Database,Recordset
Set basa = CurrentDb ‘ Работаем в текущей базе данных
Set nabor = basa.OpenRecordset("Товары", dbOpenTable) ‘ Открываем набор в режиме
‘ таблицы
With nabor
.AddNew ‘ Добавляет в таблицу пустую запись
.Fields!Товар = Товар.Value ‘ Значению полю в таблице присваивается
.Fields!Цена = Цена.Value ‘ значение текстового поля в форме
.Fields!Поставщик = Поставщик.Value ‘ тоже
.Fields!Дата_поставки = Дата_поставки.Value ‘ тоже
.Update ‘ Обновляет таблицу
.Close ‘ Закрывает набор
End With
End Sub
Пример:
Отредактировать в таблице “Товары” последнюю запись.
Таблица до выполнения программы состояла из записей
Создадим в конструкторе форму “Редактор” на основе таблицы «Товары»:
В поля формы введём новые значения для последней записи.
По событию «Нажатие кнопки» пишем программный код.
Private Sub Кнопка8_Click()
Dim basa As Database, nabor As Recordset
Set basa = CurrentDb
Set nabor = basa.OpenRecordset("Товары", dbOpenTable)
With nabor
.MoveLast ' Устанавливает указатель файла на последнюю запись
.Edit ' Вызывает метод редактирования
.Fields!Товар = Товар.Value
.Fields!Цена = Цена.Value
.Fields!Поставщик = Поставщик.Value
.Fields!Дата_поставки = Дата_поставки.Value
.Update
.Close
End With
End Sub
После нажатия кнопки «Редактор» таблица будет выглядеть следующим образом:
2-й способ решения этой задачи:
Создать форму на основе таблицы «Товары».
Для этого на вкладке ФОРМЫ нажать кнопку СОЗДАТЬ, в появившемся окне диалога выбрать в качестве источника данных таблицу «Товары».
(Рисунок выше)
2.Нажать ОК.
Перетащить мышью каждое поле из списка
в область данных формы.
Текстовым полям формы автоматически даются имена и подписи, соответствующие именам полей в таблице.
Установить кнопку с подписью «РЕДАКТОР» и по её нажатию написать программу:
Private Sub Кнопка4_Click()
Dim frm As Form
Set frm = Forms!Редактор
Frm. Requery ‘ Метод обновления источника данных
End Sub
Здесь можно редактировать любую запись в таблице «Товары».
Установить номер нужной записи, используя линии прокрутки в поле Запись, ввести новые значения и нажать кнопку «РЕДАКТОР». Обновление в таблице «Товары» произойдёт.
Используя этот метод, можно также добавлять записи в таблицу. Для этого необходимо ввести значения в текстовые поля формы, установив номер записи следующим после последнего.
Пример:
Получить из таблицы “Товары” список товаров, у которых цена больше заданной.
Создадим форму вида:
В поле “Заданная цена ” вводим значение заданной цены.
По нажатию кнопки “Выборка ” будет появляться системное окно MsgBox c названием “Выборка”, с кнопками «Да», «Нет». При ответе «Да» из таблицы в текстовые поля данной формы будут выводиться значения.
Текст программы:
Private Sub Кнопка8_Click()
Dim basa As Database, nabor As Recordset, zena1 As Currency
Set basa = CurrentDb
zena1 = Заданная_цена.Value
‘Переменной zena1 присваивается значение из текстового
‘поля с именем «Заданная_цена»
Set nabor = basa.OpenRecordset("Товары", dbOpenTable)
With nabor
Do Until.EOF ‘ Пока не достигнут конец файла
If MsgBox("Продолжать выборку?", vbYesNo, "ВЫБОРКА") = vbYes Then
If.Fields!Цена > zena1 Then
Товар.Value =.Fields!Товар ‘Вывод значений из таблицы в поля формы
Цена.Value =.Fields!Цена
Поставщик.Value =.Fields!Поставщик
Дата_поставки.Value =.Fields!Дата_поставки
End If
.MoveNext ‘Переход к следующей записи
Else
Exit Do ‘ Преждевременный выход из цикла
End If
Loop
.Close ' Закрывает набор
End With
End Sub