Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции VBA.doc
Скачиваний:
1
Добавлен:
21.04.2019
Размер:
68.1 Кб
Скачать

Выполнение типовых операций в 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