«Е.И. МОЛЧАНОВА ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ В ЭКОНОМИКЕ Электронный курс лекций Иркутск 2012 УДК 004:338 ББК 65.39 М 76 Рецензенты Н.И. Абасова, к.т.н., доцент; Н.П. Деканова, д.т.н., профессор Молчанова Е.И. ...»
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА
ИРКУТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПУТЕЙ СООБЩЕНИЯ
Е.И. МОЛЧАНОВА
ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
В ЭКОНОМИКЕ
Электронный курс лекций
Иркутск 2012
УДК 004:338
ББК 65.39
М 76
Рецензенты
Н.И. Абасова, к.т.н., доцент;
Н.П. Деканова, д.т.н., профессор Молчанова Е.И.
Информационные технологии в экономике : электронный М 76 курс лекций. – Иркутск : ИрГУПС, 2012.
Электронный курс лекций предназначен для использования студентами в рамках федерального государственного образовательного стандарта высшего профессионального образования по направлению подготовки 080100 – Экономика.
Рассмотрены технологии доступа к данным в реляционных СУБД на примере Visual FoxPro, элементы объектно-ориентированного программирования в Visual FoxPro, вопросы использования компьютерных сетей.
Теоретический материал сопровождается большим количеством иллюстраций и примеров. Для проверки усвоения материала предлагаются контрольные вопросы и задания для компьютерного тестирования.
УДК 004: ББК 65. © Молчанова Е.И., © Иркутский государственный университет путей сообщения, Оглавление Базы данных и информационные системы 1.
Концепции доступа к данным 2.
Доступ к удаленным данным 3.
Типы блокировок в Visual FoxPro 4.
Элементы объектно-ориентированного программирования в Visual FoxPro 5.
Использование фундаментальных классов в Visual FoxPro 6.
Компьютерные сети 7.
Литература Учебники (библиотека) Информатика для юристов и экономистов. Учебник 1.
для вузов / Под ред. Симоновича С.В. - СПб.: ПИТЕР, 2001.
Экономическая информатика. Учебник / Под ред.
2.
Конюховского П.В., Колесова Д.Н. - СПб.: ПИТЕР, 2000.
3. Омельченко Л.Н. Самоучитель Visual FoxPro 7.0.
Методические указания (библиотека) По курсу «ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ В ЭКОНОМИКЕ» часть 1, часть Учебное пособие (библиотека) По СУБД Visual FoxPro Базы данных и информационные системы План лекции 1. Компоненты информационных систем 2. Архитектура баз данных 3. Архитектура информационной системы 4. Модели данных 5. Проблемы проектирования реляционных БД Компоненты информационных систем Информационная система - это механизм для хранения, поиска, извлечения и модификации информации.
Современные информационные системы базируются на компьютерных технологиях.
Анализ современного состояния рынка ИС показывает устойчивую тенденцию роста спроса на информационные системы организационного управления. Причем спрос продолжает расти именно на интегрированные системы управления. Автоматизация отдельной функции, например, бухгалтерского учета или сбыта готовой продукции, считается уже пройденным этапом для многих предприятий.
Ниже приведен перечень наиболее популярных в настоящее время программных продуктов для реализации ИС организационного управления различных классов.
Классификация рынка информационных систем системы интегрированные интегрированные интегрированн •Инотек •Инфософт •СуперRobertson & Менеджер •ТурбоMFG-Pro E-Business Бухгалтер •Инфо- •БОССSyteLine Бухгалтер Корпорация Существует классификация ИС в зависимости от уровня управления, на котором система используется:
Информационные системы оперативного уровня.
Информационные системы специалистов.
Информационные системы уровня менеджмента.
Стратегические информационные системы.
Информационная система оперативного уровня поддерживает исполнителей, обрабатывая данные о сделках и событиях (счета, накладные, зарплата, кредиты, поток сырья и материалов).
Информационная система оперативного уровня является связующим звеном между фирмой и внешней средой.
Задачи, цели, источники информации и алгоритмы обработки на оперативном уровне заранее определены и в высокой степени структурированы.
Информационные системы специалистов - поддерживают работу с данными и знаниями, повышают продуктивность и производительность работы инженеров и проектировщиков.
Задача подобных информационных систем - интеграция новых сведений в организацию и помощь в обработке бумажных документов.
Информационные системы уровня менеджмента - используются работниками среднего управленческого звена для мониторинга, контроля, принятия решений и администрирования.
Основные функции этих информационных систем:
•сравнение текущих показателей с прошлыми;
•составление периодических отчетов за определенное время, а не выдача отчетов по текущим событиям, как на оперативном уровне;
•обеспечение доступа к архивной информации и т.д.
Стратегическая информационная система - компьютерная информационная система, обеспечивающая поддержку принятия решений по реализации стратегических перспективных целей развития организации.
Информационные системы стратегического уровня помогают высшему звену управленцев решать неструктурированные задачи, осуществлять долгосрочное планирование.
Основная задача - сравнение происходящих во внешнем окружении изменений с существующим потенциалом фирм, создать общую среду компьютерной телекоммуникационной поддержки решений в неожиданно возникающих ситуациях.
Используя самые совершенные программы, эти системы способны в любой момент предоставить информацию из Информационная система включает: вычислительную систему, одну или несколько баз данных (БД), систему управления базами данных (СУБД) и набор прикладных программ, а также обслуживающий персонал.
структурированной информации, предназначенной для совместного употребления несколькими пользователями.
Структурированность - отдельные элементы данных связаны между собой логическими связями.
Именно понятия "структурированность" и "для совместного использования" отличают базу данных от простых файлов данных.
Классический пример информационной системы - система Основная ценность базы данных заключается в самих данных, в возможности быстрого поиска и модификации этих данных.
Система управления базами данных (СУБД) - программные средства, позволяющие пользователям работать с БД.
С помощью СУБД можно создавать и модифицировать БД и разрабатывать пользовательские приложения.
Пользовательские приложения - это прикладные программы, которые служат для автоматизации обработки данных БД, вычислений и формирования выходных документов.
Приложения могут создаваться как в среде СУБД, так и вне СУБД, с помощью систем программирования, например, DELPHI или С++Builder.
Архитектура баз данных Архитектура- описание сложной системы, состоящей из множества элементов, как единого целого.
В вычислительной технике архитектура определяет состав, назначение, логическую организацию и порядок взаимодействия всех аппаратных и программных средств, объединенных в единую вычислительную систему.
Иными словами, архитектура описывает то, как БД представляется пользователю.
Существует три основных варианта : хост - архитектура;
файл – серверная архитектура и архитектура клиент - сервер.
Хост – архитектура появилась в 70-х годах. Вся обработка данных осуществляется на хост -компьютере. Пользователи связываются с хостом при помощи терминала или персонального компьютера (ПК).
Система резервирования авиабилетов.
Многие хост-системы за последние годы преобразованы в файл – серверные или клиент – серверные.
Файл – серверная архитектура появилась в 80-х годах.
Вся работа с БД осуществляется на пользовательских компьютерах, но данные хранятся на сервере локальной сети.
Все настольные БД возникли на основе этой архитектуры, например, Visual Fox Pro, dBase, Access, Paradox, MS Jet.
БД здесь просто совокупность файлов.
Архитектура клиент – сервер появилась в начале 90-х годов.
Процесс обработки БД разделен: одна его часть выполняется на ПК клиента, а другая – на сервере. На сервере, выполняются действия по поддержанию и защите БД. На компьютере пользователя выполняются функции поддержки «бизнес – правил», т.е. проверки данных на допустимость.
Такой подход позволяет достичь наибольшей производительности.
Приложениями архитектуры клиент - сервер являются программы Oracle, Sybase, SQL- Server, Informix и MS SQL – Server. Эти приложения называют БД SQL, т.к. язык работы с Преимущества - высокая производительность, безопасность и защита информации.
Недостаток – необходимость администрирования и высокая стоимость.
Архитектура информационной системы С точки зрения программно-аппаратной реализации можно выделить ряд типовых архитектур ИС.
Традиционные архитектурные решения основаны на использовании выделенных файл-серверов или серверов баз данных. Существуют также варианты архитектур корпоративных информационных систем, базирующихся на технологии Internet (Intranet-приложения).
Следующая разновидность архитектуры информационной системы основывается на концепции "хранилища данных" (DataWarehouse) интегрированной информационной среды, включающей разнородные информационные ресурсы. И, наконец, для построения глобальных распределенных информационных приложений используется архитектура интеграции информационновычислительных компонентов на основе объектноориентированного подхода.
В настоящее время наиболее распространенной является архитектура клиент-сервер. Она предполагает наличие компьютерной сети и включает корпоративную БД и (многопользовательская) размещается на компьютере сервере. Персональные БД размещаются на компьютерах сотрудников.
Компьютер-сервер осуществляет централизованное хранение и обслуживание корпоративной информации. Компьютерыклиенты обеспечивают коллективный доступ к корпоративной БД. На компьютере-клиенте может также находиться своя персональная БД.
Корпоративные, многопользовательские БД создаются СУБД серверами, например, Microsoft SQL Server Oracle Server, Informix.
Персональные БД создаются СУБД, такими, как Access, Visual FoxPro фирмы Microsoft или Paradox фирмы Borland.
В настоящее время границы между СУБД серверными и клиентскими стираются - рынки сбыта.
Модели данных Модель данных - логическая структура данных БД, поддерживаемая СУБД.
К числу важнейших относятся следующие:
иерархическая, сетевая, реляционная, объектноориентированная.
В иерархической модели данные представляются в виде древовидной (иерархической) структуры. Она удобна для работы с иерархически упорядоченной информацией.
Например, база данных для описания тематических сборников по некоторому предмету (рис.1).
Здесь скорость поиска данных высока, если структура запроса совпадает со структурой данных, например, просмотреть статьи, опубликованные в сборнике. Трудно осуществить поиск информации со сложными логическими связями. Например, в скольких сборниках данный автор опубликовал статьи. Еще один недостаток - сложность внесения изменений (жесткость).
Элемент данных Элемент данных Элемент данных Сетевая модель - является развитием иерархической.
Главное отличие, что к каждому элементу может идти связь не от одного элемента ("родителя"), а от нескольких.
Например, генеалогическое дерево (рис.2), построенное только по мужской линии, является древовидной иерархической структурой, у каждого человека 1 родитель. Если включить обоих родителей, то это будет уже не дерево, а сеть (рис.3).
Недостаток модели - ее жесткость.
Рис.2. Иерархическая модель данных Рис.3. Фрагмент сетевой модели данных Реляционная модель. Для реляционной СУБД выбрано представление данных на основе математического понятия отношение. Оно близко к понятию двумерной таблицы. Поанглийски, отношение это relation.
Реляционная база данных - это набор таблиц. Связь между таблицами строим динамически, в процессе поиска информации, через сравнение значений полей в разных таблицах.
Название издательства Адрес Сборник Название издательства Основным достоинством реляционных СУБД является нефункциональность языков запроса. То есть мы формулируем не то, как нам надо найти данные, а что нам надо найти. Еще одним достоинством реляционных СУБД является высокая стандартизованность. Практически все производители СУБД поддерживают стандарты языка SQL.
Реляционная БД – совокупность связанных таблиц.
БД созданные разными СУБД имеют разный формат, т.е. способ представления данных.
Файл БД Access *.mdb.
Файл БД VisualFoxPro - *.dbc, *.dbt, *dcx.
Файл БД хранит информацию о таблицах и связях между ними.
Фрагмент файл БД Access в окне текстового редактора Фрагмент файлов БД VFP в окне текстового редактора В каждой таблице содержится информация о объектах одного типа.
Таблица состоит из строк (записей) и столбцов (атрибутов, полей) и имеет уникальное имя в базе данных.
Строка хранит информацию об отдельном объекте, а столбец- представляет его отдельную характеристику (атрибут).
Создание таблицы – создание структуры таблицы.
Структура таблицы - информация о числе записей, количестве и наименовании столбцов, типе данных и т.д. В VFP она сохраняется в нулевой строке таблицы (строке заголовка).
Типы данных полей Visual FoxPro Текстовый Character Числовой Integer, Numeric, Денежный Currency Логический Logical Двоичное поле General Текстовое поле Memo Пример таблицы Клиенты (Customer) Идентификатор Наименование Адрес клиента клиента фирмы клиента Пример таблицы Заказы (Order) Пример таблицы пункты заказа OrderLines Для реальной работы с объектами, описанными в таблице, нужно уметь их различать.
Ключ - это набор атрибутов (столбцов), которые позволяют идентифицировать запись внутри таблицы (отношения).
Ключ может быть простым и составным.
Простой ключ состоит из одного атрибута.
(таблицы Клиенты (Customer) и Заказы (Order)).
Составной ключ состоит из двух или более атрибутов. (таблица Пункты заказа (OrderLines)).
user:
user:
C_id ввCustomer C_id Customer Ключ отношения, однозначно идентифицирующий запись, называется первичным (значения не повторяются -Primary ).
Вторичным ключом называется атрибут (или группа атрибутов, значение которых может повторяться для нескольких записей -Regular). Вторичные ключи используются в операциях поиска записей. user: С_id Order Ключи таблиц создают с помощью индексов.
Назначение Количество полей Составной индекс – список из индексное выражение формируется из имен столбцов, индексное выражение формируется из имен столбцов, соединенных знаками арифметических операций.
соединенных знаками арифметических операций.
Индекс хранит упорядоченные по возрастанию (Ascending) или убыванию (Descending) значения индексных столбцов или выражений и ссылку на связанную с ним запись.
Индексов может быть несколько, в зависимости от того, какую информацию необходимо часто извлекать из таблиц Primary (Первичный) Candidate (Потенциальный) первичного ключа, но таблица не поиска данных.
Regular (Обычный) Unique (Уникальный) Отношения (связи) между таблицами БД обычно включает несколько таблиц, между которыми установлены постоянные отношения.
Такие таблицы называются связанными.
Из двух связанных таблиц одна является главной, а другая — подчиненной. Главную таблицу называют родительской (первичной), а подчиненную — дочерней (вторичной).
Между таблицами существует четыре типа отношений:
один-к-одному - каждая запись в родительской таблице соответствует только одной записи в дочерней.
ключ Primary или Candidate ключ Primary или Candidate один один-ко-многим - каждой записи в родительской таблице соответствует несколько записи в дочерней.
ключ Primary или Candidate ключ Regular один многие-к-одному – отношение один-ко-многим, рассматриваемое с другой точки зрения.
многие-ко-многим - для записей каждой из таблиц имеется несколько соответствующих записей в другой таблице.
Данный тип отношений может потребовать внесения изменений в структуру базы данных. С этой целью Связующая таблица, создается для преобразования отношений типа многие-ко-многим между двумя таблицами в отношения типа один-ко-многим. Связующая таблица содержит первичные ключи обеих таблиц, связанных отношением многие-ко-многим.
При создании БД предпочтительнее использовать первые два типа отношений.
Создание связей Связь таблиц устанавливается посредством совпадающих значений индексных выражений.
В родительской таблице из числа Candidate Key необходимо выбрать один Primary Key (первичный ключ), чтобы на него ссылались другие таблицы для получения информации из любой строки данной таблицы.
Когда этот ключ используется во второй (дочерней) таблице для получения ссылки на строки первой (родительской) таблицы, во второй таблице он называется Foreign Key (внешний ключ).
Поэтому, в родительской и в дочерней таблицах должны быть созданы индексы, использующие одинаковые индексные выражения.
Необходимо следить за совпадением в обеих таблицах типа данных и ширины ключевых полей!
В таблицах Клиенты (Customer) и Заказы (Order) совпадающим является поле C_id. Главная – Клиенты – индекс Primary, дочерняя Заказы – индекс Regular (см.
таблицы). В таблицах Заказы (Order) и Пункты заказа (OrderLines) совпадающим является поле Or_id. Главная Заказы– индекс Primary, дочерняя Пункты заказа – индекс Regular (см. таблицы).
Окно конструктора БД Целостность данных Целостность – состояние данных, при котором они сохраняют свое информационное содержание в условиях различных воздействий. Например, при изменении значений ключевых полей.
Значение ключевого поля в родительской таблице можно:
•Update (Изменить);
• Delete (Удалить);
• Insert (Вставить).
Автоматически можно выполнить:
• Cascade (каскадные изменения) - изменение значения ключа (или соответственно каскадное удаление) всех записей из дочерней таблицы, связанных с изменяемой (или удаляемой) записью.
• Restrict (запрет изменений) нe позволяет изменять ключевое поле (или удалять записи) в родительской таблице, если в дочерней таблице имеется хотя бы одна запись, содержащая ссылку на изменяемую (удаляемую) запись.
• Ignore (игнорировать) позволяет изменять (удалять) записи в родительской таблице независимо от существования связанных записей в дочерней таблице.
Целостность данных при этом не поддерживается.
Проблемы проектирования реляционных БД Проектирование БД осуществляется на физическом и логическом уровнях.
Решение проблемы на физическом уровне во многом автоматизировано и скрыто от пользователя.
Логическое проектирование включает: определение числа и структуры таблиц, формирование запросов к БД, определение типов отчетных документов, создание форм и т.д.
На этапе проектирования БД осуществляется определение состава и структуры данных Структура данных предметной области может отображаться информационно-логической Информационно-логическая модель отображает данные предметной области в виде совокупности информационных объектов и связей между ними.
Эта модель представляет структуру данных, подлежащих хранению в базе данных.
Информационный объект (ИО) – информационное описание некоторой сущности предметной области – реального объекта, процесса, явления или события. Информационный объект образуется совокупностью логически связанных атрибутов, представляющих качественные и количественные Методы разработки баз данных Наиболее часто используют два метода проектирования БД.
Первый - ER-метод (Essence-Relationship), что означает сущность-связь. Он основан на построении ER-диаграмм.
Сущности (таблицы) отображаются прямоугольниками, список атрибутов (столбцов) помещают внутри них.
Первичный ключ помещают в верхнюю строку.
Связи представляют в виде направленных стрелок.
Второй– метод нормальных форм. Основан на выявлении функциональных зависимостей между атрибутами (столбцами) отношения (таблицы).
Для реализации ER- метода разработки модели данных На первом этапе - выделить информационные объекты, соответствующие требованиям нормализации На втором этапе – выделить одно - многозначные отношения между информационными объектами.
На третьем этапе каждый информационный объект отобразить реляционной таблицей и установить связи между таблицами. Результат- логическая Рассмотрим первый этап.
Для выделения информационных объектов из описания предметной области выделяют существительные и определяют их атрибуты (характеристики).
Информационный объект имеет множество реализаций (экземпляров). Студент, Преподаватель, Кафедра, Факультет… Экземпляр объекта образуется совокупностью конкретных значений атрибутов и однозначно определяется значением ключа.
Т.Е. атрибуты подразделяются на ключевые и описательные. Описательные атрибуты функционально зависят от ключа.
Зависеть – одновременно изменяться.
Функциональная полная зависимость описательного атрибута от ключа означает, что одному значению ключа соответствует только одно значение описательного (зависимого атрибута).
Совокупность атрибутов выделенного информационного объекта должна отвечать требованиям нормализации:
1. ИО содержит уникальный идентификатор (ключ).
2. Все описательные атрибуты взаимонезависимы.
3. Каждый описательный атрибут полностью зависит от ключа.
4. При составном ключе описательный атрибут зависит от всей совокупности атрибутов, образующих ключ.
5. Описательный атрибут не зависит от ключа транзитивно, т.е. через другой промежуточный реквизит.
Для достижения - расщепление совокупности реквизитов.
Нормализация Теоретически можно хранить информацию в одной большой таблице. Недостатки такой большой универсальной таблицы сводятся к следующему:
жесткость (обязательная модификация таблицы при изменении постановки задачи);
ненадежность (потенциальная противоречивость);
повышенный расход ресурсов;
громоздкость (избыточность).
Процесс упорядочивания, структурирования представления данных называется нормализацией. Цель нормализации – приведение в порядок функциональных зависимостей, т.е.
все столбцы должны зависеть от первичного ключа этой таблицы, но не должны зависеть друг от друга или от первичного ключа другой таблицы.
Процесс нормализации основан на идее функциональной зависимости значения столбцов от одного или более других столбцов.
Например, от номера зачетной книжки в таблице СТУДЕНТЫ зависит фамилия студента.
Теория нормализации оперирует с пятью нормальными формами таблиц. Каждая последующая нормальная форма должна удовлетворять требованиям предыдущей и некоторым дополнительным условиям. При практическом проектировании БД четвертая и пятая формы, как правило, не используются, в связи с чем, мы ограничимся рассмотрением первых трех нормальных форм.
Таблица в первой нормальной форме должна удовлетворять следующим требованиям:
все атрибуты (столбцы) таблицы должны быть простыми (не составными);
в таблице должен быть столбец, однозначно идентифицирующий строку. Таких столбцов может быть несколько - Candidate Key (возможный ключ). Из них выбирают один Primary Key (первичный ключ), чтобы на него ссылались другие таблицы для получения информации из любой строки данной таблицы. Когда Primary Key используется во второй таблице для получения ссылки на строки первой таблицы, во второй таблице он называется Foreign Key (внешний ключ) (см.14);
таблица не должна иметь повторяющихся строк (записей);
таблица не должна иметь повторяющихся групп столбцов;
строки и столбцы должны быть не упорядочены.
Первое условие достигается с помощью разбиения составных значений столбцов на простые.
Для удовлетворения второго условия каждая таблица должна иметь уникальный ключ.
Таблица во второй нормальной форме должна удовлетворять следующим требованиям:
иметь первую нормальную форму;
каждый не ключевой атрибут (столбец) зависит от ключа целиком, а не от его отдельных составляющих.
Зависимость здесь означает, что, зная один атрибут, можно определить соответствующее значение зависимого атрибута.
Если все ключи в таблице состоят только из одного атрибута, то отношение автоматически имеет вторую нормальную форму, В нашем примере с приказом о назначении стипендии. Для приведения таблиц ко второй нормальной форме выделяют атрибуты, зависящие только от одного из компонентов составного ключа, и помещают их в отдельную таблицу.
Составной ключ может включать комбинацию нескольких отдельных атрибутов (столбцов).
Таблица в третьей нормальной форме должна удовлетворять следующим требованиям:
иметь вторую нормальную форму;
неключевые атрибуты зависят только от ключа, а не от других неключевых столбцов.
Для приведения таблиц к третьей нормальной форме выделяют атрибуты, зависящие от других неключевых атрибутов, и помещают их в отдельную таблицу.
Замечание Следует избегать первичных ключей, имеющих собственный смысл. Лучшим типом первичного ключа является простой ключ, например, возрастающее простое число.
_ Рассмотрим классический пример нормализации таблиц, содержащих информацию о клиентах фирмы и сделанных ими заказах.
Предположим, для выполнения заказа необходимо оперировать следующими данными, представленными в табл.1.
Список возможных атрибутов таблиц с данными о заказах фирмы Проверим, удовлетворяет ли такая таблица требованиям первой нормальной формы.
Вариант разбиения значения составного атрибута Or_lines на Однако это приведет к повторению данных в столбцах и непроизводительному увеличению числа столбцов, особенно, если пунктов заказа может быть много. Лучше собрать значения Or_lines в один столбец и повторять строки для одного заказа, как Пример таблицы в первой нормальной форме Столбцы Data1, Data2, C_id, C_name, C_address зависят только от одной составляющей первичного ключа Or_id и не зависят от столбца Or_lines, что противоречит требованиям второй Чтобы выполнить требования второй нормальной формы, разделим исходную таблицу на две. Таблицу OrderLines (пункты заказа) табл.3.
Пример таблицы OrderLines во второй нормальной форме Вторая таблица - Order (заказы).
Пример таблицы Order во второй нормальной форме Таблица OrderLines отвечает требованиям третьей нормальной формы.
В таблице Order столбцы C_name и C_address зависят не только от первичного ключа Or_id, но и от неключевого атрибута C_id, что противоречит требованиям третьей нормальной формы.
Выделим таблицу Customer (клиенты) в отдельную таблицу.
Пример таблицы Customer в третьей нормальной форме Идентификатор Наименование фирмы Адрес клиента Пример таблицы Order в третьей нормальной форме Таблица OrderLines без дополнительных преобразований отвечает требованиям третьей В результате получим набор из трех таблиц, находящихся в третьей нормальной форме:
Customer(C_id[1], C_name, C_address) Order(Or_id, C_id, Data1, Data2) OrderLines(Or_id, Or_lines, Prod_id).
[1] Подчеркнуты атрибуты первичного ключа таблицы.
Графическое изображение объектов в ER-методе Этапы проектирования 1. Выделение сущностей и связей между ними.
2. Построение ER-диаграмм с учетом всех сущностей и их связей.
3. Формирование предварительного набора отношений (1:1, 1:М, М:1, М:М) между сущностями.
4. Добавление неключевых атрибутов в отношения.
5. Приведение предварительных отношений к третьей нормальной форме.
6. Пересмотр ER-диаграмм (при необходимости возврат к этапу 1).
Созданы специальные программные пакеты, основанные на использовании этого метода, например, ErWin/ERX фирмы Logic Works. Отметим, что нормализация здесь должна выполняться в ручную.
Недавно появился новый ORM-метод (Object Role Modeling), что означает объектно-ролевое моделирование. Например, программа Infomodeler компании Asymetryx. Версия ORM для ПК включает драйверы FoxPro. Метод гарантирует получение полностью нормальных таблиц и хорошо подходит для сложного моделирования, когда заранее неизвестно, как должны выглядеть таблицы.
Подобные программные пакеты носят общее название CASE-средств.
CASE (Computer Aided Software Engineering) – разработка программного обеспечения с помощью компьютера – автоматизация разработки информационных систем.
Пример БД для тестирования студентов DeZign for Databases (version 3.2.1) Сущности и связи Сущности и ключи Сущности, ключи и неключевые атрибуты На представленных Er-диаграммах имеются два типа связей (отношений):
Identifying relationship -выделяющие отношения, отношения, в которых первичный ключ родительской таблицы становится частью первичного ключа дочерней.
Non-identifying - не-выделяющие отношения, в --которых первичный ключ родительской таблицы становится частью не-ключевой области дочерней.
На концах линий диаграммы используются четыре символа, определяющие тип отношения сущностей:
• | -один и только один (обязательное отношение);
• 0| - нуль или один;
• >| - один или более (обязательное отношение);
• >0 – нуль, один или более.
Концепции доступа к данным СУБД часто поддерживают два способа доступа к данным: навигационный и реляционный.
Эти способы не противопоставляют, а чередуют, выбирая тот, который больше подходит для решения конкретной задачи.
Навигация – перемещение указателя по записям.
Навигационная концепция Навигационный доступ основывается на физическом или логическом порядке данных, т.е. последовательном перемещении указателя на запись.
Чтобы найти какую-либо запись в середине файла таблицы, указатель должен последовательно переместиться от начала (первой записи) к концу (последней записи) или наоборот.
При навигационном доступе к данным используют термины «файл», «запись», «поле».
С таким доступом к данным мы имели дело при изучении процедурного языка Visual Fox Pro Реляционная концепция доступа к данным При реляционном доступе к данным используются термины «таблица» (файл), «строка» (запись), «столбец» (поле). Здесь операции выполняются сразу со всем набором данных, а не с его частью. Пользователю ничего не нужно знать о физическом расположении строк в таблице. При этом исключается необходимость сложной навигации по строкам. Таблицы должны быть нормализованы.
Доктор Кодд первоначально описал реляционную модель как область применения реляционной алгебры.
Алгебра - система определения множеств и операций над ними.
Множество - совокупность уникальных элементов, объединенных по какому-то признаку.
Оператор - символическая запись правила преобразования, выполняемого над одним или несколькими элементами множества.
Традиционная алгебра – Реляционная алгебра – Таблицы называют отношениями, поскольку каждая строка таблицы неявно связана со всеми остальными строками, разделяя с ними общую форму записи.
Запись называют кортежем, т.е. набором взаимосвязанных атрибутов (столбцов).
Связи между записями реализуются в виде ключей.
Информация о связях хранится отдельно от данных.
Традиционная алгебра – Реляционная алгебра – сложение, вычитание и выборка, проекция и т.д.
т.д.
Для реляционной модели представляют интерес только те операции, результатом которых является множество.
Есть восемь простейших операций: выборка, проекция, пересечение, сложение, вычитание, умножение, деление и переименование. На их основе строятся более сложные операции – объединения.
Результатом операции над таблицей будет временная таблица. Она не сохраняется в базе данных, но к ней можно обращаться в течении некоторого времени.
1. Выборка – выполняется над одной таблицей.
Результирующая таблица будет содержать все исходные столбцы, но не все строки – это фильтрация строк.
Таблица Manager (сотрудники) сотру дника Пусть нам требуется получить список менеджеров, не старше 30 лет (до 1975 г.р.).
результат операции «выборка»:
сотру дника 2. Проекция – возвращает все записи исходной таблицы, но не все столбцы. Это фильтрация столбцов.
Пусть нам требуется получить фамилии менеджеров.
Код Фамилия Дата Телефон Должность сотр удни Иванов 01.01.1 42-42-42 менеджер Петров 01.01.1 34-34-34 ст.менедже Иванов 01.01.1 31-31-31 менеджер Сидоров 02.02.1 33-33-33 менеджер В результирующей таблице повторяющиеся значения 3. Пересечение - выполняется над двумя таблицами идентичной структуры. В результирующую таблицу помещают только те записи, которые встречаются в обеих исходных таблицах.
Пусть наша фирма имеет два филиала. В БД обеих филиалов созданы таблицы Manager. Узнаем, фамилии менеджеров, сотрудничающих с обоими филиалами.
филиала Сидоров 4. Сложение - выполняется над двумя таблицами идентичной структуры. В результирующую таблицу помещают все записи исходных таблиц.
Например, можно получить полный список менеджеров, работающих в филиалах:
менеджер филиала 5. Вычитание – возвращает строки первой таблицы, отсутствующие во второй таблице.
Определим фамилии менеджеров, сотрудничающих только с первым филиалом фирмы.
филиала Черных Сидоров 6. Умножение – объединяет каждую строку первой таблицы с каждой строкой второй таблицы. Эту операцию еще называют декартовым произведением.
Количество строк результирующей таблицы равно произведению числа строк исходных таблиц. Столбцами результирующей таблицы будут все столбцы первой таблицы, за которыми следуют все столбцы второй таблицы.
Менеджеры Иванов и Сидоров сотрудничают с двумя филиалами:
7. Деление - выполняется над двумя таблицами, первая из которых состоит из двух столбцов, а вторая из одного.
Значения второй таблицы сравниваются со значениями первого столбца первой таблицы, и если обнаруживаются совпадения, то соответствующие значения второго столбца первой таблицы включаются в результирующую таблицу. Результирующая таблица состоит из одного столбца.
Сидоров Ангарск Сидоров Братск Черных Ангарск 8. Переименование – назначает столбцу другое имя. Такие имена называются псевдонимами.
Одним из классов более сложных операций являются объединения.
Объединение – частный случай произведения, при котором к таблице произведения применяются дополнительные критерии фильтрации (условия отбора).
Объединение может быть:
•Внутренним.
•Внешним (левое, правое, полное).
Inner join (Внутреннее объединение) содержат совпадающие значения в поле связи Left join (Объединение слева) Right join (Объединение справа) Full join (Полное объединение) Cartesian product (Декартово произведение) Стандартным языком реляционного доступа является SQL.
В командах языка SQL формулируется критерий обработки и способы преобразования информации. Это декларативный, непроцедурный язык.
SQL сам открывает нужные таблицы, открывает и создает нужные индексные файлы и определяет наиболее эффективные последовательности операций для получения результата.
Язык SQL использует небольшое количество команд. Каждая из них функционально эквивалентна нескольким обычным командам.
Практически все производители СУБД поддерживают стандарты языка SQL (Structured Query Language) - языка структурированных запросов. В составе SQL могут быть выделены следующие группы инструкций:
язык описания данных DDL - создание таблиц (изменение, удаление);
язык манипулирования данных DML - запросы (добавление, изменение, удаление);
язык управления транзакциями.
Транзакция - логически завершенная единица работы, создавшая одну или более элементарных операций обработки данных. Все действия должны выполняться полностью, либо полностью не выполняться.
Упрощенный синтаксис некоторых команд языка SQL Значения, используемые в качестве FieldType (тип данных), и указывается, необходимо ли при этом задавать nFieldWidth (ширину) и nPrecision (число десятичных знаков) Внешний ключ Связь с родительской таблицей Символ «;» обозначает продолжение команды на следующей строчке.
В окне команд Visual FoxPro команды языка SQL, состоящие из нескольких строк, выполняются как единое целое. В процессе их набора для перехода на следующую строку используются клавиши управления курсором.
Чтобы выполнить команду, ее выделяют с помощью курсора мыши, затем нажимают клавишу Enter.
Пример:
В таблицах Customer и Сharacteristics изменить тип индекса C_id на Primary:
ALTER TABLE customer ADD PRIMARY KEY C_id ;
TAG C_id ALTER TABLE characteristics ADD PRIMARY KEY ;
C_id TAG C_id Пример:
Добавить 2 различные записи в таблицу Characteristics (таблица должна быть открыта – Data Session).
INSERT INTO characteristics(C_id, firstname,secondname, VALUES ("01","Матюшин","Виктор","Петрович") INSERT INTO characteristics(C_id, firstname,secondname, lastname);
VALUES ("02",”Разгильдяев", “Данил","Петрович") Пример:
Изменить в таблице Customer название компании Гермес на Гермес-Союз.
UPDATE Customer;
SET C_Name= «Гермес-Союз»;
WHERE ALLTRIM(C_Name)= «Гермес»
Пример:
Удалить из таблицы Characteristics запись о клиенте Матюшине.
DELETE FROM Characteristics;
WHERE ALLTRIM(FirstName)= «Матюшин»
Пометка на удаление !!!
Пример:
Просмотреть значения всех идентификаторов клиентов (аналог использования цикла Scan).
SELECT C_id FROM Customer Пример:
Отобрать данные из таблиц Сustomer и Order и отсортировать их по полю Customer.C_name.
SELECT Customer.C_id, Customer.C_name, Order.Or_id;
FROM имя БД!Customer INNER JOIN имя БД!Order ;
ON Customer.C_id= Order.C_id;
ORDER BY Customer.C_name Доступ к удаленным данным 1. Интерфейс ODBC 2. Термин - источник данных 3. Типы источников данных 4. Создание источника данных 5. Удаленный доступ к данным в среде Visual FoxPro 6. Использование функций SQL Path Through Удаленные (внешние) данные - данные, хранящиеся в формате других приложений, например, серверов БД (Oracle, MS SQL Server).
В среде Visual FoxPro данные Access будут считаться удаленными, и наоборот.
Локальные данные - данные хранящиеся в формате обращающегося к ним приложения.
Для доступа из одной СУБД к данным различных внешних источников предназначен интерфейс стандарта ODBC (Open DataBase Connectivity – Открытый доступ к данным).
Через этот интерфейс приложения Microsoft могут получать доступ к различным БД, использующим SQL.
ODBC – это технология, встроенная в среду WINDOWS.
В ее основе лежит использование ODBC-процессора WINDOWS.
В ее функционировании можно выделить 3 уровня: ODBCпроцессор WINDOWS, драйвер ODBC для приемника данных и драйвер ODBC для источника данных.
Приложение Источник данных Драйвер источника Блок-схема ODBC-процесса Источник данных ODBC - это термин, используемый для ссылки на внешнюю БД. Он включает базу данных и информацию, необходимую для доступа к этой базе данных.
К источникам данных обращаются по именам.
Чтобы обратиться к любым ODBC-источникам данных, необходимо установить драйвер источника данных.
Для установки ODBC-драйвера используется 32-разрядный администратор ODBC (ODBC Data Sources) - Панель управления.
Установленные драйверы находятся в подкаталоге System в директории WINDOWS. Файлы драйверов ODBC имеют расширение.DLL, а их названия начинаются с ODBC.
Просмотреть установленные в ОС драйверы можно на вкладке Drivers в окне Администратора ODBC (ODBC Data Sources Administrator) Панели управления (рис.).
Окно Администратора ODBC Три типа источников данных (см. соответствующие вкладки окна ODBC Data Sources):
пользовательский источник данных User DSN.
Применяться только одним пользователем, работающим на данном компьютере;
системный источник данных System DSN. Предназначен для всех пользователей и системных служб на данном компьютере;
файловый источник данных File DSN. Обеспечивают доступ к БД многих пользователей разных компьютеров сети.
Описание источника сохраняется в файле с расширением.dsn.
Этот файл должен быть доступен для всех компьютеров сети.
Создание источника данных Рассмотрим пример создания пользовательского источника данных.
1. Проверить, установлен ли драйвер требуемого источника данных, например, Microsoft Access Driver или Microsoft Visual FoxPro Driver. (Панель управления - 32-разрядный администратор ODBC (ODBC Data Sources) - вкладке Drivers).
User DSN (пользовательский DSN). Первоначально на ней нет источников данных для Microsoft Access и Microsoft Visual FoxPro.
Нажать кнопку Add (Добавить). В окне Create New Data Source (Создание нового источника данных) выбрать драйвер, для которого создается источник, например, Microsoft Access Driver или Microsoft Visual FoxPro Driver (рис.) и нажать кнопку Готово.
Выбор драйвера источника данных К работе подключается мастер создания нового источника данных.
4. В окне мастера следует ввести:
Data Source Name - имя источника данных;
Description (описание) комментарий;
Кнопка Select - выбрать БД по умолчанию.
Окно выбора базы данных Кнопка Advanced - выбор режима регистрации при подключении к источнику данных. По умолчанию - регистрация по доверительному соединению, при котором пользователь, зарегистрировавшийся в сети, не проверяется дополнительно.
Можно задать идентификатор пользователя (Login Name) и пароль (Password), которые будут проверяться самим приложением Microsoft Access.
После завершения ввода в окне мастера создания нового источника данных следует нажать кнопку ОК (сл.10).
Просмотреть параметры созданного источника данных:
-Выбрать его имя в списке на вкладке User DSN окна администратора ODBC (ODBC Data Sources) ;
-Воспользоваться кнопкой Configure (настройка);
-Выполнить необходимые действия.
Удаленный доступ к данным в среде Visual FoxPro Доступ к удаленным данным реализуется с помощью удаленных представлений Remote View или сквозных команд SQL (Pass through).
Создание удаленных представлений Microsoft Visual FoxPro Представление - это вид запроса, используемый в среде Visual FoxPro.
Представления могут оперировать удаленными, Remote View, и локальными, Local View, данными.
Представления являются прекрасным способом доступа и редактирования данных, сохраняемых в нескольких связанных файлах.
Принципиальные отличия между представлениями и запросами заключаются в следующем:
представления можно использовать для обновления данных в исходных таблицах;
представления хранятся в самой БД, а не в отдельных.
Qpr- файлах, поэтому доступ к ним мы получаем, только при открытой БД;
возможность создания параметризованных представлений.
В окне диспетчера проекта представления Remote View и Local View находятся на вкладке Data (данные).
Представление Remote View можно создать на основе соединения Connections или источника данных Data Sources.
При нажатии кнопки New (новое) на вкладке Data (данные) открывается диалоговое окно Select Connection or Data Source, в котором с помощью группы переключателей Select можно выбрать один из вариантов: Connections или Data Sources.
Если выбран переключатель Data Sources, то в окне Available Data Sources можно выбрать источник данных, например, Teach, обеспечивающий доступ к заданной удаленной БД – Борей.mdb.
Для того чтобы для каждого удаленного представления не создавать отдельный источник данных, в Visual FoxPro предусмотрен механизм создания совместно используемых соединений.
Соединения также находятся на вкладке Data окна диспетчера проекта и входят в состав БД.
Соединение можно создать как обычный объект Visual FoxPro.
В окне Select Connection or Data Source (см.18) при установке переключателя в положение Connections можно выбрать существующее соединение или создать новое.
При нажатии кнопки New открывается окно Connection Designer.
Окно конструктора соединений Группа переключателей Specify data source (определение источника данных) задает метод определения соединения.
Установка переключателя Connection string требует ввода строки соединения, которую необходимо отправить серверу БД (см.20).
Если установить переключатель в положение Data source, userid, password, как показано на рис, нужно заполнить соответствующие поля ввода:
Data Source - имя источника данных ODBC (выбрать из списка);
Userid – идентификатор пользователя;
Password – пароль;
DataBase – имя базы данных.
Поля ввода Userid и Password заполняются, если предусмотрена парольная защита источника данных.
Группа переключателей Display ODBC login prompts задает, когда следует отображать приглашения ODBC на регистрацию пользователя.
Здесь возможны три варианта:
когда пользователь не определен;
никогда.
Опции раздела Data Processing (обработка данных) позволяют:
Asynchronous Execution – выбирать данные в фоновом режиме;
Display Warnings – отображать предупреждения;
Patch Processing – пакетную (одновременную) обработку данных;
Automatic Transactions – выполнять транзакции при модификации таблиц;
Packet Size – определять размер пакета пересылаемых данных.
Раздел Timeout Intervals (интервалы времени ожидания) задает следующие параметры:
Connection (sec) - время в сек, по истечении которого Visual FoxPro сообщит об ошибке времени ожидания соединения;
Idle (min) – время простоя, по истечении которого Visual FoxPro разорвет соединение;
Query (sec) – время, по истечении которого формируется общая ошибка времени ожидания;
Wait Time (ms) – время, выделенное для ожидания выполнения инструкций SQL.
Кнопка New Data Source позволяет создать новый источник данных для устанавливаемого соединения.
Кнопка Verify Connection предоставляет возможность проверить устанавливаемое соединение, если все параметры заданы верно, Visual FoxPro сгенерирует соответствующее сообщение:
После настройки параметров соединения, ему присваивают имя и сохраняют.
Описав способ доступа к удаленным данным перейдем к их использованию.
Окно конструктора Remote View подобно окну конструктора запросов.
Необходимые таблицы добавляются в окно конструктора представления.
Между таблицами устанавливаются временные связи по значениям совпадающих полей с помощью окна диалога Join Condition.
Представления формируются не из таблиц Visual FoxPro, поэтому установление постоянных отношений не возможно. В VFP6.0 Cформированное в окне Join Condition условие отбора записей таблиц будет помещено на вкладку Filter (фильтр), в VFP9.0 на вкладку Join.
Вкладка Fields – выбор полей результирующей таблицы.
Замечание Поле связи таблиц в списке выбранных полей должно встречаться один раз.
При выборе полей из списка Available fields второй таблицы на вкладке Fields следует отказаться от выбора поля связи.
Например, для таблиц Клиенты и Заказы поле Код клиента следует выбирать только из таблицы Клиенты, где оно Окно конструктора представлений имеет вкладку Update Criteria - критерий обновления данных.
По умолчанию Visual FoxPro запрещает обновление всех полей в представлении. Чтобы разрешить обновление каких-то полей из одной таблицы, необходимо выбрать эту таблицу с помощью комбинированного списка Table.
В число выбранных полей обязательно должны входить поля первичного или потенциального ключа таблиц.
Эти поля отмечаются щелчком мыши в первом столбце, имеющем символ ключа.
Столбец в списке FieldName, помеченный символом карандаша, позволяет выбрать поля, в которые можно вносить изменения.
Кнопка Update All (обновить все) позволяет выбрать все поля, кроме ключевых.
Для обновления ключевых полей предварительно необходимо определить в исходной БД правила ссылочной целостности данных.
SQL не выполняет обновление в исходных таблицах, если не будет установлен флажок опции Send SQL Updates (Отправлять обновления).
Группа опций SQL Where clause includes предназначена для задания условий фильтрации обновляемых записей (сл.29) Предложение Where инструкции SQL задает, что в поиске записей, которые следует обновить, используются:
Key fields only –только ключевые поля (наиболее мягкий вариант);
Key and update fields – ключевые и все обновляемые поля, даже, если они не были изменены;
Key and modified fields – ключи и модифицированные поля;
Key and timestamp – ключи и метка времени (обновления не принимаются, если были изменены ключи или метка времени).
Опции Update Using выбирают метод обновления исходных данных. SQL может сначала удалить исходные записи, затем вставить новые (SQL Delete then insert), либо просто обновит существующие (SQL Update) (сл.29).
Отметим, что некоторые серверы БД выполняют первые операции быстрее.
Как и при создании запроса, при заполнении вкладок окна конструктора представлений формируется инструкция SQL SELECT. Выполнить эту инструкцию можно из пункта Главного меню Query, команда Run Query. После сохранения представления его можно выполнить с помощью кнопки Browse.
Представления, в отличие от запросов, не только позволяют обновлять данные таблиц, но и сами являются обновляемыми, т.е. каждый раз выполняются заново с использованием последней версии данных.
Существует возможность во время выполнения представления задавать разные критерии отбора данных, например, сегодня мы хотим просмотреть заказы клиентов из Германии, завтра – из России и т.д.
Для обеспечения такой возможности на вкладке Filter (фильтр) в поле Example задаем не наименование страны, а специальный параметр представления, имя которого начинается со знака вопроса, например, ?country Чтобы создать не один параметр, а несколько, можно воспользоваться командой View Parameters пункта Главного меню Query.
В окне диалога View Parameters следует определить имя параметра и тип вводимых в него данных. После этого созданные параметры, как переменные, можно использовать в поле Example на вкладке Filter (фильтр) при формировании критерия отбора данных.
При выполнении представления последует запрос на ввод значения каждого из созданных параметров.
При следующем запуске представления можно ввести другое значение параметра country и, например, просмотреть заказы клиентов из России.
Результатом работы представления, как и запроса, является таблица, которая остается открытой до поступления специальной команды.
В связи с чем перед повторным запуском представления, чтобы увидеть изменения, внесенные в данные, необходимо закрыть его предыдущую версию.
Для этого можно использовать, например, окно сеанса данных Data Session Window, а в нем кнопку Close (закрыть).
Использование функций SQL Path Through В Visual FoxPro понятие SQL Path Through означает набор функций, позволяющих посылать команды непосредственно через ODBC. Этот способ доступа к удаленным данным имеет как свои преимущества, так и свои недостатки.
В зависимости от решаемой задачи следует отдавать предпочтение либо функциям SQL Path Through, либо созданию удаленных представлений. Отметим, что оба способа сопоставимы по быстродействию.
Преимущества использования функций SQL Path Through:
функции SQL Path Through могут передать источнику данных любую корректную команду, тогда как удаленное представление -только одну команду SQL SELECT;
функции SQL Path Through могут возвращать несколько результирующих наборов данных, а удаленное представление – один;
в отличие от удаленных представлений, функции SQL Path Through обеспечивают доступ к средствам обработки транзакций источника данных.
К недостаткам функции SQL Path Through можно отнести:
курсор результата изначально является немодифицируемым;
команды SQL необходимо писать в виде программного кода;
создаваемое соединение необходимо поддерживать программным способом.
Рассмотрим пример программы, выбирающей из таблицы СОТРУДНИКИ базы данных Борей.mdb поля Фамилия, Имя и Должность:
*команды и функции SQL Pass Through для доступа через *соединение Connect1 к таблице Сотрудники базы данных Борей.mdb local lnhandle lnhandle=SQLConnect("Connect1") ? lnhandle if lnhandle>- SQLExec(lnhandle, "SELECT Фамилия, ;
Имя, Должность From Сотрудники", "Results") SQLDisconnect(lnhandle) endif В приведенной программе использованы только три функции SQL Pass Through: SQLConnect( ), SQLExec( ) и SQLDisconect( ), всего их разработано 12.
Описание этих функций можно найти в справочном файле.
Методы разработки многопользовательских приложений Типы блокировок в Visual FoxPro В многопользовательской среде конфликты могут возникать в трех ситуациях:
при редактировании данных, когда два или более пользователя пытаются вносить изменения в одну таблицу;
при создании запросов или отчетов, когда один из пользователей запускает длительный запрос, изменения, внесенные другими пользователями, могут сделать результаты запроса недействительными;
при сопровождении БД (создание резервных копий, переиндексирование, изменение структуры и т.д.) кто-то может попытаться получить эксклюзивный (исключительный) доступ к таблицам.
При использовании современных сред визуального программирования, конкурирующие запросы могут поступать от нескольких процессов или экземпляров форм на одной и той же машине.
В Visual FoxPro поддерживается два типа блокировок.
Эксклюзивную блокировку Visual FoxPro обеспечивает только на уровне таблицы и БД, нельзя эксклюзивно блокировать строку или набор строк в таблице.
Если один пользователь установил эксклюзивную блокировку БД или таблицы, то другой пользователь при попытке доступа к этим объектам получит сообщение File access is denied.
Блокировка изменений в Visual FoxPro доступна на уровне строк, таблиц и БД.
Все блокировки, которые устанавливает Visual FoxPro, являются временными и существуют, пока блокировка не будет снята, или пока выполняется приложение. Они хранятся в операционной системе локальной сети (LAN), но не хранятся в БД или таблице.
Рассмотрим блокировки в порядке сужения сферы их действия.
Способы блокировки на уровне БД Эксклюзивная блокировка При открытии БД в Visual FoxPro всегда имеет определенный статус блокировки: либо эксклюзивная блокировка (exclusive), либо – общий доступ (shared).
Статус блокировки можно задать следующими способами:
командой:
SET EXCLUSIVE ON|OFF
OPEN DATABASE
например, OPEN DATABASE b0100231 EXCLUSIVE| SHARED Если параметр = EXCLUSIVE, БД открывается в монопольном режиме. Другие пользователи при попытке обращения будут получать ошибку В случае, когда = SHARED, БД открывается в режиме совместного пользования.Другие пользователи также получат к ней доступ.
Установка SET EXCLUSIVE по умолчанию определяется Tools - Options - вкладка Data - снять| установить флаг Open Exclusive.
Блокировка изменений В команде OPEN DATABASE параметр может иметь еще два значения:
Noupdate – блокировка изменений БД. Она функционирует в режиме Read Only (только для чтения), при этом в текущем сеансе данных запрещены операции добавления таблиц, установления связей и т.д.
Validate –проверка целостности таблиц при открытии БД.
Visual FoxPro проверяет, доступны ли на диске таблицы и индексы, на которые имеются ссылки в базе данных. Кроме того, Visual FoxPro проверяет существуют ли в этих таблицах и индексах указываемые поля и теги.
Использование этих ключевых слов не связано с действием установки Set exclusive On|Off, приоритет которой выше.
Режим открытия базы данных не влияет на режим открытия таблиц.
Блокировка БД действует до ее закрытия.
Способы блокировки на уровне таблиц На уровне таблиц также возможна эксклюзивная блокировка и блокировка изменений.
Блокировка изменений удобна при запуске запроса, чтобы данные в таблице не были изменены во время его выполнения.
Таблица не может быть заблокирована двумя пользователями одновременно. Если запрос выполняется при заблокированной таблице, другой запрос не сможет заблокировать ее, пока первый не снимет блокировку.
Эксклюзивная блокировка Эксклюзивное EXCLUSIVE или общее SHARED использование таблицы задается при ее открытии:
USE EXCLUSIVE | SHARED
Например, USE customer EXCLUSIVE Проверить, в каком режиме вами открыта таблица или БД, позволяет функция ISEXCLUSIVE().Она возвращает логическое значение "истина" (.T.) при монопольном использовании, в противном случае ложь" (.F.).
? ISEXCLUSIVE(, [N]) Параметр N равный 1 означает проверку статуса блокировки таблицы, 2 - БД. Если таблица находится в текущей рабочей области, этот параметр можно опустить.
Например:
? ISEXCLUSIVE(customer) Блокировка изменений Режим блокировки изменений включается с помощью функции FLOCK().
Если блокировка прошла успешно, то эта функция возвращает значение.T.
Если кто-либо другой уже заблокировал таблицу, функция FLOCK() возвратит значение.F.
В каждый момент времени установить блокировку таблицы может только один пользователь.
Установить блокировку изменений можно и в таблице, открытой в общем режиме.
Блокировка таблицы действует до ее закрытия или выполнения команды UNLOCK.
Определить, заблокировали ли вы изменения в таблице, можно по логическому значению, возвращаемому функцией ISFLOCKED().
Определить, заблокирована ли таблица другим пользователем, можно только по результату функции = FLOCK().
Способы блокировки строк Блокировка строк - это наиболее распространенная блокировка. На этом уровне разрешают конфликты редактирования. Блокировку записи может получить один пользователь, остальные будут ждать, пока он не закончит редактирование и не освободит запись.
Открытая блокировка строк Чтобы заблокировать больше одной строки, установка MULTILOCKS должна быть включена в положение ON:
SET MULTILOCKS ON| OFF
Блокировка текущей строки в текущей рабочей области осуществляется с помощью функции RLOCK().Проверить результат ее выполнения можно, просмотрев возвращаемое значение (.T. или.F.), например, в команде:
? RLOCK() Блокировка произвольной строки в произвольной рабочей области выполняется командой:
? RLOCK(“номер строки”, “имя таблицы”) Например, заблокируем 12 и 15 строки в таблице customer:
? RLOCK(“12, 15”, “customer”) Проверить, заблокирована ли конкретная строка, можно установив на нее указатель и выполнив функцию:
? ISRLOCKED() Снять блокировку строк позволяет команда UNLOCK, действие которой распространяется на всю таблицу, или закрытие таблицы, пользователем, установившим блокировку.
Скрытая блокировка строк На время обновления данных Visual FoxPro устанавливает блокировки автоматически, это так называемая скрытая блокировка строк. В связи с чем, в каждый момент времени только кто-то один может делать записи в общие данные.
Скрытая блокировка строк устанавливается на время работы команд UPDATE, INSERT INTO, GATHER MEMVAR, REPLACE, функции TABLEUPDATE() и при редактировании таблицы с помощью формы или в режиме BROWSE.
Блокировка строки заголовка Каждая таблица Visual FoxPro, кроме строк данных, содержит еще строку заголовка, в которой сохраняется структура таблицы. Строка заголовка имеет номер, равный нулю, и включает определение параметров строк:
имена столбцов, их длину, тип данных столбцов и счетчик числа строк в таблице.
При добавлении пустой записи строка заголовка скрыто блокируется, чтобы увеличить значение счетчика записей. После выполнения операции добавления, блокировка снимается.
Можно открыто установить блокировку строки заголовка:
? RLOCK(“0”, “customer”) Снять эту блокировку можно командой:
UNLOCK RECORD
В случае, если попытка установить блокировку изменения оказалась неудачной, Visual FoxPro повторит попытку и в строке состояния появится сообщение:Waiting for lock…(Ожидается блокировка).
Чтобы установить новую блокировку, необходимо снять предыдущую. Все блокировки снимаются при закрытии таблиц и БД.
Буферизация строк и таблиц Visual FoxPro обеспечивает еще две стратегии разрешения конфликтов при редактировании:
буферизация строк и таблиц;
обработка транзакций.
Принципиальное отличие этих двух стратегий заключается в том, что буферизация строк и таблиц ориентирована на отдельные таблицы, обработка транзакций - на множество таблиц в БД.
Буферизация строк и таблиц позволяет отменить те изменения, которые внесены пользователем при редактировании отдельной таблицы.
Метод транзакций гарантирует, что все изменения двух или более таблиц либо полностью принимаются, либо полностью отвергаются. В Visual FoxPro транзакции применимы только к таблицам, входящим в БД.
Обе стратегии основаны на создании временных копий данных, по которым можно восстановить исходные данные, если обновление закончится неудачей.
При использовании буферизации можно применить оптимистический или пессимистический тип блокировок на уровне строк и таблиц.
Оба типа блокировок могут быть применены одновременно к разным строкам одной таблицы.
Оптимистический тип блокировок Оптимистическая блокировка откладывает все блокировки данных до момента обновления. Поэтому кажется, что один и тот же набор строк может редактировать несколько пользователей одновременно.
Моментом обновления для таблицы является ее закрытие или выполнение функции Tableupdate(), для строки - перемещение указателя на следующую строку или закрытие таблицы (т.е. запись на диск внесенных изменений).
Если другой пользователь успел обновить данные строки, пока вы ее редактировали, Visual FoxPro выдаст сообщение об ошибке При оптимистической блокировке таблиц пользователь может редактировать большое количество записей до момента обновления таблицы. Если хотя бы одна запись была изменена кем-то после начала буферизации, то все изменения в буфере рассматриваются как недействительные и Visual FoxPro сообщит об ошибке. Можно пренебречь этим сообщением, можно отменить изменения.
Оптимистическая блокировка подходит, когда требуется минимизировать расходы времени на блокировку, если нельзя позволить пользователю установить блокировку на неопределенно долгий срок.
Пессимистический тип блокировок При пессимистической блокировке строк Visual FoxPro устанавливает блокировку изменений на уровне строки на все время процесса редактирования строки.
Этому типу блокировки следует отдать предпочтение, если пользователь редактирует отдельную таблицу построчно, и данные в таблице настолько важны, что нельзя позволить, чтобы один пользователь писал поверх изменений внесенных другим, а затраты времени на блокировку не имеют значения.
При пессимистической блокировке таблицы Visual FoxPro автоматически блокирует все строки таблицы.
Остальные пользователи не видят изменений до момента обновления.
Выбор режима буферизации По умолчанию при прямом редактировании данных в таблице Visual FoxPro применяется не буферизованная блокировка строк.
Режим буферизации таблиц можно включить на вкладке Data диалогового окна Options, открываемого в пункте Главного меню Tools.
При визуальном создании формы можно задать буферизованное редактирование данных с помощью окна свойств Properties.
Эти установки можно перекрыть с помощью свойств среды окружения Data Environment.
Использование многопользовательских форм С целью проверки способов буферизации на уровне строк и таблиц, конфликты между двумя и более пользователями можно имитировать, запуская несколько экземпляров одной и той же формы. Для того чтобы запустить несколько экземпляров формы, каждый экземпляр формы должен иметь собственный (Private) сеанс данных.
Собственный (Private) сеанс данных можно задать с помощью свойства DataSession в окне свойств формы на вкладке Data. Значение этого свойства при этом должно быть равно двум.
Обработка транзакций Транзакция - «логическая единица работы». Она позволяет либо принять все изменения, либо не принимать ни одно из них.
В Visual FoxPro транзакция задается с помощью команды Begin Transaction. Когда она выполняется, все обновления данных записываются не в БД, а в специальный буфер транзакции. Внести эти изменения из буфера в БД позволяет команда End Transaction.
Для возврата БД в исходное состояние применяется команда RollBack (откат транзакции).
Обработку транзакций в Visual FoxPro можно применять только к таблицам, входящим в одну БД. Изменения свободных таблиц записываются напрямую, и их нельзя отменить с помощью отката транзакции. В этом отличие метода транзакции от буферизации.
Буферизацию можно применить к свободным таблицам, но только к одной таблице за один раз.
Элементы объектно-ориентированного программирования (ООП) в Visual FoxPro 1. Терминология ООП 2. Создание классов в Visual FoxPro 2.1 Базовые классы 2.2 Создание класса с помощью конструктора классов Class Designer 2.3 Создание простого класса программными средствами 3. Создание объектов как экземпляров класса Элементы объектно -ориентированного программирования (ООП) в Visual FoxPro Терминология ООП Основная идея ООП – построить новое приложение из заранее созданных компонентов.
Объект Объектом можно назвать любой предмет. Работая с формами в курсе «Информатика», мы уже знакомились с понятием объект. Форма – объект контейнер.
Объект - совокупность данных (свойств) и функций (методов выполнения некоторых действий). Свойства можно считать физическими атрибутами объекта, или другими словами - это данные, которые инкапсулированы в объекте.
Например, объект командная кнопка в форме имеет следующие атрибуты (свойства):
• расположение на форме;
• ширина;
• высота;
• цвет;
• надпись на кнопке;
• тип шрифта, размер и стиль текста надписи.
Объектами необязательно должны быть элементы интерфейса, это может быть, например, список сотрудников какой-то фирмы. Свойства объекта СОТРУДНИК в этом случае могут включать:
• номер служащего:
• текущий заработок.
Каждый атрибут описывает объект, а их сочетание делает его уникальным.
Свойства в Visual FoxPro - это переменные памяти, которые присоединены к объекту и имеют область видимости объекта (т.е. время жизни объекта и его свойств одинаково).
Чтобы настроить значение свойства, надо присвоить это значение соответствующей переменной.
В конструкторе форм Form Designer свойства каждого визуального объекта доступны для редактирования в окне свойств Properties.
Для этого необходимо выделить объект, например, TextBox (текстовое поле) и выполнить команду Properties либо из пункта Главного меню View (вид), либо из контекстного меню объекта, либо с помощью соответствующей кнопки на панели инструментов.
Чтобы программно обратиться к свойству, нужно указать:
Например, вывести на объект label1 надпись "Я умница!!!", можно, присвоив необходимое значение его свойству CAPTION:
label1.caption= "Я умница!!!" Узнать значения свойства можно с помощью вывода его на экран, как и для простой переменной:
? label1.caption Кроме свойств, для объектов существуют встроенные методы. Методы, это действия, которые выполняет объект при наступлении связанных с ними событий. Событие – нечто происходящее во внешнем мире, на что объект должен реагировать. Каждому событию должен отвечать программный код метода обработки этого события, который вызывается автоматически.
Например, событие щелчок левой кнопкой мыши ClickEvent по объекту – командной кнопке обрабатывается одноименным методом Click, т.е. будет выполнена процедура, программный код которой находится в методе Click.
В конструкторе форм Form Designer программный код метода доступен для редактирования в окне свойств Properties на вкладке Methods.
Программно вызвать метод на выполнение можно командой:
.([]) Например, для кнопки CmdOK метод Click( ) можно вызвать командой:
CmdOK.Click( ) Даже если отсутствует, скобки ( ) все равно необходимо ставить, чтобы отличать методы объекта от его свойств.
Класс Класс – заготовка, которая будет использоваться для создания объектов при разработке новых приложений.
Он содержит описание объекта и действий над этим объектом.
Однотипные объекты создаются как экземпляры одного класса, это позволяет не создавать каждый объект индивидуально.
Мы уже знакомы с такими классами, как форма, отчет, элементы визуального интерфейса.
В Visual FoxPro классы сохраняются в файлах с расширением.VCX.
Инкапсуляция В старых языках процедурного типа данные и программный код существовали отдельно. Инкапсуляция - объединение в понятии объект данных (свойств) и программного кода (методов). Код может оперировать над этими данными.
Разработчик должен обеспечить открытый интерфейс классов. Интерфейс определяет, какие программные коды и данные (методы и свойства) должны быть доступны извне объекта. Этим достигается изменение объекта без изменения программного кода самого объекта.
Например, мы изменяем цвет фона формы или ее заголовок с помощью интерфейса, реализованного в виде окна Properties и панели инструментов, даже не видя программного кода объекта формы.
Полиморфизм Используя ООП, можно определять различные объекты с похожими общими интерфейсами. В Visual FoxPro полиморфизм определяют как явление, когда два объекта имеют идентичный интерфейс и потенциально разные реализации.
Например, можно создать объект СЧЕТ и объект ЗАКАЗ и для них открытый интерфейс ПЕЧАТАТЬ ДОКУМЕНТ.
Этот интерфейс можно представить в виде окна, в полях ввода которого задать выбор типа принтера, количества копий, размер бумажного листа и т.д. Этот интерфейс будет направлять документ программе печати. Реализация программы печати будет отличаться для обоих объектов, т.к. они имеют разные свойства, но для пользователя эти Наследование Наследование – способность передачи функциональных возможностей от базового класса к подклассу.
Технология наследования позволяет определять новый объект, основываясь на определении исходного объекта.
Например, есть объект командная кнопка, которая выполняет какую-то процедуру (действие) при щелчке на ней левой кнопкой мыши. Мы создавали с Вами кнопки Next, Prev, Bottom, Top для перемещения по записям. Если изменить класс объекта командная кнопка, так, чтобы действие выполнялось при щелчке на ней правой кнопки мыши, то все приложения, использующие этот объект, перестанут работать.
Чтобы этого не происходило, необходимо, во-первых, создать новый класс, который основан на определении исходного; во– вторых, добавить нужный программный код, не внося изменений в исходный класс.
Класс, наследующий свойства и методы от другого класса, называют подклассом. Такое наследование называют иерархией класса. Как только происходит наследование от класса, возникает новый элемент этой иерархии.
Иерархия класса похожа на генеалогическое дерево человека.
Иерархии классов следует отличать от иерархий вложенности.
Первые – связаны с наследованием, вторые имеют дело с формами и другими классами контейнерами, которые могут содержать такие элементы, как кнопки, окна редактирования, поля ввода со списком и др.
В Visual FoxPro эти элементы обязательно должны находиться в какой-нибудь форме. Форма – это объект - контейнер, который содержит другие элементы, при этом форма является родителем, а элемент – потомком.
С иерархий вложенности мы имели дело, когда в разделе 1. говорили об обращении к свойствам и методам объекта, например, следующая команда присваивает свойству ControlSource объекта oTextBox1 на форме oForm1 значение переменной nPrice:
oForm1.oTextBox1.ControlSource=nPrice [1] Префикс «о» принято добавлять для обозначения имени объекта.
Создание классов в Visual FoxPro Базовые классы Классы в Visual FoxPro можно создать двумя способами: с помощью средств визуального интерфейса или посредством программного кода.
Новые классы создают на основе готовых базовых компонентов, которые называют классами предков. В Visual FoxPro базовыми классами (суперклассами) являются:
• ActiveDoc (Объект активного документа, который можно поместить в броузер);
• CheckBox (Флаговое окно);
• Column (Столбец объекта класса Grid);
• ComboBox (Поле со списком);
• CommandButton (Командная кнопка);
• CommandGroup (Группа командных кнопок);
• Conteiner (Контейнер);
• Control (Базовый класс элементов управления);
• Cursor (Определение курсора в среде данных);
• Custom (Пользовательский класс);
• DataEnvironment (Совокупность курсоров и таблиц, которую можно открыть как единое целое);
• EditBox (Элемент редактирования);
• Form (Форма);
• FormSet (Набор форм) *;
• Grid (Сетка, таблица) *;
• Header (Заголовок столбца объекта класса Grid);
• HyperLink (Гиперссылка);
• Image (Гарфический образ);
• Label (Метка);
• Line (Линия);
• ListBox (Список);
• OptionButton (Кнопки с возможностью выбора одного параметра);
• OptionGroup (Группа объектов OptionButton);
• OleBoundControl (Контроллер объектов OLE);
• OleControl (Элемент управления OLE);
• Page (Единственная вкладка в составе объекта PageFrame);
• PageFrame (Страничный блок);
• ProjectHook (Объект открытого проекта, в котором обеспечен программный доступ к событиям проекта);
• Relation (Отношение между двумя курсорами в среде данных);
• Separator (Разделитель);
• Shape (Графическая фигура);
• Spinner (Счетчик);
• TextBox (Поле ввода);
• Timer (Таймер);
• ToolBar (Панель инструментов).
Базовые классы поставляются вместе с Visual FoxPro и находятся в файле _base.VCX.
Класс Custom является самым простым и часто используется как суперкласс для пользовательских классов.
Всем базовым классам присущи следующие базовые свойства, события и методы.
Class BaseClass ClassLibrary ParentClass Базовые события и методы, присущие всем базовым классам Init экземпляра класса. Методобработчик возвращает значение.F., Destroy Error Методы объектов, используемые в лабораторной работе • Load – загрузка объекта в ОЗУ;
• LostFocus – потеря объектом фокуса ввода;
• Refresh – обновление;
• Click – щелчок LM;
• Init – создание объекта.
Создание класса с помощью конструктора классов Class Designer Окно Class Designer во многом похоже на окно конструктора форм Form Designer.
Здесь с помощью панелей инструментов также можно добавлять в создаваемый класс элементы, задавать их свойства и т.д.
Отличия Form Designer от Class Designer заключаются в том, что первый обеспечивает возможности, специфические для разработки форм, такие, как создание среды окружения и интерактивное переключение из режима разработки в режим выполнения (Form| Run).
Конструктор Class Designer создает заготовки для объектов, и эти заготовки нельзя запустить на выполнение непосредственно.
Чтобы проверить результат создания класса, необходимо создать объект данного класса.
Например, нельзя запустить на выполнение класс форма, необходимо создать объект класса формы.
Пользовательские библиотеки классов предпочтительно размещать в отдельных папках. Можно создать специальную папку с названием VCX, куда помещать все созданные библиотеки классов.
Рассмотрим пример создания класса Firma штампа фирмы, который можно будет помещать в любые формы проекта. Для этого необходимо выполнить следующие действия:
1. В окне диспетчера проекта перейти на вкладку Classes.
2. Нажать кнопку New.
В окне конструктора классов с помощью объектов Label (Caption) и Image (Picture), выбранных на панели инструментов Form Control, расположить на заготовке класса следующую информацию о фирме Фон объектов класса Firma предпочтительнее задать прозрачным (BackStyle - 0 Transparent), свойства рамки, ограничивающей объект, начинаются со слова Border, их можно задать по усмотрению разработчика. Чтобы рамка была невидима, на вкладке Layout в окне свойств Properties класса Firma следует присвоить свойству BorderWidth (ширина рамки) значение 0.
3. Закрыть окно конструктора с сохранением класса Firma.
Создание простого класса программными средствами Новый пользовательский класс можно создать с помощью команды DEFINE CLASS:
DEFINE CLASS AS
ENDDEFINE
В качестве родительского класса может быть использован базовый или любой другой пользовательский класс. Все свойства и методы родительского класса автоматически наследуются новым (дочерним) классом. В связи с чем в команде DEFINE CLASS необходимо указать только добавляемые или изменяемые свойства и методы.При написании кода класса, когда еще не существует сам объект, при обращении к его свойствам, вместо имени объекта (экземпляра класса), используется ключевое слово THIS. Это означает, что выполняется обращение к свойству самого объекта.
В лабораторной работе №6а в курсе «Информатика» мы рассматривали пример создания объекта командной кнопки, завершающей событие чтения данных в объекте Grid. Объект пользовательского класса, названного CmndBtn1.
Пользовательский класс CmndBtn1 создавали на основе базового класса COMMANDBUTTON с помощью следующего программного кода:
DEFINE CLASS CmndBtn1 AS COMMANDBUTTON Caption = 'Нажми, чтобы закрыть' && надпись на кнопке Left = 50 && столбец формы Top = 220 && строка формы Height = 30 && высота кнопки Width =200 && ширина кнопки PROCEDURE Click && метод обработчик события Click CLEAR EVENTS && прекращение чтения, закрытие
ENDDEFINE
Создание объектов как экземпляров класса Чтобы проверить результат создания класса, необходимо создать объект данного класса.В случае, когда пользовательский класс помещен в библиотеку классов, как, например, класс Firma, его можно использовать при разработке любых форм проекта с помощью конструктора. Чтобы добавить объект класса Firma на вновь создаваемую форму, необходимо открыть окно конструктора формы Form Designer.
На панели инструментов FormControl следует нажать кнопку View Classes, предназначенную для просмотра списка библиотек классов, доступных через панель инструментов. Чтобы на панели инструментов были представлены кнопки, соответствующие членам библиотеки класса, необходимо выбрать ее имя в открывшемся списке, например, My_form.
Если имя библиотеки отсутствует в списке, то команда Add в меню View Classes с помощью окна Open-диалога позволяет добавить на панель инструментов любую библиотеку классов Теперь на панели инструментов FormControl появится кнопка, соответствующая классу Firma. Если перетащить эту кнопку на форму и указать размер размещаемого объекта класса Firma, то на новой форме появится штамп фирмы При запуске формы на выполнение автоматически будет создан объект композитного класса form, включающий объекты других классов (в частности Firma), добавленных на форму с помощью конструктора.
Для восстановления стандартной панели инструментов FormControl, необходимо снова нажать кнопку View Classes и выбрать из списка панель Standard.
Программное создание объектов Экземпляр класса (объект) можно создать с помощью функции CreateObject():
=CreateObject(“”, []) В переменной типа object сохраняется ссылка на созданный объект.
Например, следующая команда создает объект loForm класса FORM:
loForm=CREATEOBJECT(“FORM”) Объект может быть создан функцией CreateObject(), если в этот момент определение класса будет доступно программе.
• Рассмотрим пример программы, помещающей в объект gr класса GRID на форме form1 таблицу Customer. Для завершения работы программы используется командная кнопка btn пользовательского класса CmndBtn1:
form1=CREATEOBJECT("form") && Создать объект form form1.show() form1.Enabled=.t. && Сделать объект form1 доступным для Use Customer && Открыть таблицу form1.addobject(“gr”,”grid”) && добавить на форму объект ;
form1.gr.visible=.T.
Form1.AddObject('Btn1','CmndBtn1') && добавить на форму объект ;
*класса CmndBtn1 с именем Btn Form1.Btn1.Visible =.T.
read events && Активизировать событие чтения DEFINE CLASS CmndBtn1 AS COMMANDBUTTON && создание *класса командной кнопки для завершения события чтения Caption = 'Нажми, чтобы закрыть' Left = 50 && столбец формы Height = 30 && высота кнопки Width =200 && ширина кнопки PROCEDURE Click CLEAR EVENTS && прекращение чтения, закрытие формы
ENDDEFINE
Если код класса находится в библиотеке классов, то эту библиотеку необходимо открыть в дополнение к системной:
SET CLASSLIB TO
ADDITIVE
Например, SET CLASSLIB TO “I:\vcx\My_form.vcx” ADDITIVE Объект класса, включенного в библиотеку классов, можно создать c помощью функции NEWOBJECT(). При использовании этой функции библиотеку классов заранее открывать не требуется, так как ее полное имя передается как параметр функции:=NEWOBJECT(“”, ”< полное имя библиотеки классов >”) По умолчанию объекты класса FORM создаются невидимыми.
Для визуализации объекта класса FORM следует обратиться к его методу SHOW():
. SHOW( ) У других визуальных объектов, таких как GRID или COMMANDBUTTON с этой целью используется свойство Visible, которому следует присвоить значение.T.:
..Visible =.T.
Например, Form1.Btn1.Visible =.T.
Использование фундаментальных Назначение фундаментальных классов Преимуществом ООП является повторное использование классов, что ускоряет разработку приложений. Фирма Microsoft в среде Visual FoxPro поставляет набор библиотек фундаментальных классов, содержащий более 100 классов.
Библиотеки фундаментальных классов хранятся в VCXфайлах и сосредоточены в каталоге \VFP98\FFC.
Большинство имен фундаментальных классов начинаются символом подчеркивания.
Этот символ добавляется в имена классов, производных от базовых классов, которые находятся в библиотеке _base.VCX.
Это говорит о том, что если внести усовершенствования в базовые классы, то они будут унаследованы и соответствующими фундаментальными классами.
Существует 14 библиотек фундаментальных классов, сгруппированных по категориям.
В большинстве случаев классы из набора фундаментальных классов Visual FoxPro можно непосредственно вставить в экранную форму без корректировки программного кода.
Замечание_ Классы, производные от Form, FormSet и ToolBar, которые сами являются формами, можно добавить только в проект и запускать программно.
помощью панели инструментов Form Control При разработке пользовательских форм кнопки, соответствующие компонентам библиотеки классов, могут быть доступны через панель инструментов Form Control.
С этой целью, имя библиотеки необходимо добавить в список, открывающийся с помощью кнопки View Classes.
Если библиотека необходима только в текущем сеансе работы, достаточно после щелчка на пиктограмме View Classes выбрать опцию Add (добавить) и, выбрать файл библиотеки из каталога \VFP9\FFC.
В случае, когда компоненты библиотеки фундаментальных классов должны быть постоянно представлены на панели инструментов Form Control, следует выполнить следующие действия:
• В пункте Главного меню Tools выбрать команду Options.
В окне диалога Options перейти на вкладку Controls.
• Установить переключатель в положение Visual class libraries.
• Нажать кнопку Add и с помощью Open-диалога добавить файл библиотеки, например, _multimedia в список Selected.
• Щелкнуть по кнопке Set As Default (назначить по умолчанию).
• Нажать кнопку ОК для закрытия окна Options.
Вкладка Controls окна диалога Options Component Gallery (Галерея компонентов) Галерея компонентов - контейнер, в котором сосредоточены все повторно используемые ресурсы Visual FoxPro, например, классы, мастера, шаблоны.
Использование Component Gallery обеспечивает удобный доступ к компонентам, а также позволяет создавать классы, производные от фундаментальных.
Получить доступ к компонентам Component Gallery можно с помощью команды Tools - Component Gallery. Структура окна Component Gallery напоминает проводник WINDOWS.
Окно Component Gallery После щелчка на папке категории в левой части окна, в правой - появится ее содержимое. После щелчка на пиктограмме класса на правой панели на панели в нижней части окна Component Gallery появится описание этого класса.
Просмотр описания выделенного класса Значительная часть Component Gallery поставляется в составе Visual FoxPro. Сразу после установки Visual FoxPro на компьютер пользователя формируется система каталогов по умолчанию.
Самый простой способ вставить объект фундаментального класса в приложение - это перетащить пиктограмму класса с правой панели окна Component Gallery в проектируемую форму фундаментального класса в форму или проект, можно с помощью контекстного меню выбранного класса.
Класс производный от класса формы нельзя посадить на форму.
Этот класс можно только добавить в проект (Add to Project) или создать объект новой формы на базе этого класса (Create Form).
Модель объектных компонентов Терминология COM – стандарт Microsoft, регламентирующий обмен информацией между приложениями. Стандартизация распространяется на передачу и прием сообщений. Благодаря этому, объекты, построенные различными языковыми средствами, могут взаимодействовать друг с другом.
Некоторые COM-объекты по своей природе являются визуальными, это так называемые элементы управления Active X.
Модель COM основана на объектно-ориентированном подходе. В рамках этой технологии можно напрямую обращаться к классам одного приложения из другого.
Приложение COM-клиент запускает на выполнение код приложения COM-сервера. Здесь происходит перенос концепции специализации на уровень программных продуктов.
COM-объекты существуют в виде отдельных файлов (.exe,.dll) на диске и могут быть вызваны по сети с другого компьютера. Обычно доступная по сети программа выполняется на компьютере клиента (рабочей станции).
Существует более сложная модель, называемая распределенной моделью DCOM (Distributed COM). В этой схеме COM-объект существует на первом компьютере, использует ресурсы памяти и процессора другого компьютера, а результат можно получить на третьем.
Преимуществом этой модели является увеличение числа обслуживаемых клиентов.
Механизм использования COM-объектов 1.1.
В отличие от обычного ООП, при использовании COMобъектов пользователю не требуется создавать эти объекты самостоятельно. Вся работа сводится к освоению методов и свойств применяемого COM-объекта.
Чтобы получить ссылку на COM-объект, как и при создании обычного объекта (экземпляра класса), следует использовать функцию CreateObject(“имя класса”). Единственная сложность заключается в том, что требуется знать имя класса этого объекта.
Имя класса состоит из двух слов, первое – имя приложения, второе – имя класса внутри приложения. Этим имя класса COM-объекта отличается от имени класса Visual FoxPro, которое состоит из одного слова.
Для приложения Excel, например, это будет Excel.Application, для Word – Word.Application. Автоматизация OLE-объектов Windows (технология встраивания и связывания объектов) это часть СОМ-модели.
Если из среды Visual FoxPro запускается другое приложение, то Visual FoxPro играет роль клиента, а другое приложение – роль сервера.
При установке на компьютере приложения СОМ-сервера в реестре Windows регистрируется как само приложение, так и все его классы.
При вызове функции CreateObject(“имя класса”) операционная система из реестра находит путь к вызываемому приложению. После запуска приложения-сервера можно обращаться к его методам и свойствам, так же как к методам и свойствам объекта Visual FoxPro.
Назначение полей данных таблиц типа General Для хранения OLE-объектов в таблицах употребляются поля типа General. Поле типа General содержит десятибайтовую ссылку на действительное содержимое поля, созданное другим приложением: электронную таблицу, документ текстового процессора, изображение. Тип и объем реальных данных зависят от OLE-сервера, в котором создавался объект, и от того, какая технология применяется: связывание или внедрение OLE-объекта. Если применяется связывание, то в таблице содержатся только ссылки на данные и на приложение, в котором они были созданы. Если применяется внедрение OLE-объекта, то в таблице помимо ссылки на приложение, в котором данные созданы, содержится еще и копия данных.
Включение объекта OLE в таблицу Для размещения объектов OLE в таблице, в нее необходимо включить поле типа General. После чего можно внести документы в таблицу, связав или внедрив их в поле General.
Поле типа General добавляют в структуру таблицы с помощью конструктора. После включения в структуру таблицы поля типа General, можно добавить в каждую запись объекты OLE.
Например, можно связать или внедрить документ Word в поле типа General или связать электронную таблицу Excel с формой.
Связывания и внедрение различаются местом хранения данных.
Связываемые данные хранятся в исходном файле, а не в таблице или форме Visual FoxPro. Сама таблица или форма хранит только расположение исходного файла и отображает представление связанных данных. Эти данные изменяются при модификации исходного файла и сохраняют соединение до тех пор, пока вы сами его не разорвете.
Внедренные данные хранятся в вашей таблице или форме.
Они не содержат соединение с исходным файлом.
Изменения, вносимые в исходный файл, не отображаются в приложении Visual FoxPro.
Для того чтобы включить данные из других приложений Windows (OLE-объекты) в таблицу Visual FoxPro, необходимо открыть и просмотреть соответствующую таблицу в режиме Browse, а затем выполнить следующие действия:
• Щелкнуть дважды поле типа General, в которое будут вставлены данные.
• В меню Edit выбрать команду Insert Object.
• На экране появится диалоговое окно Insert Object со списком данных, которые можно вставить в выбранное поле.
Чтобы самостоятельно создать данные, надо выделить команду Create New и затем выбрать соответствующий тип данных из списка Object Type. После нажатия кнопки OK будет открыто окно выбранного приложения, в котором можно создать документ.
Чтобы использовать существующие данные, следует установить параметр Create from File. Затем ввести имя файла, содержащего данные, или выбрать команду Browse и выделить нужный файл. Если предполагается установить связь с файлом, надо включить флажок Link.
• После закрытия окна приложения Ole -сервера Ole-объект будет вставлен в поле General одной записи таблицы.
• Чтобы включить данные из других приложений Windows (OLE-объекты) в другие записи таблицы Visual FoxPro, необходимо повторить перечисленные действия.
Включение объектов OLE в формы В конструкторе форм можно включать в формы отдельные объекты OLE (элемент управления OLE Control). Кроме того, предусмотрена возможность отображения объектов OLE из полей типа General с помощью элемента управления OLE Bound Control.
Связать или внедрить отдельный Ole-объект в форму можно следующим способом:
• Создать или открыть форму в конструкторе.
• На панели инструментов Form Controls нажать кнопку OLE Control и перетащить ее, чтобы поместить в форму.
• На экране появится диалоговое окно Insert Object, выводящее типы файлов для связи и внедрения.
• Создать новый файл, выделив Create New, или использовать уже существующий файл, выделив Create from File. Ввести имя файла, содержащего данные, или выбрать Browse и выделить нужный файл. Установить флажок Link, если необходимо установить связь с файлом.