Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Задания_заоч / Лабораторные / Лаб раб 16 Программирование в MS Access часть 6

.doc
Скачиваний:
42
Добавлен:
21.05.2015
Размер:
56.83 Кб
Скачать

Семенова И.И. БД. - 3 -

Создание SQL команд в среде VBA. Движение и извлечение данных из ADODB.RecordSet

Из предыдущей лабораторной работы:

В созданном приложении должна присутствовать таблица Клиенты, которая создана с помощью мастера. Создайте новую форму с названием SQLКлиенты. Добавьте на форму три свободных поля, у которых измените надписи на Фамилия, Имя, Отдел, а имена полей замените на ПолеФамилия, ПолеИмя, ПолеОтдел. Режим по умолчанию формы сделайте «Ленточные формы», у форму свойство Разрешить добавление поставить в НЕТ. Далее добавьте элементы, как показано на рисунке:

Полю в разделе Примечание присвоить имя ПолеЗапрос.

Пример 0 из предыдущей лаб. раб.: На кнопку Простой запрос напишите в событии Нажатие кнопки следующий код:

Dim sql_text As String

Dim rst1 As ADODB.Recordset

Set rst1 = New ADODB.Recordset

Me.RecordSource = rst1.Source

sql_text = " select ФамилияКонтакта, ИмяКонтакта, ОрганизацияИлиОтдел from клиенты"

sql_text = sql_text + ";"

rst1.Open sql_text, CurrentProject.Connection, adOpenKeyset, adLockOptimistic, accmdTable

Me.RecordSource = rst1.Source

Me.Requery

Me.ПолеИмя.ControlSource = "ИмяКонтакта"

Me.ПолеФамилия.ControlSource = "ФамилияКонтакта"

Me.ПолеОтдел.ControlSource = "ОрганизацияИлиОтдел"

rst1.Close

Заполните таблицу Клиенты парой записей. Запустите форму, проверьте работу кнопки.

Создайте новую форму по примеру, как на рисунке ниже.

Пример 1. Перебор всех записей в RecordSet и вывод значений в виде сообщений на экран.

На кнопку Перебор напишите в событии Нажатие кнопки следующий код:

Dim sql_text, str As String

Dim rst1 As ADODB.Recordset

Set rst1 = New ADODB.Recordset

Me.RecordSource = rst1.Source

sql_text = " select * from клиенты"

sql_text = sql_text + ";"

rst1.Open sql_text, CurrentProject.Connection, adOpenKeyset, adLockOptimistic, accmdTable

rst1.MoveFirst

'узнаем имена полей в результате запроса

str = "Имя 1 поля: " + CStr(rst1.Fields.Item(0).Name) + Chr(13)

str = str + "Имя 2 поля: " + CStr(rst1.Fields.Item(1).Name) + Chr(13)

str = str + "Имя 3 поля: " + CStr(rst1.Fields.Item(2).Name) + Chr(13)

str = str + "Имя 4 поля: " + CStr(rst1.Fields.Item(3).Name)

MsgBox str, vbOKOnly

'узнаем типы полей в результате запроса

str = "тип 1 поля: " + CStr(rst1.Fields.Item(0).Type) + Chr(13)

str = str + "тип 2 поля: " + CStr(rst1.Fields.Item(1).Type) + Chr(13)

str = str + "тип 3 поля: " + CStr(rst1.Fields.Item(2).Type) + Chr(13)

str = str + "тип 4 поля: " + CStr(rst1.Fields.Item(3).Type)

MsgBox str, vbOKOnly

'узнаем значения полей каждой записи в результате запроса

Do While Not (rst1.EOF)

str = "1 поле: " + CStr(rst1.Fields.Item(0).Value) + Chr(13)

str = str + " 2 поле: " + CStr(rst1.Fields.Item(1).Value) + Chr(13)

str = str + " 3 поле: " + CStr(rst1.Fields.Item(2).Value) + Chr(13)

str = str + " 4 поле: " + CStr(rst1.Fields.Item(3).Value)

MsgBox str, vbOKOnly

rst1.MoveNext

Loop

rst1.Close

В той же форме добавить кнопки для запуска каждого задания, сделать запрос по таблице Клиенты, так, чтобы в результат было помещено несколько полей с разными типами данных (на ваш выбор, но полей не менее 4х), результат запроса поместить в RecordSet.

Задание 1. Посчитать все буквы «А», «И» во всех значениях текстовых полей по всем записям после выполнения запроса из RecordSet.

Задание 2. Посчитать среднее значение какоголибо числового поля после выполнения запроса из RecordSet.

Задание 3. Вывести на экран значение поля с максимальной длиной строки после выполнения запроса из RecordSet.

Задание 4. Вывести количество записей после выполнения запроса из RecordSet.