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

Оператор 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)