
- •Лекция 12. Функциональные и обеспечивающие подсистемы
- •1. Элементы функциональных подсистем
- •1.1. Блок хранения документов
- •1.2. Блок комплектования
- •1.3. Блок каталогов
- •1.4. Блок указателей
- •1.5. Блоки пользовательского интерфейса
- •2. Обеспечивающие подсистемы
- •2.1. Техническое и организационное обеспечение
- •2.2. Информационное обеспечение
- •2.3. Лингвистическое обеспечение
- •2.4. Программное обеспечение
- •2.5. Нормативное обеспечение
- •3.2.2.2. Система Visual FoxPro
- •Язык программирования 4-го поколения 4gl
- •4.7.Вопросы практического програмирования.
- •4.7.1.Использование специализированных библиотек и встраиваемого sql.
- •4.7.3.Odbc - открытый интерфейс к базам данных на платформе ms wIndows.
- •4.7.4.Jdbc - мобильный интерфейс к базам данных на платформе Java.
- •Функциональная модель odbc Основа odbc
- •Архитектура odbc
- •Создание источника данных
- •Утилита odbc
- •Создание источника данных с использованием odbc api
- •Коды возврата
- •Основные понятия
- •Объектная модель ole db
- •Создание результирующего набора
- •Глава 9 Запросы к базе данных
- •Лекция 33. Основные понятия и классификация case-технологий
Создание результирующего набора
При реализации доступа к БД посредством OLE DB провайдера сначала следует создать объект данных и установить соединение с базой данных. Далее необходимо создать объект "сеанс". И только потом можно создавать результирующий набор.
Механизм создания объекта "сеанс" приведен на следующей схеме.
Результирующий набор может быть создан одним из следующих способов:
-
Для объекта "сеанс" вызывается метод IOpenRowset::OpenRowset, выполняющий непосредственное создание результирующего набора (интерфейс IOpenRowset должен поддерживаться любым провайдером);
-
Для объекта "сеанс" вызывается метод IDBCreateCommand::CreateCommand, создающий объект Command. Далее для объекта "команда" вызывается метод ICommand::Execute. (при использовании интерфейса IMultipleResults можно работать с несколькими результирующими наборами);
-
Вызывается один из следующих методов IColumnsRowset::GetColumnsRowset, IDBSchemaRowset::GetRowset, IViewRowset::OpenViewRowset или ISourcesRowset::GetSourcesRowset.
Чтобы результирующий набор, хранимый на сервере, можно было использовать, необходимо выполнить связывание и извлечение данных. Для этого следует определить структуры типа DBBINDING, описывающие столбцы, и создать аксессор. Далее для получения строк результирующего набора можно использовать один из следующих методов:
-
IRowset::GetNextRows;
-
IRowsetLocate::GetRowsByBookMarks;
-
IRowsetLocate::GetRowAt;
-
IRowsetScroll:: GetRowAtRatio.
В заключение для записи данных в структуру, определенную аксессором, вызывается метод IRowset::GetData.
После получения и обработки строк их следует освободить, вызвав метод IRowset::ReleaseRows.
После просмотра всего результирующего набора следует также освободить аксессор, вызвав метод IRowset::ReleaseAccessor, и освободить сам результирующий набор, вызвав метод IRowset::Release.
Интерфейс IAccessor определяет следующие методы:
-
AddRefAccessor - увеличивает число ссылок на данный аксессор;
-
CreateAccessor - создает аксессор из набора связываний;
-
GetBindings - возвращает связывания, установленные данным аксессором;
-
ReleaseAccessor - освобождает аксессор.
Для создания аксессора следует запросить интерфейс IAccessor и выполнить следующий код:
HRESULT hr=pIAccessor-> CreateAccessor();
Метод CreateAccessor имеет следующее формальное описание:
HRESULT CreateAccessor (
DBACCESSORFLAGS dwAccessorFlags, // Свойства
// аксессора и как он используется
DBCOUNTITEM cBindings, // Число связей
// в аксессоре
const DBBINDING rgBindings[], // Описание
// столбца или параметра
DBLENGTH cbRowSize, // Число байтов,
// используемых для одного набора параметров
HACCESSOR *phAccessor, // Указатель
//на созданный аксессор
DBBINDSTATUS rgStatus[]); // Массив значений,
// определяющий статус
// каждого связывания
Каждый столбец формируемого результирующего набора или параметр описывается структурой DBBINDING, которая имеет следующее формальное описание:
typedef struct tagDBBINDING {
DBORDINAL iOrdinal; // Порядковый номер
// столбца или параметра (начиная с 1)
DBBYTEOFFSET obValue; // Сдвиг в байтах для
// значения столбца или параметра в буфере
// (указатель на буфер задается при
// создании аксессора)
DBBYTEOFFSET obLength;
DBBYTEOFFSET obStatus;
ITypeInfo *pTypeInfo;
DBOBJECT *pObject;
DBBINDEXT *pBindExt;
DBPART dwPart;
DBMEMOWNER dwMemOwner;
DBPARAMIO eParamIO;
DBLENGTH cbMaxLen;
DWORD dwFlags;
DBTYPE wType;
BYTE bPrecision;
BYTE bScale;
} DBBINDING;
Поле wType определяет тип столбца или параметра, который описывается следующим образом:
typedef WORD DBTYPE;
enum DBTYPEENUM {
// Следующие значения точно соответствуют VARENUM
// при автоматизации и не могут быть использованы
// как VARIANT.
DBTYPE_EMPTY = 0, // Значение отсутствует,
// соответствующего типа С нет
DBTYPE_NULL = 1, // Значение равно NULL,
// соответствующего типа С нет
DBTYPE_I2 = 2, // Двухбайтовое целое со знаком,
// соответствует С типу short
DBTYPE_I4 = 3, // Четырехбайтовое целое со знаком,
// соответствует С типу long
DBTYPE_R4 = 4,
DBTYPE_R8 = 5, // Вещественное двойной точности,
// соответствует С типу Double
DBTYPE_CY = 6, // Тип для значения Cyrrency
DBTYPE_DATE = 7, // Тип для значения даты
// (дата хранится в виде вещественного числа:
// целочисленная часть определяет дату,
// а дробная - время)
DBTYPE_BSTR = 8, // Указатель на строку BSTR
DBTYPE_IDISPATCH = 9, // Указатель на интерфейс
// IDispatch
DBTYPE_ERROR = 10, // 32-битовый код ошибки
DBTYPE_BOOL = 11, // Для логического значения
DBTYPE_VARIANT = 12, // Для значения VARIANT
DBTYPE_IUNKNOWN = 13, // Указатель на интерфейс
// IUnknown
DBTYPE_DECIMAL = 14,
DBTYPE_UI1 = 17, // Однобайтовое беззнаковое целое,
// соответствует С типу byte
DBTYPE_ARRAY = 0x2000,
DBTYPE_BYREF = 0x4000,
DBTYPE_I1 = 16,
DBTYPE_UI2 = 18,
DBTYPE_UI4 = 19,
// Следующие значения точно соответствуют VARENUM
// при автоматизации, но не могут быть использованы
// как VARIANT.
DBTYPE_I8 = 20,
DBTYPE_UI8 = 21,
DBTYPE_GUID = 72, // Для уникального
идентификатора GUID
DBTYPE_VECTOR = 0x1000,
DBTYPE_FILETIME = 64,
DBTYPE_RESERVED = 0x8000,
// Следующие значения недопустимы в VARENUM для OLE.
DBTYPE_BYTES = 128,
DBTYPE_STR = 129,
DBTYPE_WSTR = 130,
DBTYPE_NUMERIC = 131,
DBTYPE_UDT = 132,
DBTYPE_DBDATE = 133,// Для даты, определяемой
// как структура
// Typedef struct tagDBDATE {
// SHORT year;
// USHORT month;
// USHORT day;
// } DBDATE;
DBTYPE_DBTIME = 134,
DBTYPE_DBTIMESTAMP = 135 // Для даты и времени,
// определяемых как структура
// Typedef struct tagDBTIMESTAMP {
// SHORT year;
// USHORT month;
// USHORT day;
// USHORT hour;
// USHORT minute;
// USHORT second;
// ULONG fraction;
} DBTIMESTAMP;
DBTYPE_HCHAPTER = 136
DBTYPE_PROPVARIANT = 138,
DBTYPE_VARNUMERIC = 139
-
Перечень обозначений и сокращений
-
MS – Microsoft;
-
VFP – Visual FoxPro;
-
АРМ – автоматизированное рабочее место;
-
БД – база данных;
-
вуз – высшее учебное заведение;
-
СУБД – система управления базами данных.
-
PDF created with pdfFactory Pro trial version www.pdffactory.com
1. Реляционная модель данных
1.1. Общая информация
Первоначально реляционная модель данных была предложена не как
проект какой-либо новой СУБД, а как теоретическая схема, основное по-
ложение которой таково: реляционная база данных представляет собой
совокупность отношений.
Информационными единицами в реляционных моделях являются домены, атрибуты, кортежи и отношения.
Строка отношения описывает свойства определенного объекта пред-метной области и может рассматриваться как формальная запись знаний о
свойствах этого объекта. Строки одного отношения описывают однород-
ные, в определенном смысле, объекты предметной области. Логические отношения могут мыслиться как таблица, строками которой являются за-
писи, описывающие конкретные объекты предметной области.
В отличие от традиционных таблиц порядок следования столбцов
таблицы не важен. Каждая колонка имеет уникальное имя. Каждая строка
отношения определена уникальным идентификатором. Количественные отношения определяются числом строк, степенные отношения – числом столбцов. Например, в базе данных «Поставщики товаров» (табл. 1), отношение степени − 4, количественное отношение − 3.
Таблица 1
База данных «Поставщики товаров», построенная по реляционной модели
Бар-код Товар Поставщик Адрес
3562747 Гладильный стол Фирбиматик Италия, Болонья, …
3268879 Утюг Реал Стар Австрия, Вена …
6789123 Пароманекен Бузетти Германия, Берлин …
Количество строк подвержено более динамичным изменениям, чем
количество столбцов − они удаляются, добавляются как администратором базы данных, так и пользователями. Поэтому определяющими для реляци-
онной базы данных являются степенные отношения, так как любое изме-
нение количества столбцов приводит к трансформации самой структуры
базы данных и создает совершенно новые отношения.
В реляционной модели каждому объекту предметной области сооветствует одно или несколько отношений. Если надо в явном виде зафиксировать связь между объектами, то она также выражается в виде отношения, в котором в качестве атрибутов присутствуют идентификаторы взаи-мосвязанных объектов. Таким образом, и объекты предметной области, и
связи между ними отражаются в реляционной модели посредством одина- ковых информационных конструкций. Это упрощает модель.
Система является полностью реляционной, если она:
− поддерживает структурные аспекты реляционной модели;
− выполняет соответствующие ей правила включения, корректиров-ки и исключения;
− обладает подъязыком данных таким же мощным, как алгебра от-ношений.
К недостаткам реляционной модели относятся длительность поиска и сложность сортировки.
1.2. Реляционная база данных
Реляционная база данных – это совокупность отношений, содержащих всю информацию, которая должна храниться в БД. Однако пользователи могут воспринимать такую базу данных как совокупность связанных таблиц.
Признаки реляционной базы данных
1. Каждая таблица состоит из однотипных строк и имеет уникальное
имя.
2. Строки имеют фиксированное число полей (столбцов) и значений
(множественные поля и повторяющиеся группы недопустимы).
Иначе говоря, в каждой позиции таблицы на пересечении строки и
столбца всегда имеется в точности одно значение или ничего.
3. Строки таблицы обязательно отличаются друг от друга хотя бы
единственным значением, что позволяет однозначно идентифици-
ровать любую строку такой таблицы.
4. Столбцам таблицы однозначно присваиваются имена, и в каждом
из них размещаются однородные значения данных (даты, фамилии,
целые числа или денежные суммы).
5. Полное информационное содержание базы данных представляется
в виде явных значений данных, и такой метод представления явля-
ется единственным.
6. При выполнении операций с таблицей ее строки и столбцы можно
обрабатывать в любом порядке безотносительно к их информаци-
онному содержанию. Этому способствует наличие имен таблиц и
их столбцов, а также возможность выделения любой их строки или
любого набора строк с указанными признаками (например, список
сотрудников с должностью «бухгалтер»).
1.3. Нормализация отношений (таблиц БД)
Определения
Кортеж определяет свойства объекта как совокупность реквизитов (атрибутов), причем должен быть реквизит с уникальными свойствами, характеризующий только данный объект. Например, номер студенческого билета или зачетной книжки (паспорта). Такой реквизит называют ключевым. Если отношение имеет более одного возможного ключа, тогда выделяют один ключ, называемый первичным. И наоборот, если отношение не имеет ни одного атрибута, который бы полностью определил объект (строку, кортеж) отношения, то определяется составной ключ, который схематически отображают двойной вертикальной чертой.
Функциональная зависимость
Поле В таблицы функционально зависит от поля А той же таблицы в
том и только в том случае, когда в любой заданный момент времени для каждого из различных значений поля А обязательно существует только одно из различных значений поля В. Отметим, что здесь допускается, что поля А и В могут быть составными.
Например, в таблице Оборудование (табл. 2) поля Наименование и
Тип оборудования функционально зависят от ключа Код_оборудования, а в таблице Поставщики (табл. 3) поле Страна функционально зависит от составного ключа (Поставщик, Город). Однако последняя зависимость не является функционально полной, так как Страна функционально зависит и от части ключа – поля Город.
Таблица 2
Таблица «Оборудование»
Код_оборудования Наименование Тип оборудования
01 001 Принтер Периферийное оборудование
01 002 Сканер Периферийное оборудование
02 001 Стол Офисная мебель
02 002 Кресло Офисная мебель
02 003 Полка Офисная мебель
Таблица 3
Таблица «Поставщики»
Поставщик Город Страна
ОАО «Рассвет» Омск Россия
ОАО «Рассвет» Киев Украина
ООО «Петрол» Омск Россия
Полная функциональная зависимость
Поле В находится в полной функциональной зависимости от состав-
ного поля А, если оно функционально зависит от А и не зависит функционально от любого подмножества поля А.
Многозначная зависимость
Поле А многозначно определяет поле В той же таблицы, если для ка-
ждого значения поля А существует хорошо определенное множество соответствующих значений В.
Таблица 4
Производство товаров
Тип товара Наименование товара Производитель
Продовольствие Картофель ЗАО «Продовольствие»
Продовольствие Картофель ЗАО «Аргомаш»
Продовольствие Свекла ЗАО «Продовольствие»
Продовольствие Свекла ЗАО «Аргомаш»
… … …
Для примера рассмотрим таблицу «Производство товаров» (табл. 4). В
ней есть многозначная зависимость «Тип товара – Наименование товара»:
различные товары могут относиться к одному виду товара. Есть и другая многозначная зависимость «Наименование товара – Производитель»: разные производители работают в рамках производства одного типа и наименования товара. Улучшить данный пример путем разбиения исходной таблицы на справочники «Товары» и «Производители» и связующую таблицу
«Товары–Производители».
Нормализация – процесс упорядочивания, структурирования пред-
ставления данных.
Разберемся, зачем нужна нормализация при построении реляционных баз данных.
Для примера, обратим внимание на следующее отношение:
Производитель Адрес Товары
Юнион Италия, Альбано… Гладильный стол
Фирбиматик Италия, Болонья… Пароманекен
Юнион Италия, Альбано… Машина сухой чистки
… … …
Недостатки этой таблицы сразу бросаются в глаза.
Первый – это избыточность, т.к. наименование фирмы Юнион и ее адрес повторяются, в связи с этим занимают лишнее место в системе хранения
Default Directory – указывается полный путь, где будут сохраняться
файлы «по умолчанию», а также путь, по которому буосуществляться
поиск запускаемых/открываемых файлов.
В программе это свойство можно настроить с помощью оператора cd
(например, cd «D:\Temp\prog1\»).
Help File – указывается полный путь и название help-файла, который
будет автоматически загружаться при нажатии на F1.
Рис. 3. Вкладка File Locations
Разберем назначение некоторых параметров на вкладке Forms (рис. 4).
Grid lines – выводит на форме в режиме редактирования сетку для облегчения выравнивания элементов формы.
Snap to grid – при включенной сетке на форме в режиме редактирования (Grid lines включен) каждый добавляемый элемент будет автоматически выравнивать свое местоположение и размер по узлам сетки.
Horizontal spacing – ширина квадрата сетки в пикселях.
Vertical spacing – высота квадрата сетки в пикселях.
Maximum desing area – максимальный размер формы (экранный размер), который можно создать в VFP, рекомендуется ставить 800х600.
2. Запуск и настройка СУБД MS VFP
Основные определения
Система – это совокупность взаимодействующих элементов, объединенных единством целей и образующих определенную целостность.
Элемент системы – часть системы, имеющая определенное функциональное назначение.
Управление – осуществление определенной последовательности
формирования и реализации таких функций, как целеполагание, прогнозирование, планирование, учет, контроль и т.д.
Управление есть функция системы, обеспечивающая либо сохране- ние совокупности ее основных свойств, либо ее развитие в направлении определенной цели.
База данных – набор данных, организованных определенным обра-
зом.
Реляционная база данных обеспечивает хранение данных в одной
или нескольких таблицах, связь между которыми осуществляется посред ством значений одного или нескольких совпадающих полей.
СУБД – это набор инструментов для обеспечения взаимодействия
пользователя с базами данных.
VFP 9.0 – новая версия СУБД Microsoft Visual FoxPro для Windows,
32-разрядное приложение, является объектно-ориентированным, визуально-программируемым языком, управляемым по событиям.
Для быстрой разработки несложных приложений можно воспользо-
ваться набором мастеров построения форм, отчетов и др. VFP управляет
реляционными базами данных. База данных в Microsoft Visual FoxPro –
это совокупность связанных таблиц. В VFP встроены функции обмена данными с другими приложениями Windows, поддерживается доступ к
наиболее популярным SQL-серверам баз данных, таким как: Microsoft SQL
Server, Oracle, Informix и др., используя стандарт ODBC.
Запрос (на выборку) – средство отбора данных из одной или нескольких таблиц при помощи определенного пользователем условия.
Запросы позволяют создавать виртуальные таблицы, которые состоят из вычисляемых полей или полей, взятых из других таблиц.
Форма – средство отображения данных на экране и управления ими.
Отчет – средство подготовки печатной формы документа на основании данных БД.
Класс – один из способов повышения производительности разработки приложений путем определения стандартных объектов создаваемого приложения и создания шаблонов для таких объектов. При разработке приложений для больших фирм классы часто используются для стандартизации пользовательского интерфейса. Можно определить класс форм, в котором
задан определенный цвет фона и стандартный набор кнопок для управления данными. Для полной стандартизации полезно иметь один или несколько пользовательских классов для каждого базового класса.
Например,
-
можно определить отдельный класс для поля ввода, которое доступно только для чтения, и класс для редактируемого поля ввода. Если в дальнейшем понадобится изменить стандарт, будет достаточно изменить пользовательские классы (шаблоны), на основе которых создаются объект приложения.
-
Проект приложения – основное средство объединения отдельных элементов приложения Visual FoxPro. Он выполняет следующие функции:
-
запоминает расположение каждого включенного в него элемента, что создает удобства при объединении базы данных, программ, экранных форм,
-
отчетов и упрощает управление приложением; сохраняет объектный код в Memo-полях, что уменьшает количество отдельных файлов .FXP; осущест-вляет поиск и собирает файлы, на которые есть ссылки в проекте; отслеживает текущие версии элементов; в случае необходимости перекомпилирует программы, обновляет экранные формы, меню и т.д.
Знакомство с главным окном Microsoft Visual FoxPro
Заголовок находится в верхней части главного окна. Строка меню содержит меню текущего окна.
Окно Command позволяет выполнять команды Microsoft Visual FoxPro сразу после ввода, устанавливать настройки на текущий сеанс ра-
боты в VFP. Вызывается комбинацией клавиш Ctrl + F2.
Строка состояния (в нижней части окна) показывает текущие параметры во время работы VFP.
Панели инструментов есть для каждого вида работы в СУБД, вызы-
ваются через пункт меню View | ToolBars.
Для быстрого выполнения стандартных операций используются ком-бинации горячих клавиш (табл. 5).
-
-
Таблица 5
Клавиатура в Visual FoxPro 6.0 (специальные и функциональные клавиши)
-
-
Сочетание Пункт меню Комментарий
-
клавиш
-
Ctrl+N File | New Создать новый файл
-
Ctrl+O File | Open Открыть существующий файл
-
Ctrl+S File | Save Сохранить текущий файл
-
Ctrl+P File | Print Печать
-
Ctrl+Z Edit | Undo Отменить действие
-
Ctrl+R Edit | Redo Повторить действие
-
Ctrl+X Edit | Cut Вырезать
-
Ctrl+C Edit | Copy Копировать
-
Ctrl+V Edit | Paste Вставить
-
Ctrl+A Edit | Select All Выделить все
-
Ctrl+F Edit | Find Найти в текущем файле
-
Ctrl+G Edit | Find Again Найти следующий
-
Ctrl+D Program | Do Запуск программы по выбору
-
Ctrl+E – Запуск текущего объекта
-
Ctrl+F2 Window | Command Сделать активным окно Com
-
Alt – Активизация меню
-
Ctrl+F5 Восстановить,Возвращает окно к первоначально-
-
му размеру
-
Ctrl+F7 Переместить Перемещает окно клавишами кур-
-
сора
-
Ctrl+F8 Размер Изменяет размер окна клавишами
-
курсора
-
Ctrl+F9 Свернуть Минимизирует окно до пиктограм-
-
мы
-
Ctrl+F10 Развернуть Максимизирует окно
-
Ctrl+F4 Закрыть Закрывает текущее окно
-
Ctrl+F6 Следующее Активизирует следующее окно
-
Alt+F4 Закрыть приложение Закрывает Visual FoxPro
-
-
Макросы клавиатуры
-
Макроопределения – это набор команд Microsoft Visual FoxPro, кото-
рые присвоены определенной клавише или комбинации. По умолчанию
макроопределений восемь, назначенные клавишам с F2 по F9. Можно из-
менить макрокоманду и сохранить ее «по умолчанию» либо создать свое
макроопределение и назначить своей комбинации клавиш. Можно назна-
чить до 250 макроопределений.
-
{SPACEBAR} – имитация нажатия пробела.
{ENTER} – имитация нажатия клавиши ENTER.
Макрос удобно использовать для открытия вашего приложения, с ко-
торым вы постоянно работаете, можно включить выполнение различных
установок (очистить экран, просмотреть переменные среды и т.д.).
Основные определения
Атрибуты (на различных уровнях представления данных встречаются
понятия: поле, реквизит, столбец таблицы) – это элементарные инфор-
мационные единицы, характеристики сущности.
Домен — это множество значений. Примерами доменов могут служить множество целых чисел, множество названий городов, множество
почтовых адресов, фамилий студентов и т.д.
Запись – аналог строки в таблице. Запись является стандартным бло-
ком для хранения данных в таблице, выборке данных в запросе, форме,
выводимой на экран и т.д.
Ключевое поле – поле, значение которого служит для однозначного определения записи в таблице. Ключевое поле помогает наиболее эффек-
тивно организовать поиск, хранение и объединение данных из разных таб-
лиц.
Кортеж – совокупность атрибутов, образующих строку (запись). Кор-
теж определяет свойства объекта как совокупность реквизитов (атрибу-
тов), причем должен быть реквизит с уникальными свойствами, характери-
зующий только данный объект. Например, номер студенческого билета
или зачетной книжки (паспорта). Такой реквизит называют ключевым.
Если отношение имеет более одного возможного ключа, тогда выде-ляют один ключ, называемый первичным. И наоборот, если отношение
не имеет ни одного атрибута, который бы полностью определил объект (строку, кортеж) отношения, то определяется составной ключ, который
схематически отображают двойной вертикальной чертой. Например, в от-
ношении нет атрибута, который бы однозначно определял кортеж, так как
экзамены по одному учебному курсу (физика) могут сдаваться более чем в
одном семестре.
Мощностью отношения называется число кортежей отношения (количество строк или записей).
Нормализация – процесс упорядочивания, структурирования пред-ставления данных.
Отношение (таблица) – это совокупность записей, называемых стро ками.
Предметная область – это часть реального мира, данные о которой
мы хотим отразить в базе данных.
Степень отношения – число входящих в него атрибутов (количество столбцов).
Сущность – объекты предметной области. Примеры: служащий, студент, накладная, путевой лист и т.п.
Таблица – основной объект реляционной БД, хранилище информации. Состоит из полей (столбцов) и записей (строк).
Связь – это ассоциация, установленная между несколькими сущностями (или таблицами). Формируется путем создания однотипных индексных полей в паре таблиц. Существуют связи 1:1, 1: М.
Связь «один к одному» (обозначается 1:1). Это означает, что в такой
связи сущности с одной ролью всегда соответствует не более одной сущ-
ности с другой ролью.
Связь «один ко многим» (1:М). В данном случае сущности с одной
ролью может соответствовать любое число сущностей с другой ролью.
Определение отношений между таблицами
В Visual FoxPro вы можете устанавливать постоянные отношения ме-
жду таблицами, которые будут поддерживаться при создании форм, отчетов и запросов. При определении отношений одна из таблиц является родительской, другая — дочерней. Для родительской таблицы должен быть
определен первичный ключ или ключ-кандидат, а для дочерней — индекс
для связи с родительской таблицей. Например, при задании отношений
между таблицами Staff и Paies, для таблицы Staff определен первичный
ключ, таблица Paies содержит индекс, не являющийся уникальным, выра-
жение индекса которого состоит из кода сотрудника, по которому осуще-
ствляется связь между таблицами.
Для определения отношений между таблицами откройте окно конст-
руктора базы данных и выполните следующие действия:
1. Выберите родительскую таблицу. Установите курсор мыши на
первичный ключ таблицы Staff (на название индекса).
2. Нажмите кнопку мыши и, не отпуская ее, переместите курсор мы-
ши на индекс дочерней таблицы Paies, по которому устанавливает-
ся связь (к названию индекса).
3. Отпустите кнопку мыши. В окне конструктора базы данных между
таблицами появилась линия, отображающая созданное отношение
между таблицами.
Обратите внимание, что при установке курсора мыши на первичный
ключ таблицы и нажатии кнопки мыши, вместо курсора образуется копия ключа, которую вы и переносите на индекс дочерней таблицы.
Работа с таблицами в режиме ввода и редактирования
данных. Модификация структур таблиц
Модификация структуры таблицы
Если описали всю структуру таблицы, не сделав при этом ни одной
ошибки, необходимо сохранить структуру созданной таблицы.
Однако вполне вероятно, что при задании структуры могли допустить
ошибки. Visual FoxPro предоставляет вам средства для исправления оши-
бок. К их числу относятся:
1. Изменение наименования поля и/или его типа.
2. Вставка пропущенного поля.
3. Удаление ошибочно введенного поля.
4. Изменение порядка следования полей в таблице.
5. Переопределение полей.
Для модификации структуры таблицы, входящей в базу данных, установите в окне проекта курсор на модифицируемую таблицу и нажмите
правую кнопку мыши. Из появившегося на экране контекстного меню выберите команду Modify. В качестве альтернативного способа вы можете
открыть окно конструктора базы данных и воспользоваться кнопкой Modify Table панели инструментов «Database Designer». В результате на экране появится окно диалога «Table Designer», содержащее структуру выбранной таблицы.
Для открытия окна конструктора базы данных и модификации таблиц
созданной ранее базы данных вы можете воспользоваться командой MOD-
IFY DATABASE, которая имеет следующий синтаксис:
MODIFY DATABASE [имяБазыДанных |?] [NOWAIT] [NOEDIT]
Эта команда может быть использована в программе или в командном
окне.
Изменение наименования поля и/или его типа
Предположим, что при задании имени поля или его типа была допу-
щена ошибка. При этом ошибка была обнаружена только после окончания
ввода поля. Установите курсор на наименование поля или тип, которые
требуется изменить. Для удаления в имени поля неправильно введенных
символов используйте клавишу Backspace или Del. После этого введите
правильное имя поля.
Изменение типа поля осуществляется аналогично его присвоению.
ГЛАВА Создание базы данных проекта
База данных в Visual FoxPro — это совокупность таблиц , отношений между таблицами, индексов, триггеров и хранимых процедур.
Создание базы данных в Visual FoxPro осуществляется в интерактивном ре-. жиме с помощью конструктора базы данных, который позволяет:
-
создавать и модифицировать таблицы, хранимые процедуры, представления данных;
-
добавлять созданные ранее таблицы;
-
определять для таблиц индексы;
-
устанавливать отношения между таблицами, которые будут поддерживаться при создании форм и отчетов.
Описание структуры базы хранится в словаре базы данных, представляющем собой совокупность системных файлов.
Создание базы данных в окне проекта
База данных является частью проекта, поэтому ее целесообразно создавать в окне проекта. Для создания базы данных выполните следующие действия:
-
Откройте созданный проект.
-
Выберите в верхней части окна конструктора проектов вкладку Data(Данные). Курсор по умолчанию устанавливается в начале вкладки назначении Databases (Базы данных).
-
Нажмите кнопку New (Новый) в окне проекта.
-
В открывшемся диалоговом окне New Database (Новая база данных) нажмите кнопку New Database (Новая база данных).
-
В поле ввода Enter database (Введите имя базы данных) появившегося на экране диалогового окна Create (Создать) задайте имя создаваемой базы данных, убедившись, что в поле Тип файла установлен тип сохраняемого файла Database (База данных), а в раскрывающемся списке Папка правильно указана папка, в которой вы хотите расположить создаваемую базу данных.
-
Для сохранения созданной базы данных нажмите кнопку Сохранить. После этого откроется пустое окно базы данных Database Designer(Конструктор базы данных) (рис. 4.1). Используя панель инструментов Designer (Конструктор базы данных), команды меню Database(База данных) и контекстное меню, в окне конструктора базы данных вы можете создавать новые таблицы, модифицировать существующие, создавать для них индексы, устанавливать отношения между таблицами.
Замечание
Если панель инструментов Database Designer (Конструктор базы данных) невидна на экране, в меню View (Вид) выберите команду Toolbars (Панели инструментов). Открывается диалоговое окно Toolbars (Панель инструментов), в котором установите флажок Database Designer (Конструктор базы данных).
Для создания в конструкторе базы данных новых таблиц и модификации существующих вы можете использовать:
-
команды меню Database (База данных) (табл. 4.1);
-
команды контекстного меню, появляющегося при нажатии правой кнопки мыши в окне конструктора базы данных;
-
панель инструментов Database Designer (Конструктор базы данных).
Таблица 4.1. Назначение команд меню Database
Команда |
Назначение |
New Table (Новая таблица) |
Создает новую таблицу |
Add Table (Добавить таблицу) |
Добавляет созданную таблицу в базу данных |
New Remote View (Новое удаленное представление) |
Создает удаленное представление данных |
New Local View (Новое локальное представление) |
Создает локальное представление данных |
Modify (Модифицировать) |
Открывает таблицу в конструкторе таблицы |
Browse (Обзор таблицы) |
Показывает содержимое таблицы в режиме Browse |
Remove (Удалить) |
Удаляет таблицу из базы данных |
Find Object (Найти объект) |
Находит указанный вами объект в окне конструктора базы данных |
Rebuild Table Indexes (Перестроить индексы) |
Перестраивает индексы |
Remove Deleted Records (Удалить помеченные записи) |
Физически удаляет из таблицы помеченные для удаления записи |
Edit Relationship (Редактирование отношения) |
Редактирует отношения между таблицами |
Edit Referential Integrity (Редактирование условия целостности) |
Определяет условия целостности данных |
Edit Stored Procedures (Редактирование хранимых процедур) |
Открывает окно редактирования хранимой процедуры |
Connections (Соединения) |
Выводит на экран диалоговое окно Connections(Соединения), в котором вы можете создавать или модифицировать соединения с удаленными данными |
Arrange (Упорядочить) |
Упорядочивает объекты по имени или типу и выравнивает их по горизонтали или вертикали |
Refresh (Обновить) |
Обновляет информацию в окне конструктора базы данных |
Properties (Свойства) |
Выводит на экран диалоговое окно Database Properties (Свойства базы данных) |
Clean Up Database (Очистка базы данных) |
Очищает базу данных от помеченных на удаление объектов |
Для работы в окне конструктора базы данных можно использовать контекстное меню, содержащее наиболее часто используемые команды из меню Database (База данных), команду вызова справочной системы, а также команды Expand All (Развернуть все) и Collapse All (Свернуть все), предназначенные, соответственно, для раскрытия и свертывания уровней вложенности объектов в окне конструктора базы данных.
Панель инструментов Database Designer (Конструктор базы данных) содержит кнопки для выполнения наиболее часто используемых операций над базой данных. Вид панели инструментов приведен на рис. 4.3, а описание кнопок панели инструментов — в табл. 4.2.
Рис. 4.3. Панель инструментов Database Designer
Таблица 4.2. Назначение кнопок панели инструментов Database Designer
Название |
Назначение |
New Table (Новая таблица) |
Создает новую таблицу |
Add Table (Добавить таблицу) |
Добавляет ранее созданную таблицу в базу данных |
Remove Table (Удалить таблицу) |
Удаляет таблицу из базы данных |
New Remote View (Новое удаленное представление) |
Создает удаленное представление данных |
New Local View (Новое локальное представление) |
Создает локальное представление данных |
Modify Table (Модифицировать таблицу) |
Открывает таблицу в конструкторе таблицы |
Browse Table (Обзор таблицы) |
Показывает содержимое таблицы в режиме Browse |
Edit Stored Procedures (Редактирование хранимых процедур) |
Открывает окно для редактирования хранимых процедур |
Connections (Соединения) |
Создает связь с удаленными данными |
Создание базы данных вне проекта
Visual FoxPro позволяет создавать базу данных вне проекта. Для этого воспользуйтесь одним из предложенных ниже способов.
-
Выберите в меню File (Файл) команду New (Новый). В открывшемся диалоговом окне New (Новый) выберите опцию Database (База данных),а затем нажмите кнопку New File (Новый файл). На экране откроется диалоговое окно Create (Создать), в поле Enter (Введите) которого задайте имя создаваемой базы данных и нажмите кнопку Сохранить. Созданный файл получит расширение DBC.
-
Введите в командном окне Command (Команда) команду CREATEDATABASE, имеющую следующий синтаксис:
CREATE DATABASE [имяБазыДанных | ?]
В том случае, если вы не укажете имя создаваемой базы данных имя Базы-данных, на экране откроется диалоговое окно Create (Создать), позволяющее его ввести.
Замечание
Базу данных, созданную вне проекта, можно использовать в разных проектах.