Конспект лекций_Администрирование БД. Теоретические основы баз данных
Скачать 0.98 Mb.
|
2. Microsoft Visual FoxPro. Обзор.История VisualFoxPro и основные особенности шестой версии. 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-серверов. Проект является основным средством объединения отдельных элементов приложения, собирающий файлы, на которые есть ссылки, и осуществляющий их взаимодействие. Для каждого из элементов в СУБД создаётся отдельный файл:
Типы данных (полей в таблицах), которые поддерживаются 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 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 CLOSE ALL – закрытие всех файлов и переход в рабочую область 1 2) Перемещение по таблице и контроль перемещения. GO {TOP | BOTTOM | SKIP [ Recno([]) – функция, возвращающая номер текущей записи в области i Reccount([]) – выдаёт общее число записей в таблице (включая помеченные на удаление) Eof([]), Bof([]) – функции, отмечающие конец и начало таблицы 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 [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.<имя объекта>.<имя свойства> = <значение> Основные поля, методы или свойства формы и связанные с ними типичные реакции:
Основные объекты формы:
* чтобы проникнуть внутрь контейнера для редактирования его объектов следует выбрать в выпадающем меню опцию «Edit», щёлкнув по объекту-контейнеру правой кнопкой мыши. С помощью команд меню Format (/Align, /Size) можно сделать объекты одинакового размера, выровнять их относительно друг друга или формы, сделать равными расстояния между ними и т.п.
Основные методы объектов формы и связанные с ними типичные реакции:
Пример кода для кнопки «Выход из формы»: 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: |