4. Лекция: СУБД Microsoft Visual FoxPro. Общие сведения. Создание базы данных
Рассмотрены основные возможности и особенности СУБД Visual FoxPro. Разобраны последовательность создания базы данных в этой системе и стандартные режимы работы с таблицами базы данных. Цель: освоение методов создания баз данных в системе Visual FoxPro и работы с таблицами базы в режимах BROWSE и EDIT.


Общая характеристика системы
Visual FoxPro (VFP) - современная СУБД для персональных компьютеров, использующая реляционные базы данных, имеющая объектно-ориентированный алгоритмический язык для работы с информацией, методы визуального программирования и достаточно большие возможности (табл. 4.1). Типы данных, которые могут иметь поля таблиц базы данных, приведены в табл. 4.2 и табл. 4.3
Версия системы 7.0 может работать в операционных системах Windows 9x и ядра NT, версии 8.0 и 9.0 - только в Windows XP, 2000, 2003.
Наименование предельной величины | Предельная величина |
---|---|
Количество записей в файле таблицы | 1 миллиард |
Размер файла таблицы | 2 гигабайта |
Количество символов в одной записи | 65500 |
Количество полей в одной записи | 255 |
Количество одновременно открытых таблиц | 255 |
Количество символов в поле таблицы | 254 |
Количество байтов в индексном ключе в некомпаундном индексе | 100 |
Количество байтов в индексном ключе в компаундном индексе | 240 |
Количество открытых индексных файлов для одной таблицы | не ограничено |
Количество открытых индексов во всех рабочих областях | не ограничено |
Количество связей | не ограничено |
Длина выражений связи | не ограничена |
Размер символьных полей | 254 |
Размер числовых полей | 20 |
Количество символов в имени поля в свободной таблице | 10 |
Количество символов в имени поля в таблице, содержащейся в базе данных | 128 |
Диапазон целых чисел | + 2 147 483 647 |
Точность в числовых вычислениях | 16 цифр до 9007199254740992 (253) |
Действительные числа | до 10308 или 2 1023 |
Количество переменных по умолчанию | 16384 |
Количество переменных | 65000 |
Количество массивов | 65000 |
Количество элементов в массиве | 65000 |
Количество строк в исходных программных файлах | не ограничено |
Размер модуля компилируемой программы | 64 килобайта |
Размер процедур в файле | не ограничен |
Количество вложенных DO | 128 |
Количество вложенных READ | 5 |
Количество передаваемых параметров | 27 |
Количество транзакций | 5 |
Количество объектов в отчете | не ограничено |
Длина описания отчета | 20 дюймов |
Количество уровней группировки | 74 |
Длина символьных переменных в отчете | 255 |
Количество открытых окон (всех типов) | не ограничено |
Количество открытых окон BROWSE | 255 |
Количество символов в символьной строке или переменной памяти | 16 777 184 |
Количество символов в командной строке | 8192 |
Количество открытых файлов | возможности ОС |
Количество нажатий клавиш в макро | 1024 |
Количество полей в одном запросе SQL | 255 |
Тип | Описание | Размер | Диапазон |
---|---|---|---|
Blob | Двоичные данные неограниченной длины. Значения сохраняются в memo (.fpt) файле. Кодовая страница не учитывается | 4 байта в *.dbf | Ограничен доступной памятью, на диске до 2 Гб |
Character | Текст, состоящий из символов | 1 байт на символ, до 254 символов | Любые символы |
Currency | Денежный формат | 8 байт | - $922337203685477.5807 до $922337203685477.5807 |
Date | Дата, состоящая из месяца, дня и года | 8 байт | От {^0001-01-01} - 1 января 1 года до {^9999-12-31} - 31 декабря 9999 года |
DateTime | Дата и время, состоит из месяца, дня, года, часа, минуты и секунды | 8 байт | От {^0001-01-01} до {^9999-12-31}, время от 00:00:00 до 23:59:59 |
Logical | Логическое значение, True или False | 1 байт | True (.T.) или False (.F.) |
Numeric | Целые или действительные числа | 8 байт в памяти; от 1 до 20 байт в *.dbf | - .9999999999E+19 до .9999999999E+20 |
Varbinary | Двоичные значения. Под пустые концевые значения место на диске не резервируется. Кодовая страница не учитывается | 1 байт на шестнадцатеричное значение, всего до 255 байт | Любое шестнадцатеричное значение |
Variant | Любой тип Visual FoxPro и null-значение. Когда данные сохраняются в переменной, ее тип становится типом данных | См. все другие типы | См. все другие типы |
Тип поля | Описание | Размер | Диапазон |
---|---|---|---|
Character Binary | Текст, состоящий из символов. Кодовая страница не учитывается | 1 байт на символ, до 254 символов | Любые символы |
Double | Действительные числа удвоенной значимости | 8 байт | +4.94065645841247E-324 до +8.9884656743115E307 |
Float | То же самое, что и Numeric | 8 байт в памяти; от 1 до 20 байт в *.dbf | - .9999999999E+19 до .9999999999E+20 |
General | Ссылка на OLE-объект. Значения сохраняются в memo (.fpt) файле | 4 байт в *.dbf | Ограничен доступной памятью |
Integer | Целое числовое значение | 4 байта | -2147483647 до 2147483647 |
Integer Autoinc | Целое значение, автоматически изменяющееся. Только для чтения (read-only) | 4 байта | Определяется значениями Next и Step |
Memo | Символьный текст. Значения сохраняются в memo (.fpt) файле | 4 байтa в *.dbf | Ограничен доступной памятью |
Memo Binary | То же, что Memo. Кодовая страница не учитывается | 4 байтa в *.dbf | Ограничен доступной памятью |
Varchar | Символьный текст. Varchar подобен Character, но не резервируется место для концевых пробелов | 1 байт на символ, всего до 254 символов | Любые символы |
Varchar Binary | Тип Varchar, кодовая страница не учитывается | 1 байт на символ, всего до 254 символов | Любые символы |
Некоторые достоинства системы:
- Широко известный формат таблиц баз данных, что позволяет легко организовать обмен информацией с другими приложениями Microsoft Windows.
- Современная организация реляционных баз данных, позволяющая хранить информацию о таблицах базы, их свойствах, индексах и связях, задавать условия соблюдения ссылочной целостности, создавать локальные и удаленные представления (Views), связи с серверами, хранимые процедуры, исполняемые при наступлении более 50 различных видов событий (VFP 7.0-9.0).
- Высокая скорость работы с большими базами данных.
- Высокая наглядность работы с базами данных: многофункциональное окно Data session позволяет видеть список открытых таблиц баз данных, их связи, фильтры, порядок по индексам, режимы буферизации, переходить к режимам модификации структуры, к работе с информацией таблиц и пр.
- Высокая скорость разработки приложений с использованием Мастеров (Wizard), Конструкторов (Designer), Построителей (Builder), режим подсказок IntelliSense при написании текста программ, системы отладки и тестирования программ.
- Собственный объектно-ориентированный язык работы с базами данных, основу которого составляет широко известное ядро xBase. Наличие в составе системы значительного количества библиотек стандартных классов с доступным для модификации исходным текстом. Возможность использования библиотек других приложений Windows (ActiveX).
- Возможность разработки приложений, работающих по технологии "клиент-сервер" с данными, размещенными на серверах баз данных Oracle и Microsoft SQL Server и с другими приложениями Microsoft Windows с использованием ODBC и OLE
- Возможность разработки Интернет-приложений для работы с базами данных и работы с Web-сервисами. Создание и работа с COM и COM+ компонентами (Component Object Model).
- Возможность разработки проекта для работы с базами данных с компиляцией его в программу, исполняемую в VFP (*.app), в операционной системе Microsoft Windows (*.exe или *.dll) или в Интернет-браузере (*.app).
- В дистрибутиве системы присутствует большая библиотека примеров, что облегчает освоение всех ее возможностей.
Система VFP предназначена для использования профессиональными программистами, поэтому нет смысла в русификации ее меню и языка - для любого программиста английский синтаксис алгоритмического языка более привычен, чем русский.
Типы файлов, которые использует система
Особенность системы - использование значительного количества файлов с различными расширениями для работы с различными типами объектов, но по сути формат многих из них - dbf с мемо-полями.
В табл. 4.4 приведен список основных типов файлов. Знание всех типов файлов необходимо каждому программисту, работающему с системой.
Основной файл | Memo поля | Индексы | Скомпилированный файл | Тип файла |
---|---|---|---|---|
.dbc | .dct | .dcx | База данных (Database) | |
.dbf | .fpt | .cdx, .idx | Таблица (Table) | |
.frx | .frt | Отчет (Report) | ||
.h | Файл заголовков | |||
.ico | Иконка | |||
.lbx | .lbt | Этикетка (Label) | ||
.mnx | .mnt | .mpx | Меню | |
.mpr | Сгенерированная программа меню | |||
.ocx | Библиотека объектов ActiveX | |||
.pjx | .pjt | .exe, .dll, .app | Мемо-поля проекта | |
.prg | .fxp | Файл программы | ||
.qpr | .qpx | Программа-запрос | ||
.scx | .sct | Форма (Form) | ||
.vcx | .vct | Библиотека Visual FoxPro |
Настройка системы
Перед использованием системы VFP необходимо выполнить некоторые настройки для удобства использования. Для этого в меню Tools следует вызвать команду Options, после чего появится многостраничная экранная форма для задания параметров настройки с аналогичным названием (рис. 4.1).
Рис. 4.1. Окно настройки параметров системы Visual FoxPro
Наиболее существенными являются настройки:
- на странице Regional - Date Format - German (дд.мм.гггг) и пр.;
- страница Debug - можно задать расположение отладочных окон (всего их 7 - Trace, Watch и др.) в отдельном окне в Windows или в главном окне VFP и пр.;
- страница Editor - можно задать цветовое выделение синтаксиса и прочие параметры окон с текстом программ;
- страница Data - можно определить, как будут открываться по умолчанию базы и таблицы: эксклюзивно (Open Exclusive) или нет, с использованием одного из возможных режимов буферизации данных (buffering) или нет, будем ли мы видеть помеченные для удаления записи (Ignore deleted records) и многое другое;
- страница File Locations - следует задать Default Directory - папку по умолчанию, которая будет открываться в командах Open и Save, а также использование и расположение файла сохранения конфигураций (ресурсного файла) foxuser.dbf;
- страница Forms - следует задать максимальный размер экранных форм - Maximum design area - обычно 800х600 и т.д.
Все заданные параметры будут сохранены в файле foxuser.dbf, если будет нажата кнопка Set As Default.
Еще один файл, который связан с настройкой системы, - Config.fpw. Это текстовый файл, в котором можно записать некоторые команды конфигурирования системы (например, codepage = auto, date = german, screen = off и пр.). Он выполняется автоматически при запуске VFP или приложения, разработанного в этой системе для работы с базой данных.
Во время работы в системе все предварительные установки при необходимости можно изменить.
При работе в VFP очень полезными являются окна Command, в котором можно видеть команды из меню и писать свои команды, и окно Data Session (когда-то раньше оно называлось View), в котором можно видеть все открытые таблицы, установленный порядок по индексам, заданные фильтры и связи между таблицами, и выполнять все эти операции. Их можно держать постоянно открытыми в главном окне VFP.
Следует знать о таком свойстве окон в VFP, как Dockable - прилипание к границам родительского окна (аналогичное свойство имеют панели инструментов). Если это свойство задано, окно, с одной стороны, может прилипать, но одновременно может и выдвигаться за границы родительского окна и всегда лежит поверх других окон. При большом количестве окон в VFP, 15'' или 17'' мониторе и разрешении 1024х768 лучше это свойство выключить и использовать его на больших мониторах с вынесением ряда окон из основного окна VFP.
увеличить изображение
Рис. 4.2.
Главное окно системы Visual FoxPro с открытыми в нем окнами проекта, программы, Trace, Watch, Data Session и Command
Создание базы данных
Разработка любой информационной системы начинается с создания базы данных. Рассмотрим процесс создания базы данных, модель которой описана в предыдущей лекции, в системе VFP.
Для создания новой базы данных можно воспользоваться кнопкой New стандартной панели инструментов (рис. 4.3) или пунктом меню "File - New:".
Рис. 4.3.
Стандартная панель инструментов системы Visual FoxPro
Рис. 4.4.
Выбор типа файла в диалоге New
Особенность этой команды - возможность создания большого количества различных типов файлов, соответствующих различным типам объектов системы, которые мы видим в окне New, появляющемся после этой команды (рис. 4.4).
В окне New в данном случае нужно выбрать тип файла Database.
Далее можно использовать кнопки New file или Wizard. Если выбрать кнопку Wizard - будут предложены готовые американские образцы баз данных - Address Book, Book Collection, Contact Management, Event Management, Music Collection, Picture Library, Students and Classes, Video Collection и прочие, всего более двух десятков.
Для примера на рис. 4.5 приведена схема базы данных, полученная с помощью Wizard для образца Students and Classes.
Как видно из примера, база данных слишком специфична, не совсем соответствует структуре нашего высшего учебного заведения, используется слишком много не совсем привычных для нас английских терминов, очень много индексов (каждый индекс дублирует информацию полей таблиц, при чрезмерно большом их количестве размер индексного файла может получиться больше, чем размер таблицы, что нерационально). Проще создать новую базу данных, соответствующую разработанной нами ранее модели.
увеличить изображение
Рис. 4.5.
Образец базы данных, полученный с использованием Wizard
Выберем кнопку New file для создания собственной базы данных. После этого нужно задать папку на диске, где мы будем сохранять все компоненты, относящиеся к разрабатываемому проекту, и задать название базы данных (расширение файла указывать не надо - система допишет его сама). Пусть папка и имя базы данных будут Students (рис. 4.6).
Рис. 4.6.
Диалог для сохранения базы данных на диске
После нажатия на кнопку Save (Сохранить) будут созданы файлы базы данных (students.dbc, students.dct и students.dcx) и откроется пустое окно модификации структуры базы данных (Database Designer), показанное на рис. 4.7. Следует отметить, что очень многие команды, задаваемые нами с использованием меню системы, отображаются в виде текстовых команд в окне Command (создается протокол команд, который сохраняется), и это может быть использовано для повторного выполнения использованных команд или для включения их в текст программы, а также может быть полезно начинающим пользователям для изучения языка системы VFP. После команды Save в окне Command появятся 2 строки команд: CREATE DATABASE и MODIFY DATABASE, как показано на рис. 4.8.
Поместив курсор мыши в окно Database Designer, щелкнем в нем правой кнопкой мыши и в контекстном меню выберем команду New table:.
Далее выбираем New table, а не Wizard, который нам опять предложил бы американские образцы таблиц за основу, выбираем папку и задаем имя главной таблицы базы - Spisok, после чего открывается окно описания структуры таблицы базы данных (Table Designer) (рис. 4.9).
Рис. 4.7. Окно Конструктора базы данных
Рис. 4.8. Окно Command системы VFP
увеличить изображение
Рис. 4.9.
Окно Конструктора таблиц
В окне Table Designer описываем все поля таблицы Spisok.dbf- имя поля (Name), тип (Type), ширину (Width), количество десятичных знаков для действительных чисел (Decimal), наличие простого индекса (Index) и задаем заголовок поля таблицы (Caption). Имена полей лучше писать латинскими буквами.
Для индекса NZ на странице Indexes окна Table Designer следует задать тип индекса - Primary (первичный), т.к. номер зачетки - уникальный для каждого студента, однозначно его идентифицирует и поэтому может служить первичным ключом (в таблице обозначения A (Ascending) - индекс в порядке возрастания, P (Primary).
Структура главной таблицы базы данных приведена в табл. 4.3.
Для таблицы, входящей в состав базы данных, в окне Table Designer присутствуют разделы Display, Map field type до classes, Field validation, Field comment, эта информация сохраняется в файле базы данных и поэтому отсутствует при описании структуры свободных таблиц (файлы *.dbf, не входящие в состав базы данных). Таблицу можно удалить из базы, но оставить в виде свободной таблицы на диске; в таком случае информация этих разделов теряется.
Задание заголовков (Caption) для полей при описании структуры таблицы облегчает разработку экранных форм и отчетов - эти названия появятся как подписи для полей (если Caption отсутствует, подписью будет имя поля).
Name | Type | Width | Decimal | Index | Caption |
---|---|---|---|---|---|
Nz | C | 7 | A,P | Номер зачетки | |
Fio | C | 45 | Фамилия, имя, отчество | ||
data_p | D | 8 | Дата поступления | ||
n_fclt | N | 2 | A | Факультет | |
n_spect | C | 7 | A | Специальность | |
kurs | N | 1 | Курс | ||
n_grup | С | 10 | Группа | ||
n_pasp | С | 10 | Номер паспорта |
Далее создаем следующую таблицу в базе - справочник факультетов с именем файла Fclt.dbf. Для этого следует снова поместить курсор на пустое место окна Database Designer, щелкнуть правой кнопкой мыши и в контекстном меню выбрать команду New table. В окне Table Designer описываем структуру таблицы (табл. 4.4).
Name | Type | Width | Decimal | Index | Caption |
---|---|---|---|---|---|
n_fclt | N | 2 | A,P | Номер факультета | |
name_f | C | 120 | Название факультета |
Название ключевого поля справочника, его тип и ширину желательно оставить такими же, как и в главной таблице, для облегчения установления связей при разработке экранных форм и отчетов с помощью Мастера.
Точно так же создаем в базе данных следующие таблицы и индексы для табл. 4.5, табл. 4.6, табл. 4.7.
Name | Type | Width | Decimal | Index | Caption |
---|---|---|---|---|---|
n_spect | C | 7 | A,P | Код специальности | |
name_s | C | 120 | Название специальности |
Name | Type | Width | Decimal | Index | Caption |
---|---|---|---|---|---|
nz | C | 7 | A | Номер зачетки | |
semestr | N | 1 | Семестр | ||
n_predm | N | 2 | A | Предмет | |
ball | С | 1 | Оценка | ||
data_b | D | 8 | Дата | ||
prepod | C | 45 | Преподаватель |
Name | Type | Width | Decimal | Index | Caption |
---|---|---|---|---|---|
n_predm | N | 2 | A,P | Номер предмета | |
name_p | С | 120 | Название предмета |
Далее в окне Database Designer задаем постоянные связи между таблицами в базе, перетаскивая мышкой название первичного индекса к обычному (Regular) индексу (внешний ключ). В результате получаем схему базы данных (рис. 4.10).
Рис. 4.10.
Окно базы данных STUDENTS
Для связей можно задать условия соблюдения ссылочной целостности: каскадное обновление в операциях удаления и вставки и контроль с запретом ввода записей с неверными ключевыми значениями в операциях вставки (см. рис. 4.11). Для заданных условий будет сгенерирован программный код, занесенный в базу данных как хранимые процедуры - триггеры. Эти программы при желании можно просмотреть, изучить механизм их действия или модифицировать, если такая необходимость возникнет. Текст триггеров может представлять значительный интерес для программистов, т.к. он написан в наиболее универсальном виде для работы с различными режимами и базами с использованием стиля оформления, принятого в фирме-разработчике системы VFP.
Рис. 4.11. Задание условий соблюдения ссылочной целостности
Использование стандартных режимов BROWSE и EDIT для работы с таблицами базы
В системе VFP существует два основных режима работы с таблицами (и, соответственно, команды языка этой системы): Browse - табличный формат и Edit - форма с построчным расположением полей.
Существует много разных способов открыть окно таблицы базы данных для редактирования в одном из этих режимов, в том числе:
- в открытом окне модификации структуры базы (Database Designer) щелкнуть правой кнопкой мыши на таблице и выбрать команду Browse;
- щелкнуть мышкой на значке Open стандартной панели инструментов, задать тип файла Table, выбрать нужную таблицу и дать команду Browse в окне Command или в пункте меню View;
- открыть окно Data session (из пункта главного меню Window), в нем открыть нужные таблицы (кнопка Open), затем выбрать нужную Вам открытую таблицу и нажать на кнопку Browse;
- создать проект, добавить в него базу данных (внешняя) и в окне проекта выбрать для нужной таблицы команду Browse (полезно сразу создать проект, тогда не нужно будет искать файлы разрабатываемой системы на диске, все файлы можно создавать в окне проекта с указанием, где они будут располагаться на диске);
- написать в окне Command команду USE ?, выбрать таблицу и написать команду BROWSE.
После вариантов 1-4 в окне Command мы увидим 2 или 3 команды (вторая может отсутствовать), например, для табл. 4.4, следующие:
USE c:\asg\studentsclt.dbf IN 0 EXCLUSIVE - открыть таблицу в первой свободной рабочей зоне с алиасом (псевдонимом) FCLT эксклюзивно;
SELECT FCLT - выбрать рабочую зону с алиасом FCLT;
BROWSE LAST - показать на экране таблицу в той же конфигурации, как ранее (если в структуре таблицы добавлены новые поля или ранее был задан показ не всех полей, а нужно показать все, следует написать команду BROWSE NORMAL).
В результате будет открыто окно таблицы базы данных (рис. 4.12), изменится пункт главного меню View (Вид) - в нем появятся пункты Browse и Edit для переключения режимов, кроме того, пункт Append mode - режим автоматического добавления записей в таблицу (возможен только при работе с таблицами из системы VFP, в программном режиме для добавления записей служат команды APPEND: и INSERT:).
Рис. 4.12.
Стандартный режим Browse работы с таблицей
Выбрав режимы Browse и Append mode (в меню у этих пунктов появится галочка), мы сможем занести новые записи в таблицы нашей базы.
Окно Browse имеет очень много возможностей, которые используются при программировании (см. полный синтаксис команды Browse в приложении). Поля таблиц на экране можно менять местами, изменять их ширину и пр. В диалоговом режиме VFP по умолчанию выполняется команда Browse Last - открыть окно в той конфигурации, в которой оно было открыто в предыдущий раз. Если вы при модификации структуры таблицы добавили в нее новое поле, оно может не появиться на экране. В этом случае нужно написать в окне Command команду Browse или Browse normal.
Окно Browse можно разделить на 2 части. Одна из них может быть в режиме Browse, другая - Edit, что удобно при работе с таблицами, имеющими большое количество полей. Можно изменять расположение и ширину полей.
Назначение узкой белой колонки слева от полей таблицы - пометить запись для удаления. Помеченная запись может быть видна с черной отметкой в этой колонке (set delete off) или не видна и как бы отсутствует (set delete on). Помеченные записи можно удалить из файла таблицы (командой Pack), но эта операция связана с переписыванием информации из одного файла в другой, может выполняться только в эксклюзивном режиме открытия таблицы, поэтому выполняется нечасто и обычно не простым пользователем, а администратором базы или программистом.
Режим Edit для той же таблицы показан на рис. 4.13.
В таблице 3-я запись помечена для удаления. Отметку легко снять, повторно щелкнув по черной полоске слева от записи. Она видна, если параметр системы SET DELETED имеет значение OFF.
Рис. 4.13.
Стандартный режим Edit работы с таблицей
Рис. 4.14.
Стандартный режим с разделением окна на 2 части
Возможен показ таблицы с разделением ее на 2 части, одна из которых будет в режиме Browse, другая - в режиме Edit (рис. 4.14).
Режим сохранения добавленных, измененных и удаленных данных зависит от того, используется или нет буферизация данных. Изменить режим можно в свойствах рабочей зоны (Properties для выбранной таблицы в меню или в окне Data Session), окно описания свойств показано на рис. 4.15
Рис. 4.15.
Окно свойств рабочей зоны, в которой открыта таблица Fclt.dbf
Если режим буферизации не задан, сохранение информации происходит сразу при выходе из поля редактирования или закрытии таблицы.
В режиме буферизации изменения заносятся в таблицу только в том случае, если перед ее закрытием дана команда =TABLEUPDATE(.T.).
Буферизация бывает оптимистическая (Lock records when written) и пессимистическая (Lock records when edited), на уровне одной записи (Buffer current record) или многих (Buffer all edited records).
Правильное использование режимов буферизации имеет большое значение при многопользовательском режиме работы с одной таблицей базы данных. В режиме оптимистической буферизации сразу несколько пользователей могут редактировать одни и те же записи и поля. В VFP имеются специальные механизмы разрешения конфликтов сохранения данных, которые могут возникать в этом случае.
Более подробные сведения о многопользовательской работе и использовании режимов буферизации можно найти в справочной системе VFP.
Особенность VFP при показе в стандартных режимах двух таблиц, между которыми установлена связь: в дочерней таблице система показывает только те записи, внешний ключ которых соответствует значению первичного ключа главной таблицы (см. рис. 4.16).
Рис. 4.16. Работа с таблицами, между которыми установлена связь
Для разрабатываемой информационной системы следует занести в стандартном режиме работы с таблицами информацию в справочники - таблицы табл. 4.4, табл. 4.5 и табл. 4.7. Список студентов и список их оценок лучше заполнять с использованием экранной формы, которая будет создана далее.
