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

КонспектЛекций

.pdf
Скачиваний:
21
Добавлен:
14.05.2015
Размер:
1.73 Mб
Скачать

Dim lngRecordCount As Long

'Счетчик найденных записей

Set db = CurrentDb

Set rs = db.OpenRecordset("tblPeoples", dbOpenDynaset) str = ""

lngRecordCount = 0

If rs.RecordCount <> 0 Then rs.MoveFirst

Do Until rs.EOF

'Если текущая запись удовлетворяет условию...

If rs![LastName] = "Иванова" Then

'Инкримируем счетчик найденных записей lngRecordCount = lngRecordCount + 1 str = str & rs![ID_People] & ", "

End If rs.MoveNext Loop

str = str & vbCrLf & "Всего найдено записей: " & _ lngRecordCount

Else

str = "Таблица ""tblPeoples"" не содержит записей."

End If Debug.Print str rs.Close db.Close

End Sub

Option Compare Database

Option Explicit

Sub Cycle01_1() '--------------------------------------------------------

'Цикл по записям таблицы "tblPeoples" от начала до конца

'--------------------------------------------------------

'База данных

Dim db As Database

'Набор записей

Dim rs As Recordset

'Строка

Dim str As String

'Количество записей в наборе записей

Dim lngRecordCount As Long

'db - текушая база данных

Set db = CurrentDb

Set rs = db.OpenRecordset("tblPeoples", dbOpenDynaset)

'rs - набор записей на основе таблицы "tblPeoples"

'При инициализации набора записей мы можем точно

'определить, есть ли в этом наборе записи или нет.

'Свойство "RecordCount" набора записей посли его

'инициализации, по идее, должна сождержать количество

'записей набора, однако это не так. Если в наборе есть

'записи это свойство отлично от нуля, но не содержит

'их количество. Для определения количества записей

'необходимо перейти на последнюю запись набора, и после

'этого в свойстве "RecordCount" будет находиться

'количество записей набора.

'Если в наборе rs есть записи...

If rs.RecordCount <> 0 Then rs.MoveLast

' Переходим на последнюю запись (чтобы "RecordCount"

71

' содержало верное значение)

lngRecordCount = rs.RecordCount

' Считываем количество записей в переменную

rs.MoveFirst 'Переходим на первую запись набора

' Заполняем текстовую переменную str количеством записей

str = "Количество записей в таблице ""tblPeoples"": " & lngRecordCount & vbCrLf

'Свойство EOF (End Of File) набора записей становиться истинным ПОСЛЕ последней 'записи набора,точно как и свойство BOF (Begin Of File) становиться истинным ПЕРЕД 'первой записью набора.

'Цикл "Пока не кончатся записи в наборе rs" Do Until rs.EOF

'Добавляем в переменную str имнена полей, их ' значения и символ перевода строки

str = str & "ID_People: " & rs![ID_People] & vbCrLf

str = str & "ID_RecordStatus: " & rs![ID_RecordStatus] & vbCrLf str = str & "LastName: " & rs![LastName] & vbCrLf

str = str & "FirstName: " & rs![FirstName] & vbCrLf str = str & "MiddleName: " & rs![MiddleName] & vbCrLf str = str & "PeopleSex: " & rs![PeopleSex] & vbCrLf str = str & "BirthDate: " & rs![BirthDate] & vbCrLf str = str & "------------" & vbCrLf

rs.MoveNext

'Переходим на следующую запись

Loop

'Конец цикла

Else

'Если записей нет...

'Заполняем текстовую переменную str сообщением об

'отсутствии записей

str = "Таблица ""tblPeoples"" не содержит записей."

End If

'Печатаем содержимое переменной str в окне отладки

Debug.Print str rs.Close

'Закрываем переменную набора записей db.Close

'Закрываем переменную базы данных

End Sub

Программирование в формах.

Определяя имя для поля, элемента управления или объекта, полезно проверить, не совпадает ли это имя с именем свойства или другого элемента, используемого Microsoft Access; в противном случае иногда могут возникать неверные результаты. Например, при ссылке на значение поля «Name» в таблице «NameInfo» с использованием конструкции NameInfo.Name будет возвращаться значение свойства таблицы Имя (Name), а не значение поля «Name».

Простейшим способом обойти неопределенность в именах является использование оператора ! вместо оператора . (точка) в ссылках на значения полей, элементов управления и объектов:

[NameInfo]![Name]

Пример запроса, созданного как текстовая строка плюс значения текстовых переменных. Запрос выбирает из таблицы «_v2» в таблицу «_v4» те записи, значение поля nn в которых больше нуля и меньше значения переменной целого типа var_numb.

Dim S As String

S = "SELECT * INTO [_v2] FROM [_v4] WHERE (([_v4].nn<=" + Str(var_numb) + _ ")and([_v4].nn>0))"

DoCmd.RunSQL S

72

Классическая фраза, которой приходится завершать функцию, если в результате ваших действий значения некоторых полей в форме должны измениться, а этого почему-то не видно:

Forms![Моя форма].Refresh

Работа с элементом «поле со списком» (Элемент управления на странице доступа к данным, щелчок по кнопке-стрелке которого приводит к раскрытию списка, в котором можно выбрать значение или ввести его прямо в поле с клавиатуры).

Окно свойств для поля со списком, который взят из работающей формы и содержит названия стран. Эти названия берутся из таблицы countries

спомощью соответствующего

запроса.

Установка исходных данных для поля (текст в строке свойств «источник строк»):

SELECT countries.country, countries.name_rus, countries.currency_rus FROM countries;

При этом из трёх столбцов видимым является только второй.

Установка начального значения для поля со списком из программы:

Private Sub Form_Open(Cancel As Integer)

73

var_country.SetFocus var_country.SelText = "Россия" End Sub

Реакция на событие «После обновления»:

Private Sub var_country_AfterUpdate() info_1.Caption = var_country.Column(1)

Forms![Основная форма].Refresh

End Sub

Работа с элементом «Диаграмма»

Microsoft Graph позволяет изменить расположение компонентов диаграммы (таких как легенда), формат надписей, цвета и узоры, а также масштабы по осям. Чтобы изменить данные, используемые для создания диаграммы, следует изменить базовую таблицу или другой источник записей, либо запрос, указанный в свойстве Источник строк (RowSource).

В режиме конструктора формы или отчета создаваемая диаграмма отображает примеры данных. Чтобы увидеть реальные текущие данные, переключитесь в режим формы или предварительного просмотра либо закройте форму или отчет, а затем снова откройте их.

СУБД MySQL

MySQL – клиент-серверная система управления реляционными базами данных, которая содержит многопоточный SQL-сервер, обеспечивающий поддержку различных вычислительных машин баз данных, а также несколько различных клиентских программ и библиотек, средства администрирования и широкий спектр программных интерфейсов. Разработкой и сопровождением системы занимается компания MySQL AB (Швеция, David Axmark).

Характеристики СУБД

SQL СУБД (реляционная), быстрая, но не оптимизированная под поиска и добавления, если предстоят частые изменения.

Стандарты: entry level SQL92, ODBC levels 0-2.

Лицензия - GPL/LGPL. Для хостинга лицензия не нужна.

Написана на C и C++. Базовая платформа: Solaris 2.7-2.8, SuSE Linux 7.1 (ядро 2.4, ReiserFS), но работает также в других ОС.

Многопотоковая.

API для C, C++, Java, Eiffel, Perl, PHP, Python, и др.

Парольная защита.

Таблицы в виде B-tree со сжатием индекса. До 32 индексов на таблицу. До 16 колонок на индекс.

По умолчанию MySQL-таблицы имеют максимальный размер около 4 Гб.

Записи переменной длины. Есть примеры использования MySQL с 60000 таблиц и 5 миллиардами строк.

Поддержка koi8-r и cp1251 (сортировка, сравнение и т.д.).

Клиенты могут соединяться по TCP/IP (можно использовать только, если никто не подслушивает) или Unix socket.

Имеются расширения к ANSI SQL92. Отсутствующие возможности ANSI SQL92:

74

Вложенные подзапросы хранимые процедуры и тригеры (тригеры не планируются совсем) Внешние ключи Представления

Основные модули СУБД

mysql – клиентская часть СУБД. Она обеспечивает интерфейс командной строки с СУБД MySQL, и возможность неинтерактивной пакетной обработки.

mysqlaccess – используется, чтобы внести в список привилегии пользователя для конкретной базы данных. Это дает информацию, которая может быть полезна при диагностировании проблем с доступом пользователей к данной базе данных.

mysqladmin – выполняет административные функции. Данная команда может использоваться для создания баз данных,изменения пароля пользователя (администратор может изменить пароль любому пользователю, а рядовой пользователь – только свой собственный), перезагрузки и остановки сервера, просмотра списка процессов, запущенных на сервере.

mysqld – программа является ядром СУБД MySQL. Она запускается как демон в системе и принимает подключения из клиентских программ, выполняя запросы и возвращая результаты. Она многопоточная, то есть обработает больше чем один запрос одновременно.

mysqldump – программа используется для создания дампа содержания базы данных MySQL. Она пишет инструкции SQL в стандартный вывод. Эти инструкции SQL могут быть переназначены в файл. Можно резервировать базу данных MySQL, используя mysqldump, но при этом Вы должны убедиться, что в этот момент с базой данных не выполняется никаких других действий.

mysqlshow – программа может использоваться, чтобы показать, с какими базами данных MySQL работает, какие таблицы данная база данных содержит, и какие поля есть в таблице в данной базе данных.

Типы данных

 

 

 

BIGINT [(length)]

 

 

[UNSIGNED]

 

8 байт целое (если компилятор поддерживает такой тип)

[ZEROFILL]

 

 

 

 

 

BLOB

 

Двоичный объект (максимальная длина 65535 байт)

 

 

 

CHAR(NUM)

 

Строка фиксированной длины (1 <= NUM <= 255)

 

 

 

 

 

Сохраняет информацию о дате. Использует формат "YYYY-MM-DD". Может модифицироваться как строка

 

 

или число.

DATE

 

Диапазон для этого типа данных от 0000-00-00 до 9999-12-31. Так что "проблема 2000" здесь не стоит. В

 

 

отличие от TIMESTAMP, DATE принимает годы и в виде двух цифр от 0000 до 0099. Тип DATE имеет длину 4

 

 

байта.

 

 

 

 

 

Объединение типов DATE и TIME. Тип DATETIME идентичен типу TIMESTAMP со следующими исключениями:

 

 

Когда запись вставляется в таблицу, содержащую поля типа DATETIME, поле DATETIME не изменяется.

DATETIME

 

Диапазон для поля типа DATETIME: '0000-01-01 00:00:00' - '9999-12-31 23:59:59' при использовании в

 

 

контексте строки, и '00000000000000' - '99991231235959' при использовании в контексте числа.

 

 

Тип DATETIME имеет длину 8 байт.

 

 

 

DECIMAL

 

Десятичное число с плавающей запятой.

(length,dec)

 

 

 

 

 

 

DOUBLE

 

Число (4 или 8 байт) двойной точности с максимальной длиной и фиксированном числом десятичных чисел.

[(length,dec)]

 

 

 

 

 

 

FLOAT

 

Номер с плавающей запятой. FLOAT(4) и FLOAT одиночная точность. FLOAT(8) обеспечивает двойную

[(precision)]

 

точность.

 

 

 

FLOAT

 

Число одиночной точности с максимальной длиной и фиксированном числом десятичных чисел (4 байта).

[(length,decimals)]

 

 

 

 

 

 

INT [(length)]

 

Целое (4 байта).

[UNSIGNED]

 

 

 

 

 

 

75

[ZEROFILL]

 

 

 

 

 

INTEGER

 

 

[(length)]

 

Целое число 4 байта

[UNSIGNED]

 

 

 

[ZEROFILL]

 

 

 

 

 

LONGBLOB

 

Двоичный объект с максимальной длиной 2**32 байт.

 

MEDIUMBLOB

 

Двоичный объект с максимальной длиной 16777216 байт.

 

 

 

MEDIUMINT

 

 

[(length)]

 

Целое (3 байта).

[UNSIGNED]

 

 

 

[ZEROFILL]

 

 

 

 

 

REAL

 

Идентично DOUBLE (8 байт).

[(length,dec)]

 

 

 

 

 

 

SMALLINT

 

 

[(length)]

 

Целое (2 байта).

[UNSIGNED]

 

 

 

[ZEROFILL]

 

 

 

 

 

TINYBLOB

 

Двоичный объект с максимальной длиной 255 байт.

TINYINT [(length)]

[UNSIGNED] Целое число (1 байт).

[ZEROFILL]

VARCHAR(NUM)

 

Строка переменной длины (1 <= NUM <= 255)

 

 

 

 

 

Хранит информацию о времени. Использует формат "HH:MM:SS". Может использоваться как строка или

TIME

 

число.

 

 

Данные типа TIME имеют длину 3 байта.

Автоматически изменяется при вставке/обновлении. Имеет формат YYMMDDHHMMSS или

YYYYMMDDHHMMSS. Когда используете mysql с ODBC и Access Вы должны использовать значение 14 для

TIMESTAMP(NUM) NUM, поскольку это заставляет MySQL всегда использовать в годах четыре цифры. Значение 12 заставит MySQL использовать в году две цифры. Значение по умолчанию - 14.

В случае таблиц с несколькими полями TIMESTAMP только первое такое поле будет модифицироваться автоматически.

Физическая организация данных

Каждая база данных находится в своём каталоге, имя которого соответствует имени базы. Каждая таблица находится в отдельном файле <имя таблицы>.MYD, индекс в файле <имя таблицы>.MYI, файл определения таблицы <имя таблицы>.frm

Основные команды MySQL

СУБД MySQL оперирует подмножеством языка SQL, соответствующим спецификации ANSI SQL 92.

76

Методы организации удалённого доступа к данным.

1. Интерфейсы ODBC, OLE DB и ADO.

(в электронном варианте лекции нет)

2. Интернет-доступ к базам данных.

(в электронном варианте лекции нет)

77

Перспективы развития СУБД.

1.Недостатки реляционной модели.

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

По определению в реляционной модели поля кортежа могут содержать лишь атомарные значения. Однако, в приложениях САПР (ГИС) и системах искусственного интеллекта должны проводиться операции со сложно-структурированными объектами2.

Слишком высокий уровень деструктуризации (раздробления) данных по многочисленным таблицам, что (1) уменьшает скорость выполнения запросов, (2) увеличивает их сложность, а значит возможность совершения дополнительных ошибок.

Кроме того, имеются определенные недостатки и в релизации тех возможностей, которые прямо не предусматриваются реляционной моделью, но стали непременным атрибутом всех современных СУБД:

Цикл существования реляционной базы данных состоит в переходе от одного целостного состояния к другому. Однако, нельзя избежать такой ситуации, когда пользователь вводит данные, формально удовлетворяющие ограничениям целостности, но не соответствующие реальному состоянию предметной области. В этом случае предыдущее значение данных будет утеряно.

Реляционная СУБД выполняет над данными не только те действия, которые задает пользователь, но и дополнительные операции в соответствии с правилами, заложенными в базу данных. Всегда ли хороши эти правила?

2.Интеллектуальный анализ данных (data mining)

– процесс выявления значимых корреляций, образцов и тенденций в больших объёмах данных. Роль такого анализа возрастает с увеличением объёма информационных хранилищ (Data Warehouse). Он в основном применяется в бизнес-приложениях аналитиками и руководителями компаний. Для этих категорий пользователей разрабатываются высокоуровневые инструментальные средства, позволяющие решать достаточно сложные практические задачи без специальной математической подготовки.

В бизнес-приложениях наибольший интерес представляет интеграция методов интеллектуального анализа данных с технологией оперативной аналитической обработки данных (OLAP – On-Line Analytical Processing). Термин OLAP ввёл Кодд в 1993 г. В

своей статье он рассмотрел недостатки реляционной модели, в первую очередь невозможность «объединять, просматривать и анализировать данные с точки зрения множественности измерений». При этом имеется в виду именно многомерное концептуальное представление информации, а не структура таблиц базы данных, хотя в последнее время появились СУБД, уходящие от реляционных отношений в сторону многомерных банков данных.

2 Пример:

Пусть нам необходимо создать базу данных земельных участков. Каждый участок задается координатами узлов ломаной линии, ограничивающей его по периметру. В этом случае спроектировать реляционную таблицу невозможно, т.к. заранее не известно количество узлов для всех участков. Также невозможно написать общие процедуры (вычисление площади, нахождение пересечения и т.д.) для всех случаев.

78

3. Постреляционные базы данных.

Постреляционная модель данных представляет собой расширенную реляционную модель, в которой отменено требование атомарности атрибутов. Наиболее известное воплощение этой модели – многомерные таблицы, т.е. таблицы, в полях которых можно хранить другие таблицы. Известными представителями таких СУБД являются системы Adabas, Pick и Universe.

4. Отказ от нормализации отношений.

Во многом нормализация отношений нарушает иерархические связи между объектами, характерные для выбранной предметной области. В настоящий момент уже существует теоретическое обоснование работы с ненормализованными отношениями и практические реализации подобных систем. В обычных реляционных СУБД ненормализованные таблицы ведут к увеличению времени обработки данных и к уменьшению надёжности.

5. Объектно-реляционные базы данных.

Одной из наиболее известных СУБД этого вида является система Postgres (PostgreSQL) – автор Майкл Стоунбрейкер, – в которой реализованы многие интересные средства: поддерживается темпоральная (обеспечивающая временные срезы3) модель хранения и доступа к данным и в связи с этим абсолютно пересмотрен механизм журнализации изменений, откатов транзакций и восстановления БД после сбоев; обеспечивается мощный механизм ограничений целостности; поддерживаются ненормализованные отношения (работа в этом направлении началась еще в среде INGRES). В POSTGRES допускается хранение в полях отношений данных абстрактных, определяемых пользователями типов. Это обеспечивает возможность внедрения поведенческого аспекта в БД, т.е. решает ту же задачу, что и ООБД, хотя, конечно, семантические возможности модели данных POSTGRES существенно слабее, чем у объектноориентированных моделей данных.

 

 

 

 

 

 

 

Простые данные

 

Сложные данные

 

 

 

 

 

Наличие средств запросов

 

Реляционные системы

 

Объектно-реляционные системы

 

 

 

 

 

Отсутствие средств запросов

 

Файловые системы

 

Объектно-ориентированные системы

 

 

 

 

 

6. Язык SQL-3 и СУБД Oracle 8.

Попытки совместить средства манипулирования данными реляционной модели и способы описания внешнего мира объектно-ориентированной модели получили развитие в языке SQL-3. 1) Характеристики объекта определяется описанием строки таблицы. Поэтому вводится специальная возможность описания нового типа данных:

Create type Address ( number char (6), street char (30), aptno integer, city char (30), state char (2),

zip integer

);

На основе нового типа могут быть определены таблицы, например:

Create table Addresses of Address;

Новые типы допускается использовать и для определения столбцов (т.е. игнорируется требование атомарности атрибутов реляционной модели):

Сreate table People of new type Person ( name char (30),

3 Основной тезис темпоральных систем состоит в том, что для любого объекта данных, созданного в момент времени t1 и уничтоженного в момент времени t2, в БД сохраняются (и доступны пользователям) все его состояния во временном интервале [t1,t2).

79

address Address, birthdate date,

);

Наследование определяется с помощью фразы under.

Create type Employee under Person ( empno char(10),

dept ref(Department)

);

Здесь атрибут dept является ссылкой на объект, хранящийся в таблице Department. Т.е. в понятиях реляционной модели в этом столбце должен быть записан внешний ключ, указывающий на на одну из строк таблицы Department. На самом деле, в SQL-3 предполагается, что каждый объект имеет уникальный идентификатор - OID, именно он используется при создании ссылок на объекты.

Также в операторе CREATE TABLE можно определить и методы доступа к вновь созданным типам данных:

Create table People of new type Person ( name char(30),

address Address, birthdate date

function age(:р ref(Person)) return date; begin

current_age:=:р.birthdate-current_date; return current_age;

end;

);

В этом примере задана функция age, которая вычисляет текущий возраст объекта типа Person, хранимого в таблице People. К данной функции можно обращаться из оператора SELECT.

Oracle8i совместим с минимальным уровнем ANSI/ISO (SQL92). Он поддерживает большинство возможностей, заложенных в более продвинутые уровни SQL92, и даже некоторые из SQL3, но зачастую эти возможности реализованы в нем по-своему. В Oracle создан свой язык для создания триггеров, хранимых процедур и просто скриптов (в Oracle их принято называть безымянными блоками). Этот язык получил название PL/SQL (Program Language SQL). Внешней процедурой в Oracle является подпрограмма, хранимая в DLL, или метод элемента библиотеки Java-класса.

В версии 8.0 были введены объектные типы данных. Такие типы данных можно применять при создании локальных и пакетных переменных, при объявлении колонок БД и при объявлении типа записи в таблицах БД. Причем в случае, когда объект олицетворяет всю запись целиком в качестве первичного ключа, используется так называемая объектная ссылка (REF). REF является вполне самостоятельным типом данных и может использоваться для ссылки на такую объектную запись из других таблиц. Объекты поддерживают только инкапсуляцию, но не поддерживают не наследования, не полиморфизма.

7. Объектно-ориентированные базы данных.

В объектно-ориентированной парадигме предметная область моделируется как множество классов взаимодействующих объектов.

Направление объектно-ориентированных баз данных (ООБД) возникло сравнительно давно. Публикации появлялись уже в середине 1980-х гг. Среди языков и систем программирования наибольшее первичное влияние на ООБД оказал Smalltalk. Этот язык сам по себе не является полностью пионерским, хотя в нем была введена новая терминология, являющаяся теперь наиболее распространенной в объектно-ориентированном программировании.

Структура объектной модели описываются с помощью трех ключевых понятий:

80