- •Объекты в vba
- •Установка фокуса
- •Поиск записи
- •Понятие события
- •Создание процедур событий
- •События при обновлении данных в элементах управления
- •Статические переменные
- •Выполнение типовых операций в Access
- •Работа с таблицами
- •Работа с формами Использование различных конструкций для упрощения программирования и ускорения обработки данных в форме
Выполнение типовых операций в Access
Объекты, с которыми обычно приходится иметь дело при разработке информационных систем в Access: таблицы, формы, отчеты, а также управляющие элементы форм и отчетов.
При работе с таблицами может оказаться необходимым с помощью средств VBA обеспечить: создание индексов, выборку из одной или нескольких таблиц, создание новых, удаление имеющихся таблиц.
При работе с формами может оказаться необходимым при условии запуска формы формировать набор записей, изменять состав и характеристики элементов управления формы.
При работе с отчетами достаточно задавать требуемые значения отдельным управляющим элементам: полям, флажкам при открытии отчета.
Работа с таблицами
Создание таблиц средствами VBA бывает необходимо, когда при обработке события элемента управления в форме нужно сформировать рабочие данные для последующей их обработки в процедурах формы. Созданные таблицы могут служить источником для построения отчета.
Создание таблиц в VBA удобно выполнять с помощью инструкции языка SQL с описателем INTO.
Рассмотрим пример создания таблицы. Создадим форму и в ней кнопку Кнопка2, по нажатию которой будет создаваться таблица, для хранения финансовых результатов (расходов, доходов) работы судов за определенный месяц. Процедура отрабатывает по нажатию кнопки.
********форма ФОтчет**********************
Private Sub Кнопка2_Click()
'удаление имеющейся таблицы
On Error GoTo err_Err
err_Err: If Err = 3010 Then
If MsgBox("Таблица 'ФинансОтчет' уже имеется,удалить ее?", vbYesNo) Then
CurrentDb.Execute ("Drop Table " & "ФинансОтчет;")
End If
End If
'создание новой таблицы
CurrentDb.Execute (" Select '99999999999999999999' as NS, '99' as Mec, 99999 as D INTO " & "ФинансОтчет" & ";")
MsgBox "Таблица 'ФинансОтчет' создана!!!"
'создание уникального индекса для новой таблицы
Dim tblNew As TableDef
Dim indNew As Index
ind = MsgBox("Создать уникальный индекс для поля NS ?", vbYesNo, "Создание индекса для поля")
If ind = 6 Then
'индекс создан
CurrentDb.Execute ("Create UNIQUE Index 'NS' On ФинансОтчет (Ns);")
End If
Dim db1 As Database
Set db1 = CurrentDb
Dim z1, z2, z3 As Recordset
Set z1 = db1.OpenRecordset("Сводка")
Set z2 = db1.OpenRecordset("Груз")
Set z3 = db1.OpenRecordset("ФинансОтчет")
z1.MoveFirst: z3.MoveFirst
i = 1
While Not z1.EOF
If z1.Fields("mec") = Me.ПолеСоСписком0 Then
If i = 1 Then z3.Edit Else z3.AddNew
z3.Fields("NS") = z1.Fields("NS")
z3.Fields("mec") = z1.Fields("mec")
z2.MoveFirst
While Not z2.EOF
If z1.Fields("kg") = z2.Fields("kg") Then
z3.Fields("D") = z2.Fields("fs") * z1.Fields("kol") * Me.Поле5
End If
z2.MoveNext
Wend
i = i + 1
z3.Update
End If
z1.MoveNext
Wend
z1.Close: z2.Close: z3.Close
'Просмотр готового отчета
DoCmd.OpenReport "ФинансОтчет", acPreview
End Sub
Или
********форма ФинОтчет**********************
Private Sub Кнопка10_Click()
'удаление имеющейся таблицы
On Error GoTo err_Err
err_Err: If Err = 3010 Then
If MsgBox("Таблица 'ФинОтч' уже имеется,удалить ее?", vbYesNo) Then
CurrentDb.Execute ("Drop Table " & "ФинОтч;")
End If
End If
'создание новой таблицы
CurrentDb.Execute (" Select '99999999999999999999' as NS, 99 as Mec, 99999 as R,99999 as D INTO " & "ФинОтч" & ";")
MsgBox "Таблица 'ФинОтч' создана!!!"
'создание уникального индекса для новой таблицы
Dim tblNew As TableDef
Dim indNew As Index
ind = MsgBox("Создать уникальный индекс для поля NS ?", vbYesNo, "Создание индекса для поля")
If ind = 6 Then
' индекс создан
CurrentDb.Execute ("Create UNIQUE Index 'NS' On ФинОтч (Ns);")
End If
Dim db1 As Database
Set db1 = CurrentDb
Dim z1, z2 As Recordset
Set z1 = db1.OpenRecordset("ФЗапрос")
Set z2 = db1.OpenRecordset("ФинОтч")
z1.MoveFirst: z2.MoveFirst
i = 1
While Not z1.EOF
If z1.Fields("mec") = Me.ПолеСоСписком7 Then
If i = 1 Then z2.Edit Else z2.AddNew
z2.Fields("NS") = z1.Fields("NS")
z2.Fields("mec") = z1.Fields("mec")
z2.Fields("R") = z1.Fields("R") * Me.Поле7
z2.Fields("D") = z1.Fields("D") * Me.Поле7
i = i + 1
z2.Update
End If
z1.MoveNext
Wend
z1.Close: z2.Close
'Просмотр готового отчета
DoCmd.OpenReport "Отчет", acPreview
End Sub