Понимание объектных выражений. Создание фигуры

Эта книга поможет освоить интегрированную среду разработки VBA и научиться программировать в VBA с использование объектов, их свойств, методов и событий. Обсуждаемые приемы программирования иллюстрируются примерами, которые можно сразу же опробовать на практике. Полученные знания вы сможете применить как для настройки и усовершенствования популярный офисных приложений, включая приложения Office XP, так и для создания собственных приложений.

Книга рассчитана на тех, кто собирается быстро и без лишних усилий научиться программировать для Windows, используя VBA.

Книга:

Понимание объектных выражений

Понимание объектных выражений

Объектное выражение представляет собой фрагмент программного кода – выражение, "указывающее" на конкретный объект. С помощью правильно построенного объектного выражения можно изменять свойства объекта, вызывать его методы или присвоить объект переменной.

Обсуждаемые здесь приемы исключительно важны для практического программирования с использованием VBA, хотя сразу понять их не очень просто. Из-за того что в программе могут использоваться много объектов одновременно, полное объектное выражение должно включать все объекты, содержащие нужный вам объект. Попробую пояснить это следующим образом. Предположим, вас просят отправиться и найти "того парня". Вы сразу же спросите: "Какого еще того?"" А вот если бы вас попросили найти самого старшего школьника, живущего в доме №3 по улице Цветочной в городе Шепетовка, Украина, то вам не пришлось бы задавать такой вопрос. (Правда. вы бы тогда, наверное, спросили "Зачем?"") Конечно, если вы уже находитесь в доме №3 по улице Цветочной, и в том доме живет только один школьник, то команда типа "покормить мальчишку" будет вполне адекватной. Точно так же, когда контекст ясен, и VBA не требует полного списка объектов.

Свойство одного объекта может тоже оказаться объектом. Объекты сосуществуют в иерархии, когда один объект (например, документ) служит контейнером для других, подчиненных ему объектов (страниц, рабочих листов или чего-то другого).

Связь между двумя этими идеями очевидна: если объект содержит подчиненные объекты, то любой подчиненный объект можно идентифицировать посредством свойства первого объекта. Выражение, которое используется для указания нужного свойства, является объектным выражением.

Например, рассмотрим следующее выражение, идентифицирующее конкретный объект в документе Word;

В этом выражении не одна, а две точки. Посмотрите, Range является свойством объекта Section, который, в свою очередь, является свойством объекта ThisDocument. Возможно, чтобы понять идею, вам этого примера уже достаточно, но если нет, то в следующем разделе вы найдете более подробные объяснения.

В большинстве объектных моделей VBA объект Application (Приложение) находится на самой вершине иерархии. Однако обычно не возникает необходимости включать этот объект в выражения - VBA соображает достаточно неплохо для того, чтобы понять, что вы работаете с объектами текущего приложения, если вы специально не указываете иного.

Объект Application содержит объект Documents - коллекция, представляющая все открытые документы. Если вам нужно работать с конкретным документом, необходимо идентифицировать его среди членов этого объекта-коллекции Documents. Например.

Documents(5) представляет объект Document № 5 в коллекции Documents.

В примере объектного выражения вы, однако, видите ключевое слово ThisDocument. Во многих VBA-приложениях ThisDocument используется для обозначения объекта Document, ассоциированного с вашим проектом.

В Word каждый объект Document имеет свойство Sections, которое ссылается на коллекцию Sections, - объект, представляющий множество всех разделов документа. Поэтому первая часть указанного выше выражения - ThisDocument.Sections -идентифицирует конкретную коллекцию Sections, принадлежащую объекту ThisDocument. Идентифицировав объект Sections, вы получаете возможность выбрать конкретный член этой коллекции. Таким образом, Sections (2) ссылается на второй раздел документа.

Теперь о завершающей части выражения. Тонкость здесь заключается в том, что хотя.Range идентифицирует свойство объекта Section, значением этого свойства является объект Range. Таким образом, все выражение обеспечивает ссылку на этот объект Range.

Использование выражения, подобным образом прокладывающего путь к конкретному объекту сквозь дебри иерархии объектов, в профессиональной фразеологии VBA называется "получением объекта".

В рассмотренном выше примере объектного выражения

ThisDocument.Sections(2).Range

объект Sections представляет собой коллекцию. В VBA коллекцией называется объект специального типа, который может содержать любое число других объектов.

Определенные в VBA-приложениях коллекции обычно содержат объекты одного типа. Например, коллекции Sections в Word содержат только объекты Section, а коллекции Pages в Visio могут принадлежать только объекты Page. (Правда, VBA предлагает и родовой объект Collection, в котором вы можете разместить объекты любых типов. О том, как создавать и использовать свои собственные коллекции такого рода, говорится в главе 13.)

О коллекциях вам достаточно знать только то, как получить доступ к содержащимся в них конкретным объектам. Для этого у вас есть две возможности.

* Сослаться на объект по его месту или номеру индекса в коллекции. Именно это и сделано в рассмотренном выше примере объектного выражения - (2) задает ссылку на второй объект Section в коллекции Sections.

* Сослаться на объект по имени. Многие объекты имеют имена. Если вам известно имя объекта, который необходимо использовать, то вместо номера в объектном выражении можно указать имя. Например, в Visio объекты Page могут иметь имена, поэтому вполне допустим следующий пример:

ThisDocument.Pages ("Моя любимая страница")

Никто не любит вводить длинные и сложные объектные выражения, даже если они достаточно понятны, как выражение ThisDocument.Sections(2).Range.

Если в программе один и тот же объект используется несколько раз, создайте для него переменную, в которой будет храниться ссылка на объект. Тогда, при необходимости указать объект, вместо полного объектного выражения вы сможете ввести имя переменной.

Обычно объектная переменная имеет более короткое имя, которое легче запомнить и напечатать, чем оригинальное объектное выражение; кроме того, она имеет еще пару преимуществ. Во-первых, использование объектной переменной ускоряет выполнение программного кода, поскольку в этом случае VBA может обратиться к объекту напрямую, а не пробираться сквозь частокол свойств ряда промежуточных объектов. Во-вторых, одну и ту же переменную можно использовать для сохранения ссылок на различные объекты. Таким образом, программный код можно сделать более гибким, поскольку появляется возможность выбирать, ссылку на какой объект должна хранить переменная во время выполнения программы.

Процесс создание объектной переменной можно разбить на два этапа.

1. Создание переменной, которая будет использоваться для хранения ссылки на объект.

Подробно каждый из этих этапов обсуждается в следующих двух разделах.

Объектные переменные объявляются точно так же, как переменные любого другого типа.

Стандартным при этом является использование оператора Dim (но точно так же, как и с переменными других типов, вы можете использовать в объявлении ключевые слова Public.Private или Static вместо Dim). Вот два примера объявления объектных переменных:

Dim objВеликийОбъект As Object " типичный объект

Dim objShapeObject As Shape " объект Shape

Существует одно важное различие между этими двумя объявлениями. В первом операторе объявляется объектная переменная, но не указывается тип объекта, который будет в ней храниться. Переменную такого типа можно использовать по мере необходимости для ссылок на объекты любого типа. Во втором операторе объявляется конкретный тип, или класс объекта, для которого предназначается создаваемая переменная. VBA не позволит поместить в такую переменную объекты иных классов.

Эти два типа объявлений объектов имеют специальные названия: поздняя привязка, когда конкретный класс не указывается, и ранняя привязка, когда переменной сразу же назначается определенный класс объектов.

Всегда, когда это возможно, лучше использовать раннюю привязку, объявляя класс объектной переменной. При ранней привязке вы получаете следующие преимущества.

* Уменьшается вероятность появления ошибок. Как уже упоминалось, в этом случае VBA не позволит присвоить переменной объект неправильного типа. Кроме класса объекта, компилятор проверит также и остальную часть программного кода, чтобы убедиться в том, что вы везде используете только методы и свойства, допустимые для объектов данного класса. При поздней привязке компилятор не смог бы выполнить такую проверку, и попытка использования недопустимого свойства или метода обнаружилась бы только во время выполнения программы.

* Ускоряется выполнение программы. Поскольку компилятор может определить, имеет ли объект те методы и свойства, которые вызываются в программе, самой программе не придется тратить время на проверку этого во время ее выполнения.

* Упрощается программный код. Чтобы выяснить, для какого класса объектов предназначена данная переменная, вам нужно просто взглянуть на строку с ее объявлением.

Несмотря на все эти преимущества, поздняя привязка предпочтительнее в следующих двух ситуациях.

* Когда одну и ту же переменную предполагается использовать для объектов различных классов. Это оправданно, когда разным классам присуши одинаковые методы или свойства, используемые в программе. Имея подобную переменную, вам не придется переписывать программный код несколько раз, чтобы делать одно и то же с разными объектами.

* Когда объекты вызываются из других приложений и поэтому их нельзя объявить с помощью ранней привязки. Использование объектов из других приложений относится г к углубленным вопросам VBA-программирования (краткое обсуждение которых вы найдете в главах 10 и 19), но вам не мешает знать о таком потенциальном ограничении.

Как вы знаете, переменная типа Variant может хранить информацию любого типа, в том числе и ссылки на объекты. Если вы объявляете переменную без явного указания на то, что это объект, то, выбирая позднюю привязку, вы сможете разместить в ней ссылку на объект позже.

После того как объектная переменная объявлена, перед ее использованием необходимо поместить в нее ссылку на объект. Это делается путем присваивания этой переменной объектного выражения с помощью ключевого слова Set. Например:

Set objShapeObject = ThisDocurcent.Pages(1).Shapes(4)

Обратите внимание, что синтаксис в данном случае немного отличается от того, каким вы присваивали данные обычным переменным (см. главу 9). Точно так же, как в случае данных других типов, между именем переменной и приписываемым ей объектом помещается знак равенства. Единственное отличие в том, что здесь оператор должен начинаться с ключевого слова Set.

Когда доступ к объекту уже не нужен, неплохо освободить объект от привязки к переменной. В результате программа сможет использовать участок памяти, ранее занятый объектом, а вы будете уверены в том, что ваш программный код не внесет по ошибке ненужные изменения в данный объект.

Сделать это совсем просто. С помощью оператора Set присвойте переменной ключевое слово Nothing, как в следующем примере:

Set objPriceIsNoObject = Nothing

Если объект, с которым вы собираетесь работать, еще не существует, вам придется его создать. В простых VBA-программах для этого используется метод Add, предназначенный для создания объектов, встроенных в ваше VBA-приложение, т.е. в приложение, с которым ассоциируется ваш проект. (В некоторых приложениях, возможно, именем такого метода будет что-то типа AddShape или AddDocument - проверьте в справочной системе приложения, чтобы знать точно.)

Самое главное - выяснить, метод Add какого именно из объектов следует применить. Цель - найти объект, который должен служить контейнером для создаваемого объекта. Обычно (но не всегда) подходящий контейнер представляет собой коллекцию.

Например, предположим, что нужно создать новый объект Layer в Visio. Объект Layer соответствует слою изображений в Visio. т.е. группе графических элементов, с которыми можно работать одновременно. Каждый объект Layer принадлежит объекту Layers, представляющему коллекцию из (одного или нескольких) слоев изображений. Исходя из лих соображений, для создания нового слоя вы должны выбрать метод Layers . Add.

Конечно, необходимо идентифицировать тот конкретный объект Layers, в котором

VBA придется создать ваш новый объект Layer. Коллекция Layers принадлежит конкретному объекту Page в объекте Document. Поэтому полностью оператор для создания нового объекта Laye r должен выглядеть примерно так:

ThisDocument.Pages(2).Layers.Add ("Новый слой")

Объект Layer тоже имеет метод Add, но его нельзя использовать для создания подобного нового слоя. Метод Add объекта Layer добавляет объект Layer в данный слой, а не создает еще один такой же Layer.

Точно так же, если нужно добавить новый слайд в презентации PowerPoint, понадобится примерно такой оператор:

АсtivePresentation.Slides.Add1.ppLayoutTextAndClipart

Как видите, новый слайд тоже добавляется в подходящий объект-контейнер - коллекция Slides.

Ввод длинных ссылок на объекты не приносит слишком много радости, а именно такие ссылки содержат операторы, использующие метод Add, - поэтому имеет смысл при создании объекта сразу же создать и переменную для этого нового объекта. Тогда в следующий раз вместо длинной ссылки на объект в программном коле можно использовать имя переменной. Вот пример использования такого подхода:

Dim objМойМалыш As Glide

Set objМойМалыш = ActivePresentation. Slides .Add 1, _

ppLayoutTextAndClipart

В иных случаях для создания объектов используются другие приемы. Вот несколько вариантов на выбор.

* Создание новой копии объекта, уже существующего в проекте.

* Использование объекта из другого приложения или компонента ActiveX (COM).

* Создание экземпляра объекта на основе класса, созданного вами в модуле класса.

В зависимости от ситуации, при этом используется либо ключевое слово New в объявлении переменной или операторе Set, либо функция Create Object. Здесь я не собираюсь объяснять, как конкретно используется такая техника - она относится к тонким вопросам программирования и обсуждается в главах 10 и 19. Я только обращаю ваше внимание на существование ключевого слова Mev,- и функции CreateObjеct с помощью которых создаются обычные объекты.

Раз уж вы собираетесь использовать переменные для хранения ссылок на объекты, наступит время, когда вы захотите выяснить, ссылается ли данная переменная на тот же объект, что и другая переменная или объектное выражение.

Вы можете создавать собственные фигуры и добавлять их в набор элементов Избранное или другой настраиваемый набор элементов. Ваша фигура становится образцом фигуры . Настраиваемыми являются набор элементов Избранное и наборы, созданные вами; наборы элементов, которые предоставляются с шаблонами Visio, изменять нельзя.

Дополнительные сведения о создании настраиваемой фигуры см. в статье Рисование линий и фигур с помощью инструментов "Карандаш", "Линия", "Дуга" и "Полилиния" . Дополнительные сведения о создании настраиваемого набора элементов см. в статье Создание, сохранение и совместное использование настраиваемых наборов элементов .

При перетаскивании образца фигуры на страницу документа создается его копия (или экземпляр ). Сам же образец остается в наборе элементов, так что его можно многократно использовать для создания копий фигуры.

Чтобы создать образец фигуры и добавить его в набор элементов

Чтобы создать новую фигуру, сделайте следующее:

Фигуры в наборах элементов Visio часто называют образцами фигур. При перетаскивании образца фигуры на страницу документа создается его копия (или экземпляр). Сам же образец остается в наборе элементов, поэтому его можно многократно использовать для создания копий фигуры.

Поставляемые корпорацией Майкрософт образцы фигур Visio защищены авторскими правами. Эти фигуры можно копировать, реорганизовывать и изменять для собственного использования. Можно также распространять содержащие их документы, но продавать и распространять исходные или измененные образцы фигур Visio нельзя.

В Visio 2010 теперь применяется пользовательский интерфейс Microsoft Office Fluent, включающий ленту, содержащую 10 основных, 4 инструментальных и ряд контекстных вкладок. Кроме того, пользователь может дополнительно создавать настраиваемые вкладки и группы.

Назначение Microsoft Visio

Пакет Microsoft Visio очень распространен, легок в использовании и может быть гибко настроен. Он подходит для создания небольших диаграмм, карт, схем и чертежей в очень разных областях, но для глубокого, профессионального моделирования его использование представляет сложность.

Типы документов Microsoft Visio:

  1. Диаграммы и блок-схемы различного назначения (аудит, дерево ошибок, организационные диаграммы, причинно-следственные связи, диаграммы маркетинга и др.).
  2. Карты вычислительных сетей, каталогов LDAP и Active Directory.
  3. Карты сайтов, связи между объектами в программном обеспечении, структуры и интерфейсы программ, потоки данных.
  4. Планы помещений, этажей, инженерно-технических коммуникаций.
  5. Схемы рабочего процесса.
  6. Чертежи и схемы электронных устройств.

Большинство программ, связанных с графикой, подразумевают наличие у пользователя художественных навыков. Однако с помощью Visio отобразить важные сведения наглядно гораздо проще:

  1. открыть шаблон,
  2. перетащить в документ подходящие фигуры,
  3. применить темы.

Шаблоны Visio

Создать новую или реконструировать существующую базу данных в модель можно с помощью шаблона "Схема модели базы данных" (рис.1), воспользоваться его набором элементов:

  1. "Сущность-связь" - для баз на основе SQL92 и более ранних версий стандарта,
  2. "Объектно-реляционная схема" - для баз на основе SQL99 и более поздних версий стандарта.

Рисунок 1. Создание документов

Анализ предметной области

В качестве примера можно использовать список всех сущностей, информацию о которых, потребуется сохранять в базе данных, причем, для каждой сущности определен необходимый список атрибутов и список всех связей, которые потребуются, в формате, указанном в таблице 1.

Таблица 1

Номер Сущность Атрибуты
1 Меры дата/время, адрес, базовая станция, попыток установки соединений, успешно установленных соединений, исполнитель
2 ДатаВремяИзмерения дата/время измерения
3 Адрес город, улица, дом
4 Станция номер
5 Исполнитель фамилия, имя, отчество, отдел, должность

Примечание 1: информацию о дате и времени всегда лучше выносить за пределы таблицы фактов (главной таблицы) по нескольким причинам:
размерность числового ключа обычно меньше, чем размерность типа данных для даты/времени - экономится место в главной таблице;
в этом случае удобно использовать дополнительные флаги, например, рабочие/нерабочие дни, сезонности и т.п.
Примечание 2: разбиение значения адреса на более мелкие удобно, если, например, потребуется поднять результаты измерений для определенного города

Номер связи Первая сущность Вторая сущность Тип связи (один-к-одному, один-ко-многим, многие-к-одному, многие-ко-многим)
1 Меры ДатаВремяИзмерения Многие-к-одному
2 Меры Адрес Многие-к-одному
3 Меры Станция Многие-к-одному
4 Меры Исполнитель Многие-к-одному

Создание новой схемы модели базы данных

Если существующая база данных, которую требуется использовать в качестве основы, отсутствует, можно начать с пустой модели базы данных и добавить собственные таблицы и связи.

Параметры документа базы данных

  1. Откройте вкладку Файл .
  2. Выберите команду Создать и пункт Схема модели базы данных .
  3. На вкладке База данных в группе Управление нажмите кнопку Параметры отображения .
  4. В диалоговом окне Параметры документа базы данных выберите нужный набор символов и другие параметры таблицы и связи (рис.2), а затем нажмите кнопку ОК .

Рисунок 2. Параметры документа базы данных

Создание таблиц

  1. Установите удобный вам размер схемы (например, 100 %), а затем из контейнера Объекты реляционной базы данных перетащите на диаграмму элемент Сущность .
  2. В списке Категории убедитесь, что выбрана строка Определение и введите следующие значения (табл.1):
  3. Физическое имя - Меры ,

    Концептуальное имя - Меры ,

  4. Перейдите на строку Столбцы , убедитесь, что переключатель стоит в положении Физический тип данных Microsoft Access , введите имя и выберите тип данных, как показано на рисунке 3. Чтобы изменить тип данных для столбца, щелкните его поле Тип данных , а затем из списка выберите тип данных или введите тип данных в список. Поле Заметки заполнять не обязательно, значения в нем генерируются автоматически.
  5. Установите флажок Обязательное для столбцов, которые не могут иметь значения NULL.
  6. Установите флажок PK (первичный ключ) для столбцов, однозначно определяющих каждую строку таблицы базы данных.
  7. В группе Категории выберите вариант Индексы , Триггеры , Проверка или Дополнительные , чтобы создать эти дополнительные элементы.
  8. На вкладке Конструктор в группе Темы можно выбрать стиль оформления таблиц, например, Цветов Яркая, эффект Простая тень (рис.3)

Рисунок 3. Проектирование сущности Меры

Точно также создайте еще сущности Адрес, Станция, Исполнитель и ДатаВремяИзмерения со столбцами, как показано на рисунке 4.

Рисунок 4. Проектирование сущностей: а) Адрес, б) Станция, в) Исполнитель, г) ДатаВремяИзмерения

Создание связей

После того, как создание всех объектов сущностей завершено, необходимо создать отношения между таблицами. Эта операция производится так:

  1. Убедитесь, что в схеме отображены все таблицы.
  2. Нажмите на кнопку Соединительная линия на вкладке Главная в группе Сервис (соседняя кнопка с указателем мыши не должна быть нажата).
  3. Наведите указатель мыши на таблицу (родительскую) с первичным ключом (например, ДатаВремяИзмерения ). Таблица будет выделена красным.
  4. Перетащите таблицу (родительскую) с первичным ключом ДатаВремяИзмерения на таблицу (дочернюю) с внешним ключом Меры . Если все сделано правильно, то на схеме появится стрелка с красными квадратами на конце и вначале.
  5. Если размерность связи не устраивает, то дважды щелкните связь. В окне Свойства базы данных в группе Категории выберите вариант Прочее . В группе Мощность выберите размерность, наиболее подходящую к связи. Для отношения «один-ко-многим» наилучшим вариантом будет 0 или более или 1 или более (Для отношения «один-к-одному» — 0 или 1 или ровно 1) .

Создание связей в первый раз получается не всегда. Обратите внимание, что в Visio для столбцов, между которыми создаются отношения, должен совпадать тип данных и название (с учетом регистра). Иначе будет создано дополнительное поле с внешним ключом FK 5 Код даты (рис.5), а поле FK 2 Код дата останется без соединения. В СУБД (например, Access) такое условие не является обязательным. В итоге схема может выглядеть так, как показано на рисунке 5.

Рисунок 5. Схема Отношения между таблицами в Visio

Создание индексов

Использование индексов повышает производительность или скорость работы базы данных при выполнении запроса.

  1. Дважды щелкните таблицу (Меры) , к которой требуется добавить индекс, а затем в окне Свойства базы данных в списке Категории выберите вариант Основной идентификатор и включите флажок Создать индекс .
  2. Затем в окне Свойства базы данных в списке Категории выберите вариант Индексы и нажмите кнопку Создать .
  3. В диалоговом окне Создать индекс введите имя для индекса (Меры ), а затем нажмите кнопку ОК .
  4. В списке Тип индекса выберите тип создаваемого индекса — Только неуникальный .
  5. В списке Доступные столбцы выберите имя столбца Код даты , который требуется включить в этот индекс, а затем нажмите кнопку Добавить .
  6. В списке Индексированные столбцы снимите флажок Убывание , чтобы создать индекс с возрастающим порядком сортировки (рис.6).

Рисунок 6. Создание индексов

Создание проверки

Использование проверки позволяет контролировать работу базы данных при выполнении запроса.

Применение предложений проверки гарантирует, что данные, введенные в столбец, находятся в пределах конкретного диапазона значений. Например, можно создать предложение проверки того, что значения столбца «Возраст» превышают 65.

  1. Дважды щелкните таблицу, чтобы открыть окно Свойства базы данных .
  2. В группе Категории выберите вариант Столбцы , а затем выберите столбец Соединение , которому требуется добавить предложение проверки.
  3. Нажмите кнопку Изменить .
  4. На вкладке Проверка диалогового окна Свойства столбца введите ограничения, указанные на рисунке 7 .

Рисунок 7. Создание диапазонов проверки

Реконструированние схемы модели базы данных

Если существует база данных, которую нужно смоделировать для лучшего понимания ее структуры или применения в качестве основы создания новой модели, то для извлечения схемы или структуры базы данных можно воспользоваться мастером реконструирования. В качестве примера можно использовать базу данных созданную в Access 2010, по исходным данным, приведенным в таблице 1 (рис.8).

Рисунок 8. Схема Отношения между таблицами в Access

  1. Выберите команду Создать и пункт Программное обеспечение и базы данных , а затем дважды щелкните элемент Схема модели базы данных .
  2. На вкладке База данных в группе Модель нажмите кнопку Реконструирование .
  3. На первой странице мастера реконструирования в качестве Источника данных укажите Microsoft Access Database и нажмите кнопку Далее .
  4. Укажите свой Логин , Пароль и нажмите ОК .
  5. Укажите Имя базы данных (Меры. accdb ) и нажмите ОК .
  6. Типы объектов для реконструированния оставьте по умолчанию и нажмите кнопку Далее .
  7. Выберите все таблицы и представления для реконструированния, нажав кнопку Выделить все и нажмите кнопку Далее .
  8. Выберите параметр Да , добавить фигуры на текущую страницу и нажмите кнопку Далее , затем Да и Готово .

В результате будут извлечены выбранные сведения, и в окне «Вывод» будут отображены примечания о процессе извлечения, т.е. должна получиться схема модели базы данных аналогичная схеме, приведенной на рисунке 9.

Рисунок 9. Схема Отношения между таблицами реконструированная из Access в Visio

Импорт и уточнение существующей модели

Существующие модели VisioModeler или PLATINUM ERwin можно импортировать для создания схемы модели базы данных Visio. Эта возможность применяется только для файлов моделей VisioModeler версии 2.0 или более поздних (IMD) и для файлов моделей PLATINUM ERwin версий 2.6, 3.0 и 3.52 (ERX).

  1. Откройте вкладку Файл .
  2. Выберите команду Создать и пункт Программное обеспечение и базы данных , а затем дважды щелкните элемент Схема модели базы данных .
  3. На вкладке База данных в группе Модель нажмите кнопку Импорт и выберите тип модели ERX -файл Erwin (рис.10).
  4. Введите путь и имя файла для модели, которую требуется импортировать, или нажмите кнопку Обзор , чтобы найти файл модели, а затем нажмите кнопку Открыть .
  5. В диалоговом окне Импорт нажмите кнопку ОК .
  6. Выполняется импорт файла, ход которого отображается в окне «Вывод». Импортированные таблицы будут отображены в окне «Таблицы и представления».

  7. В окне Таблицы и представления выберите таблицы для моделирования, а затем перетащите их на страницу документа (рис.10).

Рисунок 10. Импорт моделей в Visio

Заключение

Выпуски Microsoft Visio Профессиональный и Premium 2010 поддерживают возможности реконструирования для шаблона схемы модели базы данных (т. е. возможности создания модели в Visio с использованием существующей базы данных), но, к сожалению , не поддерживают возможности разработки (т. е. возможности создания кода SQL с использованием модели базы данных Visio).

После создания, реконструкции или импорта схемы модели базы данных возможно ее уточнение. Можно добавлять и настраивать таблицы и представления, создавать связи, настраивать столбцы и типы данных.

Visio подходит для создания небольших диаграмм в очень разных областях, но для глубокого, профессионального моделирования лучше использовать специализированные средства, пока не будет решена задача по поддержки возможности разработки, т.е. конструирования баз данных в СУБД на основе схемы модели базы данных Visio.

Назначение Microsoft Visio

Пакет Microsoft Visio очень распространен, легок в использовании и может быть гибко настроен. Он подходит для создания небольших диаграмм, карт, схем и чертежей в очень разных областях, но для глубокого, профессионального моделирования его использование представляет сложность.

Типы документов Microsoft Visio:

    Диаграммы и блок-схемы различного назначения (аудит, дерево ошибок, организационные диаграммы, причинно-следственные связи, диаграммы маркетинга и др.).

    Карты вычислительных сетей, каталогов LDAP и Active Directory.

    Карты сайтов, связи между объектами в программном обеспечении, структуры и интерфейсы программ, потоки данных.

    Планы помещений, этажей, инженерно-технических коммуникаций.

    Схемы рабочего процесса.

    Чертежи и схемы электронных устройств.

Большинство программ, связанных с графикой, подразумевают наличие у пользователя художественных навыков. Однако с помощью Visio отобразить важные сведения наглядно гораздо проще:

    открыть шаблон,

    перетащить в документ подходящие фигуры,

    применить темы.

Шаблоны Visio

Создать новую или реконструировать существующую базу данных в модель можно с помощью шаблона "Схема модели базы данных" (рис.1) и воспользоваться его набором элементов:

    "Сущность-связь" - для баз на основе SQL92 и более ранних версий стандарта,

    "Объектно-реляционная схема" - для баз на основе SQL99 и более поздних версий стандарта.

Рисунок 1. Создание документов

Анализ предметной области

Рассмотрим на примере предметной области – процесса оформления заявки на отправление груза с заданного адреса на заданную станцию.

Построение модели базы данных состоит из трех этапов:

      Выделяются сущности и их атрибуты,

      Проектируются сущности (таблицы),

      Создаются связи между сущностями (таблицами).

Составляем список всех сущностей, информацию о которых, потребуется сохранять в базе данных, причем, для каждой сущности определен необходимый список атрибутов и список всех связей, которые потребуются, в формате, указанном в таблице 1.

Таблица 1

Номер

Сущность

Атрибуты

дата/время, адрес, базовая станция, количество попыток установки соединений, успешно установленных соединений, исполнитель

ДатаВремяИзмерения

дата/время измерения

город, улица, дом

Исполнитель

фамилия, имя, отчество, отдел, должность

Примечание 1: информацию о дате и времени всегда лучше выносить за пределы таблицы фактов (главной таблицы) по нескольким причинам: размерность числового ключа обычно меньше, чем размерность типа данных для даты/времени - экономится место в главной таблице; в этом случае удобно использовать дополнительные флаги, например, рабочие/нерабочие дни, сезонности и т.п. Примечание 2: разбиение значения адреса на более мелкие удобно, если, например, потребуется поднять результаты измерений для определенного города

Номер связи

Первая сущность

(дочерняя)

Вторая сущность

(родительская)

Тип связи (один-к-одному, один-ко-многим, многие-к-одному, многие-ко-многим)

ДатаВремяИзмерения

Многие-к-одному

Многие-к-одному

Многие-к-одному

Исполнитель

Многие-к-одному

Создание новой схемы модели базы данных

Если существующая база данных, которую требуется использовать в качестве основы, отсутствует, можно начать с пустой модели базы данных и добавить собственные таблицы и связи.

Параметры документа базы данных

    Откройте вкладку Файл .

    Выберите команду Создать и пункт Программы и базы данных , а затем дважды щелкните элемент Схема модели базы данных . Откроется рабочее поле.

    На вкладке База данных в группе Управление нажмите кнопку Показать параметры .

    В диалоговом окне Параметры документа базы данных (вкладка Отношение) выберите нужный набор символов и другие параметры таблицы и связи (рис.2), а затем нажмите кнопку ОК .

Рисунок 2. Параметры документа базы данных

Создание таблиц

    Установите удобный вам размер схемы с помощью кнопок + - внизу панели (например, 100 %), а затем из контейнера Объекты реляционной базы данных (раскрыв его щелчком мыши) перетащите на диаграмму элемент Сущность и выделите его мышкой .

    В открывшемся окне в списке Категории убедитесь, что выбрана строка Определение и введите следующие значения (табл.1):

Физическое имя Меры , (заголовок таблицы)

Концептуальное имя Меры ,

    Перейдите на строку Столбцы , убедитесь, что переключатель стоит в положении Физический тип данных (Microsoft Access) , введите физическое имя и выберите тип данных, как показано на рисунке 3. Чтобы изменить тип данных для столбца, щелкните его поле Тип данных , а затем из списка выберите тип данных или введите тип данных в список. Поле Заметки заполнять не обязательно, значения в нем генерируются автоматически.

    Установите флажок (галочку) Обязательное для столбцов, которые не могут иметь значения NULL. (колонка после колонки Типы данных)

    Установите флажок PK (первичный ключ) для столбцов, однозначно определяющих каждую строку таблицы базы данных (только для Код измерения).

    На вкладке Конструктор в группе Темы можно выбрать стиль оформления таблиц, например, Цветов Яркая, эффект Простая тень (рис.3)

Рисунок 3. Проектирование сущности Меры

Точно также создайте еще сущности Адрес, Станция, Исполнитель и ДатаВремяИзмерения со столбцами, как показано на рисунке 4. Имена сущностей задавать в Категории Определение. Индексы I1, I2, I3, I4 создаются позже.

б)

г)

Рисунок 4. Проектирование сущностей: а) Адрес, б) Станция, в) Исполнитель, г) ДатаВремяИзмерения.

Создание связей

После того, как создание всех объектов сущностей завершено, необходимо создать отношения между таблицами. Эта операция производится так:

    Убедитесь, что в схеме отображены все таблицы.

    Нажмите на кнопку Соединительная линия на вкладке Главная в группе Сервис (соседняя кнопка Указатель не должна быть нажата).

    Наведите указатель мыши на таблицу (родительскую) с первичным ключом (например, ДатаВремяИзмерения ). Таблица будет выделена красным.

    Перетащите таблицу (родительскую) с первичным ключом ДатаВремяИзмерения на таблицу (дочернюю) с внешним ключом Меры . Если все сделано правильно, то на схеме появится стрелка с красными квадратами на конце и вначале.

    Если размерность связи не устраивает, то дважды щелкните связь. В окне Свойства базы данных в группе Категории выберите вариант Прочее . В группе Мощность выберите размерность, наиболее подходящую к связи. Для отношения «один-ко-многим» наилучшим вариантом будет 0 или более или 1 или более (Для отношения «один-к-одному» - 0 или 1 или ровно 1) .

Создание связей в первый раз получается не всегда. Обратите внимание, что в Visio для столбцов, между которыми создаются отношения, должен совпадать тип данных и название (с учетом регистра). Иначе будет создано дополнительное поле с внешним ключом FK 5 Код даты (рис.5), а поле FK 2 Код дата останется без соединения. В СУБД (например, Access) такое условие не является обязательным. В итоге схема может выглядеть так, как показано на рисунке 5.

Рисунок 5. Схема Отношения между таблицами в Visio.

Создание индексов

Использование индексов повышает производительность или скорость работы базы данных при выполнении запроса.

    Дважды щелкните таблицу (Меры) , к которой требуется добавить индекс (Соединительная линия должна быть отключена), а затем в окне Свойства базы данных в списке Категории выберите вариант Основной идентификатор и включите флажок Создать индекс при Создать: Первичный ключ.

    Затем в окне Свойства базы данных в списке Категории выберите вариант Индексы и нажмите кнопку Создать .

    В диалоговом окне Создать индекс введите имя (I1, I2 и т.д) для индекса (Меры ), а затем нажмите кнопку ОК .

    В списке Тип индекса выберите тип создаваемого индекса - Только неуникальный .

    В списке Доступные столбцы выберите имя столбца Код даты , которому присваивается этот индекс, а затем нажмите кнопку Добавить .

    В списке Индексированные столбцы снимите флажок Убывание , чтобы создать последующие индексы с возрастающим порядком сортировки (рис.6).

    Аналогично создать индексы для других кодов измерения (см. рис.5 сущность Меры).

Рисунок 6. Создание индексов.

Создание проверки

Использование проверки позволяет контролировать работу базы данных при выполнении запроса.

Применение предложений проверки гарантирует, что данные, введенные в столбец, находятся в пределах конкретного диапазона значений. Дважды щелкните таблицу, чтобы открыть окно Свойства базы данных .

    В группе Категории выберите вариант Столбцы , а затем выберите столбец, которому требуется добавить предложение проверки (например, для столбца ДатаВремя измерения указать диапазон значений).

    Нажмите кнопку Изменить .

    На вкладке Проверка диалогового окна Свойства столбца введите диапазон проверки.

В последнее время в некоторых (даже весьма уважаемых) источниках появляются примерно такие утверждения:
"Рисунки, связанные с данными – это функция Visio профессиональный 2013 и Visio Pro для Office 365 и она недоступна в Visio стандартный 2013".
"Обновление данных работает только в одну сторону (из базы на диаграмму), т.е. штатными средствами обновление данных в источнике не сделать".
Неправда все это! Вернее это бывает правдой в определенных случаях. Но начинающий пользователь не всегда может разобраться в тонкостях, поэтому такие утверждения сплошь и рядом его обманывают.
Любая версия Visio всегда обеспечивала как минимум несколько способов связи рисунка с данными. Вот основные из них.

Возможность разработки своего дополнения, обеспечивающего связь рисунка Visio с листом Excel или таблицей базы данных, существовала всегда (по крайней мере, последние 15 лет). Это работало и в простейших и в самых профессиональных версиях. Причем дополнение могло писать данные в любую ячейку шейп-листа, то есть в любой атрибут шейпа (фигуры). Естественно, этот путь работает и сейчас, в том числе и в Visio 2013. Только он не для всех удобен, потому что требует навыков разработки дополнения (или написания макросов).
Со временем Microsoft написала более-менее универсальное дополнение и стало включать его в комплект поставки. Это 5 визардов (помощников) для работы с БД. Визарды появились где-то в районе Visio 2000. Они считались ценными и включались в состав только профессиональных, дорогих версий. В Visio 2013 они тоже есть (только в профессиональном и Pro для Office365).
Дополнение не было в должной мере документировано, поэтому осваивается непросто. По сравнению с произвольным дополнением набор функций был конечно ограничен, но достаточно широк для решения многих универсальных задач. Передача данных поддерживается в обе стороны – из БД в шейпы и из шейпов в БД.
В качестве основного приемника данных в шейпах используются данные шейпа (Shape Data или несколько ранее Custom Properties). Хотя могут использоваться и другие атрибуты шейпов.
С введением этого дополнения стала возможным связь рисунка Visio с источником данных без программирования, только с помощью настроек.
В Visio 2007 введен еще более "продвинутый" элемент – окно "Внешние данные" и поддерживающий его транспорт данных. Принцип "без программирования" стал выражен еще ярче. Количество настроек снизилось. Количество выполняемых функций – тоже.
Новая технология стала однонаправленной. Теперь данные движутся только от базы данных в рисунок Visio. Обратный путь не обеспечивается. Дополнение работает только в профессиональных версиях Visio.
Одновременно введен еще и специальный элемент для отображения внешних данных Data Graphics – специальные выноски, которые могут автоматически прилепляться к любому шейпу после связывания его с внешними данными.
И как всегда, наиболее широко рекламируется самое последнее достижение. В случае Visio им как раз и стала связка окна "Внешние данные" и отображение в Data Graphics. То есть наиболее простая для пользователя технология с минимум функций. Именно она обладает указанными в начале свойствами – однонаправленность передачи данных и поставка только с профессиональными версиями.
Но забывать про наличие ранних, более мощных технологий – это большая ошибка. Да, они осваиваются чуть тяжелее. Зато их возможности намного превышают последний урезанный вариант. И, что тоже очень существенно, свое дополнение позволяет обойтись минимальной комплектацией Visio, а это может сэкономить (для Visio 2013) до 10 000 руб. на каждой лицензии.

Технология "Рисунки, связанные с данными"

Про эту технологию в последнее время сказано достаточно много. Вот несколько ссылок:
Связывание схем с внешними данными – пошаговый пример настройки связи между Visio 2010 и листом Excel. Тема Data Graphics не затрагивается.
Создание новых рисунков, связанных с данными – пошаговый пример добавления к шейпам предыдущей схемы элементов Data Graphics для отображения внешних данных.
Trilogy-meter Data Graphics Part I , Part II , Part III , – к сожалению, только на английском. Подробное описание решения задачи с использованием связи Visio с внешними данными. В трех последовательных статьях показан как сам процесс настройки связи с данными, так и решение сопутствующих задач (создание своих элементов Data Graphics, импорт изображений, технология обновления данных). Создавалось еще в 2009 г. для Visio 2007.
Building Custom Data Graphics for Visio 2007 – базовая статья Марка Нельсона о том, что такое Data Graphics, какие они бывают, как их создавать и как применять. Тоже на английском. От 2006 г., когда Data Graphics только зарождались.
Creating custom data graphics in Visio – современный пошаговый пример создания собственных значков. На английском.
Особенности технологии: данные двигаются только в одном направлении – из БД в рисунок Visio; технология доступна только в профессиональных версиях Visio.
Подробности
Начиная с Visio 2007 объект документ Visio содержит коллекцию объектов DataRecordSet. Объект DataRecordSet отвечает за передачу данных из БД в Visio.
Данные из DataRecordSet отображаются в окне "Внешние данные". Именно это окно пользователь видит и использует для настройки связи внешних данных с шейпами. Но программист имеет доступ и к самому объекту DataRecordSet, что позволяет использовать его в своих дополнениях, обеспечивающих, например, автоматическое соединение внешних данных с шейпами по определенному алгоритму.
В момент создания связи строки внешних данных с шейпом в шейпе автоматически создаются строки данных шейпа (Shape Data), соответствующие полям внешних данных. Строки добавляются только в том случае, если шейп не имеет строк данных с нужными наименованиями. То есть, если нужные поля создать заранее, они будут найдены и заполнены автоматически.
Область применения
Сокращенные возможности технологии предполагают и соответствующее сужение области применения. Технология применяется там, где нужно быстро добавить индикацию внешних данных на каком-либо готовом рисунке.
Яркий пример использования приведен на странице Карта Российских регионов . Здесь к основе (множество шейпов, составляющих карту) подключаются данные с сайта переписи населения в формате Excel. В результате на карте появляются в виде индикаторов данные о составе населения. Естественно, к одной и той же основе могут быть подключены различные источники данных для отображения нужной информации.
Основа не обязательно создается вручную. Она может быть получена другим дополнением Visio, например, путем автоматического построения оргсхемы организации. То есть сначала с помощью визарда оргсхем изображается структура организации, потом на нее накладывается нужная текущая информация из другой базы или файла.
Технология не обязательно заканчивается на Data Graphics. Для многих применений достаточно того, что данные появляются в Shape Data. При этом они легко могут просматриваться в интерактивном режиме через окно "Данные шейпа".
Наконец после появления внешних данных в Shape Data они могут отображаться не только в индикаторах, добавляемых к шейпу-основе. Этот шейп сам по себе может быть выполнен по технологии смарт-шейпа и изменяться в зависимости от данных. Вот пример, в котором смарт-шейпы применены в качестве таких сложных индикаторов, отображающих интенсивность использования веб-сервисов на предприятии.


Здесь каждый универсальный индикатор получает через внешние данные текущее значение измеряемого показателя, ограничители для раскраски и десяток предыдущих значений для отображения предыстории. Данные обновляются и публикуются по расписанию. Таким образом, довольно простыми средствами формируется экран для отображения измеряемых показателей.

Технология DataBase визардов

Пример подключения внешних данных из Excel к рисунку Visio 2003 рассмотрен в статье Связь шейпов Visio с данными в Excel . Пример охватывает подготовку файла в Excel, настройку связи, настройку шейпов для отображения данных, прямое и обратное обновление данных. Как уже отмечалось, по этой технологии передача данных осуществляется в обе стороны.
Через меню Add-Ons / Visio Extras в Visio 2007 доступны следующие дополнения:
  • Database Export Wizard
  • Database Refresh
  • Database Settings...
  • Database Update
  • Database Wizard
  • Export to Database...
  • Link to ODBC Database.
Два из них (Database Refresh и Database Update) являются простыми исполняющими дополнениями, а остальные 5 выполнены по типу визардов, подразумевающих настройку выполняемых операций.
Совсем не обязательно использовать весь этот комплект дополнений полностью. В описанном выше примере понадобились только Database Settings, Link to ODBC Database, Database Refresh и Database Update. В других задачах могут быть задействованы другие комбинации.
Общая схема передачи данных следующая
DataBase дополнение использует выбираемый при настройке ODBC драйвер, связывающий его с нужным источником – таблицей БД или файлом Excel. В рисунке Visio данные поставляются в секцию Shape Data.
Так же как и в вышеописанной технологии, целевой шейп может быть автоматически подстроен для приема данных в момент настройки соединения. В секцию добавляются именованные строки для приема данных, существующих в присоединяемой таблице.
Технология в основном рассчитана на ручную работу, хотя синхронизирующие дополнения Refresh и Update, как и любое дополнение могут быть вызваны программным путем из некоторого пользовательского приложения.
Область применения
Технология в принципе могла бы использоваться везде, где сейчас используется технология с окном "Внешних данных", и дополнительно в тех случаях, когда нужна обратная передача данных. Она тоже не требует знания программирования.
Тем не менее, широкого распространения она не получила. Причина скорее всего в том, что она уже вызывала трудности освоения у неподготовленного пользователя и в то же время не давала той свободы, которую предоставляет технология с разработкой своих дополнений.
Существенным ограничением является то, что связь устанавливается между конкретным шейпом и конкретной таблицей БД. Связываемые объекты должны появиться заранее и не поддерживаются сложные связки данных.

Разработка своих дополнений

Главное отличие этой технологии в том, что во всех остальных пользователю приходилось подстраиваться под функции, предоставляемые чужим дополнением. В этой технологии подстраиваться не надо, сделать можно все, что угодно.
Для связи с базой данных обычно используется ADODB, предоставляющий всю мощь SQL, произвольные запросы к любым таблицам БД.


К рисунку Visio доступ осуществляется через объектную модель Visio, то есть к произвольным объектам.
Но большие возможности сопровождаются большим разнообразием решений. Единственная типовая схема приложения типа окна "Внешние данные" уже не сможет закрыть всего этого разнообразия.
Один из возможных примеров, в котором Visio выступает в качестве графического редактора данных, находящихся в базе, показан в статье . О других примерах, различных областях применения и возможных схемах приложений, пожалуй, лучше поговорить отдельно.