Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций СУБД(рус) .doc
Скачиваний:
48
Добавлен:
09.02.2016
Размер:
19.17 Mб
Скачать

Dim rs As dao.Recordset

Set db = CurrentDb

Set rs = db.OpenRecordset("Товары")

With rs

.MoveFirst

Me![Стоимость кофе] = 0

Do While .EOF = False

If .Fields("Марка") Like "Кофе*" Then Me![“Стоимость кофе”] = _

Me![“Стоимость кофе”] + .Fields("Стоимость товара")

.MoveNext

Loop

End Wtth

End Sub

Рис. 2.5. Форма “Товары”

Пример 2.Найти и вывести на экран номер группы с максимальным количеством студентов и средним баллом в группе более 4,7 в таблице "Группа".

Private Sub Поиск_Номер_Группы()

Dim db As Database

Dim rs As DAO.Recordset, max As Single, n As Variant

Set db = CurrentDb

Set rs = db.OpenRecordset("ГРУППА")

With rs

.MoveFirst

max = .Fields(1)

.MoveNext

Do While .EOF = False

If .Fields(1) > max And .Fields(2) > 4.7 Then max = .Fields(1): n = .Bookmark

.MoveNext

Loop

.Bookmark = n

MsgBox "Количество студентов - " & max & Chr(13) & "Номер группы - " & _

.Fields(0)

End With

End Sub

Пример 3. Используя библиотекуADOв окне модуля создать процедуру для заполнения данными поле“Среднее” таблицы“Урожайность” (рис. 2.6).

Рис.2.6. Структура таблицы “Урожайность”

Public Sub Расчет_ADO()

Dim connection As New ADODB.connection 'Если база днных текущая, то

'эту строку можно не писать

'Если базу данных нужно открыть на диске, то после этой строки нужно писать

'Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0";Data Sourse=путь к файлу"

Dim rs As New ADODB.Recordset

Dim s As Double, i As Integer, n As Long

With rs

.Open "Урожайность", CurrentProject.connection, adOpenKeyset, adLockOptimistic

.MoveFirst

Do While .EOF = False

s = 0: n = 0

For i = 1 To .Fields.Count - 2

s = s + .Fields(i): n = n + 1

Next i

s = s / n

.Fields(5) = s

.MoveNext

Loop

End With

End Sub

2.11. Создание объектов баз данных средствами VBA

Средствами VBAв программном режиме можно создавать не только объектыAccess:таблицы, формы, запросы, но и такие элементы управления, какКнопки,Надписьи др., что позволяет существенно повысить уровень автоматизации работы приложения. Ниже даны примеры создания некоторых объектов и элементов управления, приведены программы. По тексту программ даны необходимые пояснения.

Создание таблицы. Пусть, требуется создать в текущей базе данных таблицуEliseсо следующими полями:Код, Фамилия вкладчика, Домашний адрес, Сумма вклада, Срок заключения договора, мес. Для решения данной задачи необходимо:

- в процедуре создать объектные переменные db,tbтипаDatabase,TableDefиf1, f2, f3, f4типаField, предназначенные для хранения ссылок на соответствующие объекты базы данных;

- для создания нового объекта TableDef– таблицы с именемEliseнужно применить методCreateTableDefк объектной переменнойdb. Для создания новых объектовField– полей таблицы, нужно применить методCreateFieldк объектным переменнымf1, f2, f3, f4;

- для добавления этих полей в семейство Fields, входящих в объектTableDefнужно использовать методAppend;

- для добавления таблицы – объекта TableDefв семействоTableDefsнужно использовать методAppend;

Процедура решения этой задачи с использованием библиотеки DAOприведена ниже

Public Sub Создание_таблицы()

Описание переменных

Dim db As Database

Dim tb As TableDef

Dim f1, f2, f3, f4, f5 As field

Set db = CurrentDb

Создание таблицы и ее полей

Set tb = db.CreateTableDef("Elise")

Set f1 = tb.CreateField("Код", dbInteger)

Set f2 = tb.CreateField("Фамилия вкладчика", dbText)

Set f3 = tb.CreateField("Домашний адрес", dbText)

Set f4 = tb.CreateField("Сумма вклада", dbCurrency)

Set f5 = tb.CreateField("Срок заключения договора, мес", dbInteger)

Добавление полей в таблицу

tb.Fields.Append f1

tb.Fields.Append f2

tb.Fields.Append f3

tb.Fields.Append f4

tb.Fields.Append f5

Добавление таблицы в БД

db.TableDefs.Append tb

End Sub

Создание формы. (Твип (twip) - единица измерения, используемая в Microsoft Access. Один твип равен 1/20 пункта или 1/1440 дюйма. В одном сантиметре содержится 567 твип).Требуется средствамиVBAсоздать форму на основе таблицыКАФЕДРАтолько без фото. Процедура решения этой задачи с использованием библиотекиDAOприведена ниже

Public Sub Создание_формы()

Dim frm As Form 'Определение объектной переменной для формы

Set frm = CreateForm 'Создание новой формы и ссылки на переменную

frm.RecordSource = "КАФЕДРА" 'Источник данных в форме

'Определение объектных переменных для элементов управления

Dim c1, c2, c3, c4, t1, t2, t3, t4, n1 As Control

frm.Caption = "КАФЕДРАVBA" ' Имя файла

'Создание элементов управления типа надпись

Set t1 = CreateControl(frm.Name, acLabel, , , , 100, 1000, 1300, 200)

t1.Caption = "Код кафедры:"

Set t2 = CreateControl(frm.Name, acLabel, , , , 100, 1300, 1300, 200)

t2.Caption = "Название:"

Set t3 = CreateControl(frm.Name, acLabel, , , , 100, 1600, 1300, 200)

t3.Caption = "Телефон:"

Set t4 = CreateControl(frm.Name, acLabel, , , , 100, 1900, 1300, 200)

t4.Caption = "Зав кафедрой:"

'Создание элементов управления типа поле

Set c1 = CreateControl(frm.Name, acTextBox, , , , 1500, 1000, 1300, 200)

c1.ControlSource = "Код кафедры"

Set c2 = CreateControl(frm.Name, acTextBox, , , , 1500, 1300, 1300, 200)

c2.ControlSource = "Название"

Set c3 = CreateControl(frm.Name, acTextBox, , , , 1500, 1600, 1300, 200)

c3.ControlSource = "Телефон"

Set c4 = CreateControl(frm.Name, acTextBox, , , , 1500, 1900, 1300, 200)

c4.ControlSource = "Зав кафедрой"

Set n1 = CreateControl(frm.Name, acLabel, , , , 1400, 300, 700, 200)

n1.Caption = "КАФЕДРА" 'Имя формы

DoCmd.Restore

End Sub

Результат работы программы представлен на рис.2.7.

Рис.2.7. Форма, созданная средствами VBA

Примечание. Для создания кнопок, например, кнопки"Поиск", которая запускаетМакрос 1, в только что созданной форме, необходимо программу дополнить строками:

Set k1 = CreateControl(frm.Name, acCommandButton, , , , 1800, 600, 700, 300)

Размеры и место кнопки в форме, к1 – объектная переменная

k1.Caption = "Поиск" ‘Надпись на кнопке

k1.OnClick = "Макрос1" ‘ При нажатии на кнопку выполняется "Макрос1"

Создание запроса. Требуется средствамиVBAсоздать запросМАКСпо таблицеТОВАРЫ для выборки записей в которыхСтоимость товарабольше определенной нижней границы. Граница вводится в окно диалога. Процедура решения этой задачи с использованием библиотекиDAOприведена ниже

Public Sub Создание_запроса_VBA()

Dim db As Database

Dim q As QueryDef

Set db = CurrentDb

' Создается запрос с именем Макс

Set q = db.CreateQueryDef("Макс", "Select *" _

& "from Товары where [Стоимость товара] >” & _

[Введите нижнюю границу стоимости товара];")

End Sub