- •СервисМакросРедактор Visual Basic
- •СервисМакросРедактор Visual Basic
- •Режимы меню:
- •Меню Edit
- •If условие Then [инструкции] [Else инструкции_Else]
- •If условие Then
- •Инструкция Select Case
- •Цикл For Each…Next
- •Оператор Do Until… Loop
- •Оператор Do … Loop Until
- •Инструкция With
- •Работа с формами и запросами
- •(Библиотека Microsoft dao 3.6 Object Library)
- •FormName – имя формы
Оператор Do Until… Loop
Синтаксис инструкции:
Do Until <условие>
<инструкции>
[Exit Do]
[<инструкции>]
Loop
Пример:
Sub dotestU()
Dim i As Integer
Dim itest As Integer
i = 1
itest = 1
Do Until i <> 1
Debug.Print "номер " & itest
If itest = 5 Then
i = 0
End If
itest = itest + 1
Loop
End Sub
Оператор Do … Loop Until
Синтаксис инструкции:
Do
<инструкции>
[Exit Do]
[<инструкции>]
Loop Until <условие>
Пример:
Sub ExitExample()
Dim counter As Integer
Dim myNum As Integer
counter = 0
myNum = 9
Do
myNum = myNum - 1
counter = counter + 1
If myNum < 6 Then Exit Do
Loop Until myNum = 10
MsgBox "В цикле выполнено " & counter & " итерации."
End Sub
Инструкция With
Синтаксис инструкции:
With объект
[<инструкции>]…
End With
Пример:
With MyLabel1
. Height=2000
. Witch=2000
. Caption= “Объект MyLabel1”
End With
Работа с таблицами
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
Инструкция SELECT...INTO
Создание запроса на создание таблицы
Синтаксис:
SELECT поле1[, поле2[, ...]] INTO новая_таблица FROM источник
'создание новой таблицы
CurrentDb.Execute (" Select '99999999999999999999' as NS, '99' as Mec, 99999 as D 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 'NS' On ФинансОтчет (Ns);")
Работа с формами и запросами
Объект 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.<имя объекта>
Метод Repaint
Метод Repaint вызывает обновление объекта
Пример:
Обновление формы :
Me.Repaint
Метод Requery
Метод Requery вызывает немедленный пересчет значения элемента управления
Пример:
Me.подчиненная_форма_Фин_рез_руб1.Requery
Пример 1:
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
Пример2:
********форма ФинОтчет**********************
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
expression.OpenForm(FormName, View, FilterName, WhereCondition, DataMode, WindowMode, OpenArgs)