Создание стандартных модулей
В VBA Editor меню Insert ð Module
Объекты VBA и Access
Объекты DAO (Data Access Objects)
Объекты ADO (ActiveX Data Objects)
В VBA Editor меню Tools ðReferences
Объект DoCmd
DoCmd.GoToRecord, “ ”, acNext
Установка фокуса
Private Sub Form_Open(Cancel As Integer)
DoCmd.GoToControl "Поставщик"
End Sub
Поиск записи
Private Sub Form_Open(Cancel As Integer)
Dim strPost As String
strPost = InputBox("Введите наименование поставщика:")
‘Переход к элементу управления
DoCmd.GoToControl "Поставщик"
‘Поиск записи по введенному значению
DoCmd.FindRecord strPost
End Sub
Объект Me
Me.Кнопка2.Visible = False
Me. Кнопка3.Enabled = True
Например, если открыт объект
DoCmd.GoToControl "Поставщик"
,то можно использовать метод SetFocus (Установка фокуса)
Me.Поставщик.SetFocus
Для защиты данных
Private Sub Form_Open(Cancel As Integer)
Me.AllowEdits = False
Me.SetFocus
End Sub
Создание процедур событий
Sub… End Sub
Private Sub Кнопка16_Click()
События при обновлении данных в элементах управления
До обновления ðПосле обновления ðВыход ðПотеря фокуса
(BeforeUpdate ð AfterUpdate ðExit ðLostFocus
События при удалении записей
Удаление ð До подтверждения Del ð После подтверждения Del
(Delete ð BeforeDelConfirm ð AfterDelConfirm)
События при открытии формы
ОткрытиеðЗагрузкаðИзменение размераðВключение ðПосле отображения
(Open ðLoad ðResize ðActivate ðCurrent)
События при создании новой записи
После отображения ð До вставки ð После вставки
(Current ð BeforeInsert ð AfterInsert)
События при закрытии формы
Выгрузка ð Отключение ð Закрытие
(Unload ðDeactivate ð Close)
Объявление переменных
раздел Declarations
Option Explicit
Option Compare Database (способ сравнения базы данных)
Использование оператора DIM
|
DIM имя_переменной [As тип]
Модульные переменные
Переменная типа Variant
Dim varMyData
Dim varMyData as Variant
varMyData=12
varMyData= “Текст”
Статические переменные
Sub staticTestProcedure()
Static intcounter As Integer
intcounter = intcounter + 1
Debug.Print intcounter
End Sub
Работа с таблицами
Private Sub Кнопка0_Click()
'удаление имеющейся таблицы
On Error GoTo err_Err
err_Err: If Err = 3010 Then
If MsgBox("Таблица 'Поступления' уже имеется,удалить ее?", vbYesNo) Then
CurrentDb.Execute ("Drop Table " & "Поступления;")
End If
End If
Инструкция SELECT...INTO
Создание запроса на создание таблицы
Синтаксис:
SELECT поле1 [, поле2 [,...]] INTO новая_таблица FROM источник
'создание новой таблицы
CurrentDb.Execute (" Select '999' as КодТовара, 9999 as Кол, 99 as Месяц INTO " & "Поступления" & ";")
MsgBox "Таблица 'Поступления' создана!!!"
Инструкция CREATE INDEX
Создает новый индекс на существующей таблице.
Синтаксис
CREATE [ UNIQUE ] INDEX индекс
ON таблица (поле [ASC|DESC][, поле [ASC|DESC],...])
'создание уникального индекса для новой таблицы
Dim tblNew As TableDef
Dim indNew As Index
ind = MsgBox("Создать уникальный индекс для поля
Код товара?", vbYesNo, "Создание индекса для поля")
If ind = 6 Then
' индекс создан
CurrentDb.Execute ("Create UNIQUE Index 'Код товара' On Поступления (Код товара);")
Работа с формами и запросами
Объект Recordset – набор записей
Данные (RecordSours) – таблица, запрос, SQL
CurrentDb - метод для работы с объектами базы данных
(библиотека Microsoft DAO 3.6 Object Library)
таблица - CurrentDb.OpenRecordSet (“имя таблицы”)
запрос - CurrentDb.OpenRecordSet (“имя запроса”)
SQL - CurrentDb.OpenRecordSet (“инструкция SQL”)
db1 – переменная для работы с объектом базы данных
Dim db1 As Database
|
Set db1 = CurrentDb
‘z – имя объекта Recordset, объявление объекта
Dim z As Recordset
Set z = db1.OpenRecordset("имя запроса")
While Not z.EOF
<тело цикла>
'переход на следующую запись запроса
z.MoveNext
Wend
'закрытие наборов данных
z.Close
К объекту можно обратиться: z.<имя объекта>
Обновление формы: Me.Repaint
'заполнение новой таблицы данными из запроса
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 i = 1 Then z2.Edit Else z2.AddNew
z2.Fields("КодТовара") = z1.Fields("код товара")
z2.Fields("Кол") = z1.Fields("sum-поступление")
z2.Fields("Месяц") = z1.Fields("месяц")
i = i + 1
'обновление записи новой таблицы
z2.Update
'переход на следующую запись запроса
z1.MoveNext
Wend
'закрытие наборов данных
z1.Close: z2.Close
Пример2
‘ отрабатывает процедура при открытии формы «Поступление товара»
Private Sub Form_Open(Cancel As Integer)
' пересчет в рубли
Dim bd1, bd2 As Database
Set bd1 = CurrentDb
Set bd2 = CurrentDb
Dim rst1, rst2 As Recordset
Set rst1 = bd1.OpenRecordset("ПОСТУПЛЕНИЕ ТОВАРА")
Set rst2 = bd2.OpenRecordset("Курс валюты")
Dim a As Date
rst1.MoveFirst
While Not rst1.EOF()
rst1.Edit
a = rst1.Fields("дата поступления")
rst2.MoveFirst
While Not rst2.EOF()
If rst2.Fields("дата") = a Then
rst1.Fields("ценаруб") = rst1.Fields("Цена") * rst2.Fields("Курс")
End If
rst2.MoveNext
Wend
rst1.Update
rst1.MoveNext
Wend
rst1.Close: rst2.Close
End Sub
Пример3.
Private Sub Кнопка16_Click()
'пересчет в рубли
Dim bd2 As Database
Set bd2 = CurrentDb
Dim z2 As Recordset
Set z2 = bd2.OpenRecordset("Курс валюты")
Dim a As Date
a = Me.дата_поступления
z2.MoveFirst
While Not z2.EOF()
If z2.Fields("дата") = a Then
Me.цена__руб = Me.цена * z2.Fields("Курс")
End If
|
z2.MoveNext
Wend
Me.Repaint
z2.Close
End Sub