- •Глава 1. Теоретические основы баз данных.
- •Информационные системы.
- •Терминология субд.
- •1.3 Модели данных и этапы проектирования баз данных.
- •1.4 Инфологическое моделирование. Er-диаграммы.
- •1.5 Модели доступа к данным.
- •1.6 Теория модели реляционных баз данных.
- •1.7 Ключи и поддержка целостности.
- •1.8 Нормализация отношений в базе данных.
- •5Nf (pj/nf).
- •Глава 2. Язык sql.
- •1. История развития и стандарты.
- •2. НаборыкомандSql.
- •3. Оператор select.
- •4. Операторы определения данных (основные сведения).
- •5. Операторы манипулирования данными.
- •Insert – добавление информации к таблице
- •Глава3.Субдms sql ServerиязыкTransact-sql.
- •Введение в sql Server.
- •Типы данных, управляющие конструкции языка и функции Transact-sql.
- •Объекты баз данных и работа с ними.
- •Физическая модель данных ms sql Server.
- •Система безопасности и администрирование sql Server.
- •Перспективы ms sql Server.
- •Коллекция субд.
- •1. Субд dBase. Хранение данных в формате dbf.
- •2. Microsoft Visual FoxPro. Обзор.
- •3. Microsoft Access. Oбзор.
- •1. Возможности. Ядро
- •Диалоговые средства конструирования объектов, программы-Мастера, технология Drag and Drop, технология IntelliSence
- •Поддержка языка xml
- •Поддержка расширенных свойств с помощью Microsoft sql Server 2000
- •Прочие возможности
- •2. Объекты Microsoft Access.
- •3. Средства программирования.
- •4. Спецификации Microsoft Access.
- •5. Типы данных, которые могут иметь поля в Microsoft Access
- •10. Мастер подстановок
- •ПрограммированиевVba (Visual Basic for Application)
- •Типы переменных:
- •Массивы
- •Доступность
- •Обработка ошибок
- •If Err Then
- •Ветвления и циклы
- •Параметры процедур и функций.
- •Простейшие программы на vba
- •Задание свойств форм, отчетов и элементов управления в Visual Basic
- •Чтобы задать свойство формы или отчета
- •Чтобы задать свойство элемента управления
- •Чтобы задать свойство раздела формы или отчета
- •`Общение с jet через объекты данных Access.
- •ИспользованиеобъектаTableDef
- •ИспользованиеобъектаRecordset
- •Примеры использования методов dao
- •Программирование в формах.
- •Субд MySql
- •Методы организации удалённого доступа к данным.
- •2. Интеллектуальный анализ данных (data mining)
- •3. Постреляционные базы данных.
- •4. Отказ от нормализации отношений.
- •5. Объектно-реляционные базы данных.
- •6. Язык sql-3 и субд Oracle 8.
- •7. Объектно-ориентированные базы данных.
2. Microsoft Visual FoxPro. Обзор.
История Visual FoxPro и основные особенности шестой версии.
FoxPro – реляционная однопользовательская СУБД (с возможностью сетевого доступа), ориентированная на широкий класс пользователей. Производитель: Fox Software. Первая разработка датируется 1984 годом. FoxBase был задуман как улучшенный вариант dBASE, т.е. если dBASE умел что-то делать, то FoxBase должен был делать это лучше и быстрее.
С появлением на рынке FoxPro 2.0 был совершен переворот в области разработки баз данных на персональных компьютерах. Ускорение работы оказалось просто поразительным. В персональной системе базы данных стала возможной работа с таблицами, содержащими миллионы записей. Впервые разработчики Fox использовали в этой версии SQL-инструкции. FoxPro 2.0 представил разработку экранов и отчетов с помощью «мастеров». При этом мастер генерировал программный код, позволяя использовать и модифицировать его в основной программе. В версию FoxPro 2.5 была добавлена поддержка Windows, хотя по сути это было DOS-приложение, лишь внешне приняв облик Windows-продукта.
Компания Microsoft выкупила фирму Fox Software в период разработки FoxPro для Windows, и «совместная» версия 3.0 обогатилась множеством дополнительных возможностей: появилась поддержка хранимых процедур, правил привязки данных к таблицам, а также новых функций. Visual FoxPro стал первой персональной СУБД с возможностью доступа к удаленным данным. Версия 5.0 обрела возможность использовать и создавать серверы COM, но радикально не отличалась от версии 3.0.
На рубеже веков в основном использовалась шестая версия (Visual FoxPro 6 вошёл в состав пакета разработчика Microsoft Visual Studio 6, 1999 год), хотя все позиции и притязания FoxPro уже можно было трактовать как весьма умеренные.
Основа: интегрированная среда разработчика, позволяющая как конструировать программы из набора модулей (экраны, меню, отчёты), так и осуществлять запросы к БД из самой среды. Основной режим выполнения программ – интерпретация с возможностью создания исполняемых EXE-файлов (для работы которых требуется отнюдь не маленькая по размеру файла библиотека FoxPro). По быстродействию FoxPro всегда занимает лидирующее место среди однопользовательских СУБД. Язык программирования базируется на языке dBASE, плюс собственный набор команд и функций (FoxBASE) плюс поддержка некоторых SQL-инструкций и плюс набор ООП-классов в основном для конструирования пользовательских интерфейсов. Улучшенная поддержка COM является, по-видимому, наиболее значительным усовершенствованием, упростившим создание и реализацию OLE-серверов.
Проект является основным средством объединения отдельных элементов приложения, собирающий файлы, на которые есть ссылки, и осуществляющий их взаимодействие. Для каждого из элементов в СУБД создаётся отдельный файл:
Объект |
Расширения |
Проект |
PRG, FPC, CAT, PGX, PJT |
База данных (для организации таблиц и индексов) |
DBC |
Таблица (число записей в файле – до 1 млрд., максимальный размер записи – 4000 байт, число полей в записи – до 255) |
DBF |
Индексный файл (бывают простые и составные) |
CDX, IDX |
Поля типа Memo и Genegal |
FPT |
Форма |
SCX |
Запрос |
QPR |
Отчёт |
FRX, FRM |
Почтовая наклейка |
LBX, LBL |
Меню |
MNX |
Библиотека класса |
VCX |
Программа |
PRG, SPR, MPR, QPR |
Рисунок |
BMP |
Звук |
WAV |
Откомпилированный проект (наиболее быстрое выполнение команд) |
APP |
Автономный файл проекта |
EXE |
Типы данных (полей в таблицах), которые поддерживаются FoxPro:
Character – текстовый (254 символа максимум)
Integer, Numeric, Float, Double – числовые
Currency – денежный
Date – дата
DateTime – дата и время
Logical – логический
Memo – текстовое поле произвольной длины
General – двоичное поле произвольной длины
Язык программирования FoxBASE
Язык является строко-зависимым и регистронезависимым. Содержит большое количество команд и функций, часто дублирующих друг друга (в основном в целях совместимости с другими СУБД). Некоторые команды одинаковы даже по названию (например, SELECT). Язык истинно структурный, поддерживает аппарат процедур и функций, а также механизм макроподстановок. Использует многомерные массивы и функции массового копирования данных, однако не работает с множествами. Областью вывода по умолчанию является фон главного окна программы (как продолжение традиции DOS-версии).
Некоторые правила языка:
1) кириллица может быть использована лишь в символьных строках и примечаниях;
2) ограничителями строковых констант могут быть как кавычки, так и апострофы;
3) символ примечаний &&или * ;
4) оператор вывода на главное окно – команда ? или ?? (в первом случае вывод с новой строки, во втором – с текущей позиции);
5) Ввод и вывод даты:
MyBirthDate={^1969-08-23}
Set date german
? MyBirthDate
6) Использование макроподстановок
N = ”Date()”
M = ”&N+7”
? M && выводится текст Date()+7
? &M && выводится текущая дата, увеличенная на 7 (дней)
? ”&M” && выводится текст Date()+7
Команды могут вводится интерактивно или запускаться программно. Структура команд:
<Имя команды> [<границы>] [<список выражений>] [ FOR <условие>] [ WHILE <условие>]
Здесь:
<границы> – область действия команды – ключевые слова: ALL (все записи), REST (вниз от текущей), NEXT <n> (следующие n записей, начиная с текущей), RECORD <n> – только для записи с номером n.
FOR <условие> – выполнение команды только для записей, отвечающих условию.
WHILE <условие> – выполнение команды до тех пор, пока не перестанет выполняться условие.
Пример программы поиска:
Clear ALL && очистка экрана, удаление пользовательских переменных и массивов, окон и меню
Use Phonebook && выбираем уже созданную базу данных со списком телефонов
nRec=Reccount() && подсчитываем число записей в базе (переменную объявлять не надо)
? nRec && выводим полученную цифру на экран
for i=1 to nRec do && организуем цикл по записям
goto i && прямое позиционирование на запись с номером i
if Alltrim(phone)=’555555’ && сравниваем поле с именем phone со строковой константой
display && если условие выполнено, показываем запись на экране
endif
endfor
Описание основных команд FoxBASE
1) Выбор таблицы. В среде FoxPro только одна таблица может быть активной.
USE <имя таблицы> – открытие таблицы в текущей рабочей области
USE без параметров – закрывает таблицу
SELECT <i> – переход в рабочую область с индексом i
CLOSE ALL – закрытие всех файлов и переход в рабочую область 1
2) Перемещение по таблице и контроль перемещения.
GO {TOP | BOTTOM | <n>} – переход к первой, последней или записи с номером n
SKIP [<n>] – переход к записи, отстоящей на n от текущей или на следующую запись
Recno([<i>]) – функция, возвращающая номер текущей записи в области i
Reccount([<i>]) – выдаёт общее число записей в таблице (включая помеченные на удаление)
Eof([<i>]), Bof([<i>]) – функции, отмечающие конец и начало таблицы
3) Вставка и удаление записей
APPEND [BLANK] – дополнение таблицы интерактивное (открывается окно ввода данных) или пустой записью
INSERT [BEFORE] – вставка новой записи после (или до) текущей (открывается окно ввода данных)
DELETE – пометка к удалению записей в указанных границах или отвечающих указанным условиям
PACK – физическое удаление помеченных ранее записей и сжатие файла.
USE Peoples
GO BOTTOM
SKIP -3
DELETE NEXT 3
PACK
Просмотр содержимого таблицы
LIST – выводит записи активной таблицы на главное окно
CHANGE <параметры> – вызывает окно редактора отдельных записей таблицы с возможностью интерактивного или предварительного задания параметров редактирования (в т.ч. ввод значений по умолчанию).
BROWSE <параметры> – мощное средство представления данных в табличном виде, позволяющее осуществлять просмотр и редактирование (ввод) записей в одной или нескольких таблицах. Параметры представления данных могут указываться интерактивно или с помощью параметров. Перечислим некоторые параметры команды:
[FIELDS <поле>[:<ключ>],…] – перечень предъявляемых полей (по умолчанию – все). Примеры ключей: :<n> – видимый размер поля в символах :R – разрешён только просмотр поля, :H=<имя> – указание собственного заголовка поля; :W=<выражение> – условие для входа в поле;
[FOR <условие>] – фильтр для записей;
[VALID <условие> [ERROR <сообщение>]] – контроль выхода из текущей записи (т.е. если <условие> истинно, запись покинуть разрешается, иначе появится <сообщение> об ошибке;
[WHEN <условие>] – контроль доступа к записи (если false, запись только для чтения)
[NOEDIT] – редактирование невозможно для всей таблицы
[NODELETE] – удаление записей невозможно
[NOAPPEND] – дополнение базы невозможно
[NOWAIT] – после открытия окна управление сразу передаётся программе
[LOCK <n>] – разделение окна по вертикали: линия раздела проходит за первыми n полями
[LEDIT | REDIT] – левая или правая части окна превращаются в CHANGE
USE Students
BROWSE
BROWSE NOEDIT LOCK 3 REDIT FIELDS new=Family + Lastname + Left(Firstname,1) + ’.’ +;
Left(Patronymic,1) + ’.’ :25:H=’ФИО’, BirthDate:H=’Дата рождения’ FOR group=21402
Индексирование таблицы
Индекные файлы в FoxPro бывают нескольких видов:
1) одноиндексные – индекс по одному полю, высший приоритет. Файл с расширением .idx.
2) мультииндексный структурный. Имя совпадает с именем таблицы, автоматически открывается для своей таблицы, и не указывается в списке индексных файлов. Расширение файла .cdx.
3) мультииндексный обычный. Может создаваться и подключаться к таблицам программно. Низший приоритет.
INDEX <параметры> – команда создания индексных файлов
SER INDEX TO [<список индексных файлов>] [ORDER <ведущий индекс>] – открывает индексные файлы для активной таблицы.
SER INDEX TO без параметров – закрывает все индексные файлы кроме структурного. Синоним – CLOSE INDEX
REINDEX – обновляет все индексные файлы, открытые в текущей рабочей области. По умолчанию при редактировании и добавлении данных индексы отключаются. И если их по окончанию редактирования не перестроить, возникает фатальная ошибка обработки данных в базе.
Поиск и упорядочение информации в таблице
SET FILTER TO <условие> – установка условия для всех следующих команд обработки данных
SET FILTER TO без параметров – отмена ранее поставленных условий
LOCATE FOR <условие> [<границы>] [WHILE <условие>] – последовательный поиск. Предварительное индексирование не требуется. При успешном поиске функция Found() выдает значение True, а функция Recno() указывает на номер искомой записи с первым вхождением заданного условия поиска. Продолжение поиска осуществляется командой CONTINUE.
USE Students
SET FILTER TO Group=21402
LOCATE FOR Name=”Екатерина”
DISPLAY
CONTINUE
SORT ON <список полей с ключами> TO <имя новой таблицы> [<границы>][<условия>] – создание новой таблицы, в которой физическое размещение записей соответствует заданному принципу. Первое поле в списке считается главным. Ключи: /A – сортировка по возрастанию, /D – сортировка по убыванию.
SEEK <выражение> – быстный поиск по ведущему индексу. Если поиск удачен, Found() возвращает True, а Recno() – номер первой записи, удовлетворяющей условию (при этом остальные искать не надо, они находятся ниже по соседству). Помимо команды SEEK и её синонима FIND существует аналогично работающая функция Seek(<выражение>), возвращающая True, если поиск удачен.
Пример программы изменения данных в таблице: откроем БД Streets, найдём запись со значением «Урицкого» (считаем, что запись уникальная) и заменим её на «Александра Невского».
Clear ALL
Set near off && включаем нежёсткий режим поиска
Use Streets
Set index to && закрываем все дополнительные индексные файлы
INDEX on street_nam to ind_name && создаём новый индексный файл по полю street_nam
SEEK ”Урицкого” && быстрый поиск возможен только с использованием индекса
If Found()
Replace street_nam WITH ”Александра Невского”
else
? ”Нет такого имени”
endif
BROWSE && проверим, что сейчас таблица упорядочена по алфавиту по полю street_nam
Set index to
Связи между таблицами
SET RELATION TO <ключевоеполе> INTO <область>, …[ADDITIVE] – связывает указатель записей в активной рабочей области с указателями записей из других рабочих областей по заданному полю. Дочерние таблицы должны быть открыты, и в обязательном порядке проиндексированы по ключевым полям. Создаётся связь вида 1:1.
SET RELATION TO без параметров – разрывает связи между всеми таблицами.
SET SKIP TO <область> – преобразует связь 1:1 к связи 1:М
JOIN <параметры> – альтернативный вариант команды для связывания таблиц
Пример: создадим программу, осуществляющую выборку из двух таблиц, связанных по одному индексному полю. Программа должна запросить фамилию и вывести на экран владельцев телефонов с заданными фамилиями, номера их телефонов и адреса.
clear
select 1
use streets
index on id_street to id_1 unique && совершенно очевидно, что код улицы уникален
pathind=ndx(1) && функция возвращает путь к индексному файлу
select 2
use phones_flat
set relation to id_street into streets && связь один-к-одному
var_name=Space(30) && определим переменную текстового типа
@ 4,4 SAY "Введите имя для дальнейшего поиска:"
@ 5,4 GET var_name PICTURE "@!" && воспользуемся простыми средствами ввода данных
READ
set filter to Alltrim(Upper(name))==AllTrim(m.var_name) && можно и так ...
i=1
FormatFont="FONT 'Courier',12 " && эта переменная будет использована как макроподстановка
@ 6,1 && всего лишь начало области вывода
do while not eof()
&& самая простая команда вывода при желании может обрести неожиданный вес
? i PICTURE "@L 9999 " &FormatFont STYLE 'BI',;
Padr(Substr(surname,1,At(" ",surname)),20," ") &FormatFont ,;
house PICTURE "@R дом 9999 " FONT 'Tahoma',14 STYLE 'B',;
" по ",;
AllTrim(streets.street_typ) &FormatFont,;
streets->street_nam &FormatFont
i=i+1
skip
enddo
set filter to
set relation to
close indexes
close tables
erase "&pathind"
Разработка форм в FoxPro 6.
Вызов редактора форм из командной строки с целью создания формы: create form <имя формы> При этом создаётся файл <имя формы>.scx.
Редактирование формы: modify form <имя формы> При этом открывается окно Form Designer с панелями Form Controls и Properties. Прежде всего необходимо сформировать среду окружения (выпадающее меню Data Environement при клике на окне формы) для формы: добавить таблицы и связать их между собой.
Созданная форма сразу готова для выполнения (меню Form / Run Form иликнопка«!»).Запуск формы на выполнение из командной строки:
do form <имя формы>
read events
Обращение к объектам текущей формы:
thisform.<имя объекта>.<имя свойства> = <значение>
Основные поля, методы или свойства формы и связанные с ними типичные реакции:
Unload Event |
закрытие формы |
clear events |
Init Event |
инициализация формы |
устанавливаются нач. знач. объектов формы |
Caption |
заголовок формы |
уже установлен |
Основные объекты формы:
мастер помогает установить параметры объектов |
1. Поле комментария (Label) |
текстовая информация (заголовки) |
2. Текстовое поле (Text Box) |
поле ввода и вывода данных с форматом и маской | |
3. Поле редактирования (Edit Box) |
поле для редактирования символьных полей большого размера и memo-полей | |
4. Кнопка (Command Button) |
одиночная кнопка с надписью или рисунком | |
5. Группа кнопок (Command Group) |
заданное количество кнопок в одном контейнере* | |
6. Группа переключателей (Option Group) |
Кнопки с зависимой фиксацией* | |
7. Флажок (Check Box) |
Принимает значение 0 или 1 | |
8. Поле со списком (Combo Box) |
Данные вводятся или выбираются из вып. списка | |
9. Список выбора (List Box) |
Отображение многостолбцовых данных со скролл. | |
10. Катушка (Spinner) |
инкремент/декремент с заданным шагом | |
11. Табличное представление (Grid) |
если не хочется использовать BROWSE | |
12. Изображение (Image) |
поддерживаются все известные графич. форматы | |
13. Таймер (Timer) |
отображение системных часов или обновление данных через заданный интервал | |
14. Рамка вкладок (Page Frame) |
составной объект из заданного числа страниц* | |
15. Элем. отображения ActiveX (ActiveX Bound Control, OLE Bound Control) |
подключение внешних элементов управления для отображения значений поля типа General | |
16. Элем. управления ActiveX |
создание ActiveX-объекта | |
17. Линия, Контур (Line, Shape) |
линия, прямоугольник, эллипс, окружность | |
18. Контейнер (Container) |
собирает объекты для однотипного управления | |
19. Разделитель (Separator) |
разделитель кнопок | |
20. Гиперссылка (Hyperlink) |
|
* чтобы проникнуть внутрь контейнера для редактирования его объектов следует выбрать в выпадающем меню опцию «Edit», щёлкнув по объекту-контейнеру правой кнопкой мыши.
С помощью команд меню Format (/Align, /Size) можно сделать объекты одинакового размера, выровнять их относительно друг друга или формы, сделать равными расстояния между ними и т.п.
Для каждого объекта существуют свойства и методы, управляющие его внешним отображением (вкладка Layout в окне Properties), взаимодействием с источником данных для этого объекта (вкладка Data), методами обработки событий от других элементов или связанных с действиями пользователя (вкладка Methods), прочие свойства (вкладка Other). В выделенном на рисунке окне может работать построитель выражений (кнопка fx) для определения значения свойства (если в этом есть необходимость). Если для метода указано [Default], то выполняются действия по умолчанию для каждого из методов. Если требуется ввести собственные действия, после двойного щелчка открывается окно для ввода программы, назначаемой данному методу, помимо действий, выполняемых по умолчанию.
|
Основные методы объектов формы и связанные с ними типичные реакции:
Caption |
текст для Label и Button |
конечно, можно менять программно, например this.caption = time() |
Name |
имя объекта (уникальное) |
зная его, программно управляем объектом |
Value |
текущее значение объекта |
можем устанавливать и читать, например: Thisform.Text1.Value = Date() |
Picture |
изображение для Button и Image |
вводится имя файла изображения |
Click Event |
нажатие – прежде всего для Button |
пример для кода кнопки «К началу таблицы»: if !bof() go top endif _screen.ActiveForm.Refresh() |
Format, InputMask |
для полей ввода |
такие же опции форматирования, что и для команд SAY/GET с шаблоном PICTURE |
RowSource |
для списков – источник данных |
совместно с полем RowSourceType |
|
|
|
Пример кода для кнопки «Выход из формы»:
if MessageBox(“Выходить из формы ?”, 4+32+256, ”Выход”) = 6
_screen.ActiveForm.Release()
else
_screen.ActiveForm.Refresh()
EndIf
Если переменную или массив намечается использовать вне формы или при взаимодействии нескольких форм, создавайте её как Public.
Разработка отчётов в FoxPro 6.
Под отчётом понимается форматированное представление данных, выводимое на экран, принтер или в файл.
Вызов редактора отчётов из командной строки с целью создания нового отчёта:
create report <имя отчёта>. При этом создаётся файл <имя отчёта>.frx. На экране появляется окно Report Designer и панель инструментов Report Controls. Редактирование отчёта: modify report <имя отчёта>.
Создание исполняемых модулей в FoxPro 6.
Создаём главную программу :
ВокнеProject ManagerнажимаемкнопкуBuildивыбираемBuild Executable: