Работа с формами и запросами




Создание стандартных модулей

 

В 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

 




Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-11-04 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: