Access.pptx
- Количество слайдов: 38
Информатика и програмирование MS Access
MS Access Учебный вопрос № 1. Реляционная БД и реляционные таблицы. Концепции и терминология 2
MS Access Учебный вопрос № 1. Реляционная БД и реляционные таблицы. Концепции и терминология 3
Пример реляционной таблицы NT, X, Y – поля таблицы Точка. Обозначена значением 1, координаты (0, 0) Поле NT - ключ. Его значение идентифицирует запись Типы значений полей X, Y – Long 4
Конструирование описания РТ 5
Особенности РТ и термины • Значения в ее ячейках неделимы (Таблица находится в 1 НФ). • Описание поля включает его имя, указание типа, атрибуты «ключ» и т. п. • Описание таблицы включает имя таблицы, описания полей и индексов. • Описание таблицы хранится вместе с таблицей во внешней памяти. 6
Особенности РТ и термины • Индекс – это механизм адресации записей РТ. Множество значений индекса упорядочено, что обеспечивает быстрый поиск записи РТ по заданному значению индекса. • РБД – это множество РТ. РТ могут связываться друг с другом по значениям ключевых полей. 7
Пример связывания двух РТ: Л и Л 1 Условие связывания Л. NT+1=Л 1. NT 8
Результат связывания двух РТ: Из двух таблиц точек получили таблицу отрезков 9
Два подхода к работе с РБД 1. Реляционный: В виде алгебраической формулы задается построение РТ T из комплекта РТ T 1, …, Tn 2. Навигационный: Имеем объект (виртуальную РТ). Можем обрабатывать поля текущей записи РТ и перемещаться от записи к записи. 10
Истоки РМД (концепция РБД) • • РМД разработана Э. Коддом (E. Codd) в начале 70 -х прошлого века. РМД включает: понятия РТ и РБД, алгебраический язык запросов (ныне SQL) и теорему о реляционной полноте. Изложение теоремы: если РТ T выводима из РТ T 1, …, Tn, то существует реляционный запрос F такой, что T =F(T 1, …, Tn). За разработку РМД E. Codd стал лауреатом премии А. Тьюринга 11
MS Access Учебный вопрос № 2. Навигационный подход к обработке РТ 12
Объект «Module 1» обеспечивает расчет длины ломаной, заданной реляционной таблицей Ломаная 1 13
Обзор модуля Option Compare Database Dim dbs As Database, rst As Recordset Dim X, Y As Long Dim l As Single Sub Pusk() ‘ Подготовка к работе и запуск ф-ции Len. Sgm() End Sub Function Len. Sgm() ‘ вычисление длины ломаной End Function Sub Get. XY() ‘ Извлечение полей РТ в переменные X, Y End Sub 14
Обзор модуля Option Compare Database Dim dbs As Database, rst As Recordset Dim X, Y As Long Dim l As Single Sub Pusk() ‘ Подготовка к работе и запуск ф-ции Len. Sgm() End Sub Function Len. Sgm() ‘ вычисление длины ломаной End Function Sub Get. XY() ‘ Извлечение полей РТ в переменные X, Y End Sub Часть General (Описание глобальных величин) Database – ссылка на объект РБД, Recordset – ссылка на РТ, X, Y – переменные под координаты текущей точки 15
Процедура Pusk() Sub Pusk() Set dbs = Current. Db Set rst = dbs. Open. Recordset("SELECT * FROM Ломаная 1; ") Msg. Box (Len. Sgm()) End Sub 16
Процедура Pusk() Sub Pusk() Set dbs = Current. Db Set rst = dbs. Open. Recordset("SELECT * FROM Ломаная 1; ") Msg. Box (Len. Sgm()) End Sub Установили ссылку на открытую в Access РБД. Current. Db – метод объекта Application 17
Процедура Pusk() Sub Pusk() Set dbs = Current. Db Set rst = dbs. Open. Recordset("SELECT * FROM Ломаная 1; ") Msg. Box (Len. Sgm()) End Sub Создали ВРТ, выполнив SQLзапрос. В запросе задана безусловная выборка всех полей и всех строк из РТ Ломаная 1 18
Процедура Pusk() Sub Pusk() Set dbs = Current. Db Set rst = dbs. Open. Recordset("SELECT * FROM Ломаная 1; ") Msg. Box (Len. Sgm()) Запуск функции вычисления End Sub длины ломаной 19
Функция вычисления длины ломаной Function Len. Sgm() rst. Move. First : l = 0 : Get. XY Do While (Not rst. EOF()) rst. Move. Next If Not rst. EOF() Then l = l + Sqr((rst. Fields("X"). Value - X) ^ 2 +_ (rst. Fields("Y"). Value - Y) ^ 2) Get. XY End If Loop Len. Sgm = l End Function 20
Функция вычисления длины ломаной Function Len. Sgm() Позиционировались на rst. Move. First : l = 0 : Get. XY первую строку РТ, Do While (Not rst. EOF()) обнулили I, извлекли из строки РТ rst. Move. Next значения координат If Not rst. EOF() Then l = l + Sqr((rst. Fields("X"). Value - X) ^ 2 +_ (rst. Fields("Y"). Value - Y) ^ 2) Get. XY End If Перебираем строки РТ, Loop Считаем длину отрезка, Len. Sgm = l Наращиваем сумму. End Function Зафиксировали вычисленное значение как значение функции 21
Функция вычисления длины ломаной Function Len. Sgm() rst. Move. First : l = 0 : Get. XY Do While (Not rst. EOF()) Сместились на rst. Move. Next следующую строку If Not rst. EOF() Then l = l + Sqr((rst. Fields("X"). Value - X) ^ 2 +_ (rst. Fields("Y"). Value - Y) ^ 2) Get. XY End If Посчитали длину отрезка и Loop Извлекли поля нарастили длину ломаной. X, Y текущей Len. Sgm = l Аргументы – поля X, Y текущей строки в строки и переменные X, Y End Function переменные X, Y (извлечены из предыдущей строки) 22
Процедура Get. XY Sub Get. XY() If Not rst. EOF() Then X = rst. Fields("X"). Value Y = rst. Fields("Y"). Value End If End Sub Значения полей текущей строки сгруппированы в коллекцию. Имя поля – идентификатор элемента коллекции 23
Испытания 24
ОМ: Выводы • Database – класс для работы с БД. БД комплект таблиц. Одно из действий – создание виртуальной реляционной таблицы вычислением запроса • Recordset - ВРТ. Действия: движение по записям таблицы, контроль смещения УТЗ за пределы таблицы • Коллекция полей Fields: извлечение значения по имени, извлечение имени по порядковому номеру
MS Access Учебный вопрос № 3 Реляционная алгебра 26
РА. Основное множество - таблицы • Таблица – множество однотипных строк. • Строка (кортеж) – комплект значений полей • Значение поля неделимо
Операции РА • Вычислительная обработка • Теоретико-множественные (объединение, пересечение, разность) • Декартово произведение • Ограничение
Вычислительная обработка в строках
Вычислительная обработка групп строк
Декартово произведение и ограничение
MS Access Учебный вопрос № 3 Реляционный подход обработке БД (запросы) 32
MS Access Учебный вопрос № 3 Реляционный подход обработке БД (запросы) 33
Пример запроса SELECT Л. NT, Л. X, Л. Y, Л 1. X, Л 1. Y, SQR((Л. XЛ 1. X)^2+(Л. Y-Л 1. Y)^2) AS DL FROM Л, Л 1 WHERE Л. NT+1=Л 1. NT ORDER BY Л. NT; 34
Пример запроса SELECT Л. NT, Л. X, Л. Y, Л 1. X, Л 1. Y, SQR((Л. XЛ 1. X)^2+(Л. Y-Л 1. Y)^2) AS DL FROM Л, Л 1 WHERE Л. NT+1=Л 1. NT ORDER BY Л. NT; Выборка из таблиц Л и Л 1 (в примере Л 1 – копия Л) 35
Пример запроса SELECT Л. NT, Л. X, Л. Y, Л 1. X, Л 1. Y, SQR((Л. XЛ 1. X)^2+(Л. Y-Л 1. Y)^2) AS DL FROM Л, Л 1 WHERE Л. NT+1=Л 1. NT ORDER BY Л. NT; Выбираем только те пары записей из таблиц Л и Л 1, для которых выполнено условие 36
Пример запроса SELECT Л. NT, Л. X, Л. Y, Л 1. X, Л 1. Y, SQR((Л. XЛ 1. X)^2+(Л. Y-Л 1. Y)^2) AS DL FROM Л, Л 1 WHERE Л. NT+1=Л 1. NT ORDER BY Л. NT; Выбранные записи упорядочиваем по возрастанию значения поля Л. NT 37
Пример запроса SELECT Л. NT, Л. X, Л. Y, Л 1. X, Л 1. Y, SQR((Л. XЛ 1. X)^2+(Л. Y-Л 1. Y)^2) AS DL FROM Л, Л 1 WHERE Л. NT+1=Л 1. NT ORDER BY Л. NT; В таблицу результат помещаем поля Л. NT, Л. X, Л. Y, Л 1. X, Л 1. Y и DL. Значение нового поля DL рассчитываем по формуле 38


