Объектно-ориентированное программирование БД

Содержание

Слайд 2

Макросы Макросы содержат понятные названия макрокоманд. Окно макроса изначально содержит поля

Макросы

Макросы содержат понятные названия макрокоманд. Окно макроса
изначально содержит поля для

выбора макрокоманд и примечания,
но может быть дополнено полями имени предопределенного макроса и условия для его выполнения. Покомандное выполнение макроса задается в режиме конструктора по команде Запуск – По шагам. Составим МакросСообщение, выводящий сообщение на экран.

Сложный макрос с созданным ранее макросом в качестве одной из макрокоманд. (макрос с именем AutoExec автоматически запускается в момент открытия БД).

Код макроса можно преобразовать в код VB по команде Сервис – Макрос – Преобразовать макросы:

Function Autoexec()
DoCmd.Hourglass True
DoCmd.RunMacro "МакросСообщение", , ""
DoCmd.OpenForm "тАбитуриенты", acNormal, "", "", , acNormal
End Function

Слайд 3

4. Запустим форму Печать и построим условия для выбора отчета с

4. Запустим форму Печать и построим условия для выбора отчета с

помощью нового макроса

3. Пример использования условий при выполнении команд макроса. Разработаем форму для формирования отдельных отчетов. Форма содержит группу переключателей

Слайд 4

Свободная форма Создадим макрос, открывающий запрос на событии ПОСЛЕ ОБНОВЛЕНИЯ поля

Свободная форма

Создадим макрос, открывающий запрос на событии ПОСЛЕ ОБНОВЛЕНИЯ поля формы.

Запрос

с параметром предполагает точный ввод значений параметра. Выбор этих значений из списка возможных – эффективнее. Создадим пустую форму и поместим на нее поле со списком, указав в качестве источника поле НазваниеВУЗА из таблицы тВУЗы. Не закрывая форму, создадим запрос, указав на выбор названия ВУЗа из значения поля формы
Слайд 5

DO WHILE условие истинно …. LOOP DO …. LOOP WHILE условие

DO WHILE условие истинно
….
LOOP

DO
….
LOOP WHILE условие истинно
или
LOOP UNTIL условие не

станет ложно

ЦИКЛ С ПРЕДУСЛОВИЕМ
Выполнять, пока условие истинно

ЦИКЛ С ПОСТУСЛОВИЕМ
Выполнять, пока условие
истинно

FOR I = 1 TO n STEP m
….
NEXT

ЦИКЛ С ОПРЕДЕЛЕННЫМ ЗНАЧЕНИЕМ ПАРАМЕТРА
Выполнять, пока параметр цикла i не превысит n

Слайд 6

Операторы условной обработки IF … THEN … ELSE … END IF

Операторы условной обработки

IF …
THEN

ELSE

END IF

IF …THEN…

If rst.RecordCount

<> 0 Then rst.MoveLast

IF Forms![Счет]![P0] <> ""
THEN
Forms![Счет]![P0] = Forms![Счет]![P0] + vbCrLf + me.Имя
ELSE
Forms![Счет]![P0] = me.Наименование
END IF

Вложенный условный оператор

IF (a <> 0 Or a <> Null) THEN
IF b>0 THEN
b=sqrt(b)
ELSE
b=sqrt(abs(b))
END IF
END IF

Конструкция WITH…END WITH

WITH my_recordset
.Edit
![Выбор] = False
.Update
.MoveNext
END WITH

Конструкция WITH полезна при многократном обращении к форме по ее полному имени Forms!Абитуриенты!Год_рождения.Visible или
WITH Forms!Абитуриенты
!Год_рождения.Visible=FALSE
!Адрес.Visible=TRUE
END WITH

Слайд 7

Оператор выбора SELECT и безусловного перехода GOTO Оператор безусловного перехода GOTO

Оператор выбора SELECT и безусловного перехода GOTO

Оператор безусловного перехода GOTO метка

используется для изменения последовательности выполнения операторов, например, принудительного завершения цикла
1:
y = InputBox("Ваш возраст ?", "Окно ввода")
Select Case y
Case Is <= 0: MsgBox ("Ошибка")
GoTo 1
Case Is < 55: i = MsgBox("Ваш возраст " & y & ". Вам рано на пенсию")
Case Is >= 55: i = MsgBox("Ваш возраст " & y & ". Вы на пенсии")
End Select
Слайд 8

Вызов процедуры Sub main() a = InputBox("Введите коэфф. a") b =

Вызов процедуры

Sub main()
a = InputBox("Введите коэфф. a")
b = InputBox("Введите

коэфф. b")
c = InputBox("Введите коэфф. c")
Do While a <> 0
Call kv_kor (a, b, c) ‘вызов процедуры
Loop
End Sub
Sub kv_kor (a, b, c) ‘ процедура
d = b * b - 4 * a * c формируется
If d < 0 Then в составе модуля
MsgBox ("Нет решения")
GoTo 1
Else
x1 = (-b + Sqr(d)) / (2 * a)
x2 = (-b – Sqr(d)) / (2 * a)
MsgBox ("x1=" & x1 & ", x2=" & X2)
End If
1:
a = InputBox("Введите коэфф. a")
b = InputBox("Введите коэфф. b")
c = InputBox("Введите коэфф. c")
End Sub
Слайд 9

Модули - процедуры и функции Модуль - совокупность объявлений и процедур,

Модули - процедуры и функции

Модуль - совокупность объявлений и процедур, объединенных

в единое целое. Различают стандартный модуль, модуль формы и модуль отчета.
Стандартный модуль создается как объект БД и может выполнять любые вычисления. Модуль форм или отчета разрабатывается для обработки событий форм или отчетов. Каждый модуль состоит из области описания и процедур.
Процедура представляет собой последовательность операторов. Входящие в модуль процедуры объединены общей областью описания.
Процедуры делятся на две категории: подпрограммы и функции. Каждая процедура может быть вызвана из любого модуля, а функция - из таких объектов, как форма, запрос или отчет. Для передачи значений из вызывающих операторов в вызываемые процедуры служат аргументы.
Наряду с общедоступными процедурами Public (по умолчанию), существуют локальные процедуры Private, доступные только в том модуле, в котором они описаны.
Обращение к функции выполняется по ее имени на вкладке СОБЫТИЕ вместо выражения [Процедура обработки события], например,
=имя_функции()
Слайд 10

Переменные Переменные, объявленные без использования слова AS, принимают тип VARIANT (16

Переменные

Переменные, объявленные без использования слова AS, принимают тип VARIANT (16 байт

для десятичных чисел и 22 байта для строк !), например, переменная “a” в объявлении:
DIM а, b AS STRING
Переменные, объявленные в процедуре или функции, по умолчанию являются локальными. Они объявляются оператором DIM. Оператор PRIVATE явно объявляет локальную переменную для процедуры или модуля.
Переменную, значение которой можно использовать во всех процедурах модуля, объявляют со словом PUBLIC в разделе DECLARATIONS модуля.

Переменную, значение которой можно использовать во всех модулях и процедурах приложения, объявляют со словом GLOBAL в разделе DECLARATIONS модуля.

Директивы кода:
Option Explicit - требование обязательного объявления переменных.
Option Compare Database – метод сравнение текстовых строк в процессе их сортировки.

Слайд 11

События Объекты на формах и отчетах имеют СВОЙСТВА (например, скрытое поле)

События

Объекты на формах и отчетах имеют СВОЙСТВА (например, скрытое поле) и

МЕТОДЫ (например, поле обновить). Обращаться к ним можно в окне свойств объекта и в коде VBA, открываемом при выборе события (Click, DblClick), связаного с объектом (поле события может содержать имя макроса).
Если поле свойства события содержит строку [Процедура обработки события], то VBA выполнит процедуру обработки события, которая имеет вид
Sub Объект_Событие()… End Sub

Открытие формы включает события Open (открытие), Load (загрузка), Activate (включение).
Для отмены события используется аргумент Cancel. Если ему присвоить True, то событие отменяется. Можно отменить события: BeforeDelConfirm (до подтверждения Del), BeforeInsert (до вставки), BeforeUpdate (до обновления), DblClick (двойное нажатие кнопки), Delete (удаление), Error (ошибка), Exit (выход), Format (форматирование), Open (открытие), Print (печать), UnLoad (выгрузка).
Объекты Screen (свойство ActiveControl) : ActiveForm (активная форма), ActiveReport (активный отчет) и PreviousControl (предыдущий элемент управления).
Например, Screen.PreviousControl.SetFocus (установка фокуса на предыдущий объект).

Слайд 12

Методы RunComman и DoCmd 1. Метод RunCommand используется для выполнения команд

Методы RunComman и DoCmd

1. Метод RunCommand используется для выполнения команд меню/панелей

инструментов с вызовом диалоговых окон.
[DoCmd].RunCommand command или [Application].RunCommand command или RunCommand command 
где command - это соответствующая команда меню или панели инструментов. Префикс [Application] или [DoCmd] не обязателен.
2. Метод DoCmd выполняет эти же действия с заданием аргументов команды без необходимости использования диалоговых окон команд.
RunCommand acCmdPrint ' вывод диалогового окна "Печать".
RunCommand acCmdSelectRecord  ' выбор текущей записи (команда Выделить запись из меню Правка)
DoCmd.PrintOut acSelection    ' печать текущей записи
Вызов макросов с помощью команды DoCmd:
DoCmd DoMenuItem A_FormBar, A_EditMenu, A_UndoField, , A_Menu_Ver20 - восстановление записи.
DoCmd GoToRecord , , A_NEWREC - переход к новой записи.
DoCmd Close - закрытие текущего объекта.
DoCmd Quit - закрытие приложения.
DoCmd DoMenuItem A_FormBar, A_EditMenu, 10, , A_MenuVer20 - вывод на экран диалога Поиск.
Слайд 13

Модули 3. В свойствах формы событие ТЕКУЩАЯ ЗАПИСЬ содержит код: Private

Модули

3. В свойствах формы событие ТЕКУЩАЯ ЗАПИСЬ содержит код:

Private Sub Form_Current()


On Error Resume Next
If Me![фото] <> "" Then
Me.Рисунок.Picture = Me.фото
Else
Me.Рисунок.Picture = ""
End If
End Sub

1. Столбчатая форма для таблицы тАбитуриенты. В поле Фото записано имя файла с фото. Хранение не файла, а его имени в файловой системе эффективнее, т.к. уменьшает размер БД.

2. На форму поместим поле ФОТО со свойством ВЫВОД НА ЭКРАН=НЕТ и объект РИСУНОК с именем РИСУНОК.

Слайд 14

Код события Текущая запись Точка останова Шаг отладки кода (F8) Подручный

Код события Текущая запись

Точка останова

Шаг отладки кода (F8)

Подручный процессор

Просмотр значений

переменных

Текущий объект

Окно отладки программного кода

Слайд 15

“Полосатый” отчет Чередование темных и светлых полос задается на событии ФОРМАТИРОВАНИЕ

“Полосатый” отчет

Чередование темных и светлых полос задается на событии ФОРМАТИРОВАНИЕ выделенного

мышкой заголовка ОБЛАСТИ ДАННЫХ отчета (Свойство BACKCOLOR означает цвет фона) :
Dim BackForth As Variant
Private Sub ОбластьДанных_Format(Cancel As Integer, FormatCount As Integer)
Const ColorWhite = 16777215
Const ColorGray = 12632256
Select Case BackForth
Case True
Me. ОбластьДанных.BackColor = ColorWhite
Case False
Me. ОбластьДанных.BackColor = ColorGray
End Select
BackForth = Not BackForth
End Sub
Слайд 16

Бегущая строка Private Sub Form_Timer() Select Case Me.TimerInterval Case 200 Me.Надпись2.Visible

Бегущая строка

Private Sub Form_Timer()
Select Case Me.TimerInterval
Case 200
Me.Надпись2.Visible = True
Me.Надпись1.Visible = False
Me.TimerInterval

= Me.TimerInterval + 200
Case 400
Me.Надпись3.Visible = True
Me.Надпись2.Visible = False
Me.TimerInterval = Me.TimerInterval + 200
Case 600
Me.Надпись4.Visible = True
Me.Надпись3.Visible = False
Me.TimerInterval = Me.TimerInterval + 200
Case 800
Me.Надпись1.Visible = True
Me.Надпись4.Visible = False
Me.TimerInterval = 200
End Select
End Sub

Для демонстрации действий с таймером создадим на форме надписи с именами НАДПИСЬ1, НАДПИСЬ2, НАДПИСЬ3, НАДПИСЬ4. В свойствах первой надписи на вкладке МАКЕТ параметр ВЫВОД НА ЭКРАН установим в значение ДА, у остальных надписей - в значение НЕТ. На событие формы ИНТЕРВАЛ ТАЙМЕРА указываем 200 (миллисекунд), а в поле ТАЙМЕР наберем код:

Процедура выполняется по истечении времени, указанного в поле ИНТЕРВАЛ ТАЙМЕРА. Оператор Select Case … End Select проверяет достижение таймером значений и поочередно задает для надписей режимы видимости (свойство Visible). По истечении 800 миллисекунд таймеру вновь задается 200 миллисекунд для бесконечного цикла таймера.

Слайд 17

Экспорт данных Access в документ Word Создадим форму для контроля вывода

Экспорт данных Access в документ Word

Создадим форму для контроля вывода данных

на печать. На диске С создадим шаблон заполняемого из БД документа “C:\letter.doc”

Private Sub Кнопка10_Click()
Dim wdd As Word.Document
Dim wda As Word.Application
Dim db As Database
Set db = CurrentDb()
Dim str_sql As String
'проверяем вариант отчета в Word
Select Case Me.Группа0.Value
Case 1:
'открываем документ c готовым шаблоном
Set wdd = GetObject("C:\letter.doc")
'создаем указатель на приложение
Set wda = wdd.Parent
'делаем приложение видимым
wda.Visible = True
'размер шрифта, установленный по умолчанию в MS WORD

a = wda.Selection.Font.Size
' можно создать строку статического запроса
' str_sql = "SELECT тАбитуриенты.кодАБ,” _
‘ & “тАбитуриенты.Фамилия, тАбитуриенты.Имя, “
‘ & “ тАбитуриенты.Отчество, тВУЗы.НазваниеВУЗа, “
‘ & “тВУЗы.Телефон, тВУЗы.Рейтинг FROM тВУЗы" _
' & " INNER JOIN (тАбитуриенты INNER JOIN “ _
‘ & “тСвязьАбВУЗ ON тАбитуриенты.кодАБ =“ _
‘ & “тСвязьАбВУЗ.КодАб) ON” _
‘ & “ тВУЗы.КодВУЗа = тСвязьАбВУЗ.КодВуза"
' Set rst = db.OpenRecordset(str_sql, dbOpenDynaset, dbReadOnly)
' можно использовать существующий в БД запрос
Set rst = db.OpenRecordset("АбВУЗ", dbOpenDynaset, dbReadOnly)