- •Глава1 Постановка задачи и разработка бизнес-правил
- •1.1.Некоторые определения
- •Глава2 Основы теории проектирования баз данных
- •Глава3 Обзор возможностей и особенностей различных СУБД
- •3.5.MS SQL Server
- •Глава4 Основы языка программирования
- •4.3. "Горячая десятка"
- •Глава5 Объектно-ориентированное программирование
- •5.1.Объектная модель и ее свойства
- •Объекты для работы с данными
- •Объекты для управления работой приложения
- •Объекты для оформления интерфейса пользователя
- •Объекты-контейнеры
- •Невизуальные объекты
- •Объекты OLE
- •Глава6 Создание базы данных
- •6.1.Visual FoxPro
- •Создание и модернизация структуры базы данных
- •Использование словаря данных
- •Создание и модернизация структуры таблиц
- •Глава7 Средства работы с данными
- •Запросы выборки
- •Запросы добавления
- •Запросы обновления
- •Запросы удаления
- •Запрос добавления
- •Запрос - Создание таблицы
- •Запрос удаления
- •Запрос обновления
- •Перекрестный запрос
- •Microsoft Access
- •Глава8 Использование технологии клиент-сервер
- •8.1. Работа с внешними данными с помощью технологии ODBC
- •Команды Transact-SQL
- •Создание представлений
- •Создание триггеров
- •Синхронный и асинхронный процессы
- •Создание внешних представлений
- •9.1.Инструментарий разработчика
- •Создание формы "Прием заказов" на Access
- •Разработка меню в Visual FoxPro
- •Разработка меню в Access
- •Глава10 Использование готовых компонентов в приложении
- •10.1.Основные преимущества модульного проектирования прикладных программ
- •Управление объектами Excel
- •Управление объектами Word for Windows
- •Построение графиков с помощью MS Graph 5.0
- •Построение отчета в Word for Windows
- •Запись информации в Schedule+
- •10.4.Применяем ActiveX
- •Иерархический список
- •Календарь
- •Глава11 Подготовка отчетных данных
- •11.1.Создание отчетов в Visual FoxPro
- •Управление режимом печати
- •Глава12 Подготовка и отладка пользовательского приложения
- •12.1.Общие принципы отладки приложения
- •Отладка программы в Access
- •Обработка ошибок процессора баз данных в Access
- •Отладка программы в Visual Basic
- •Визуальные средства проектирования
- •Поставка программного пакета
- •Требования к установке
- •Project Manager
- •Работа с кодом программы
- •Создание базы данных
- •Работа с данными
- •Расширение возможностей технологии клиент-сервер
- •Построение пользовательского интерфейса
- •Расширение функций OLE
- •Отладка приложения
converted to PDF by HupBaH9I
макрос или процедуру, которые будут выполнять эти действия.
В качестве примера создадим следующую очень простую процедуру:
Sub Прием заказа_открыть()
DoCmd.OpenForm "Прием заказа"
End Sub
Вначале мы должны создать линейку меню, которая должна иметь по крайней мере один элемент. Пункты линейки меню отличаются от команд меню и подменю тем, что у них нет отступа в нижней части окна Конструктора меню.
На рис. 9.21 "форма" - это пункт линейки меню, а "прием заказа" - это команда меню, которая выполняет макрокоманду "запустить программу", имеющую в качестве аргумента имя нашей процедуры "Прием заказа_открыть".
Для того чтобы добавить или удалить отступ у элементов будущего меню, используйте кнопки со стрелками, которые находятся выше области отображения пунктов линейки, расположенной в нижней половине окна Конструктора меню.
Положение элемента в нижней половине окна диалога и наличие отступа определяют, будет ли он пунктом линейки меню, командой меню или подменю, а также месторасположение этого элемента в получившемся меню.
Названия команд меню должны следовать за названиями пунктов меню, к которым они относятся, аналогично названия команд подменю должны следовать вслед за командой меню, которая будет их выводить. Если вы хотите просто вывести разделитель в каком-либо из меню, то сделайте заголовком элемента дефис.
Сохранив Построитель меню, вы получите новые макросы, число которых будет равняться числу элементов меню за вычетом тех элементов, заголовками которых является дефис.
Глава 10
Использование готовых компонентов в приложении
10.1.Основные преимущества модульного проектирования прикладных программ
10.2.Как правильно использовать OLE 2.0
Возможности OLE 2.0 Использование OLE Automation Управление объектами Excel
Управление объектами Word for Windows
10.3. Использование OLE Automation для передачи данных Построение графиков с помощью MS Graph 5.0 Построение графиков с помощью MS Excel 7.0 Построение отчета в Word for Windows
Запись информации в Schedule+ 10.4. Применяем ActiveX
Иерархический список Календарь
Наверное, вы не раз с завистью смотрели на мощные графические средства популярных
электронных таблиц или изощренные возможности редактирования текста в текстовом процессоре. Вы наверняка сможете написать такую же программу, - но стоит ли повторять уже сделанное? Гораздо привлекательнее научиться использовать готовые функциональные блоки в пользовательском приложении.
10.1. Основные преимущества модульного проектирования прикладных программ
В условиях жесткой конкуренции на рынке стандартного и заказного программного обеспечения большое значение имеет умение программиста предложить заказчику решение,
которое позволит организации максимально быстро повысить эффективность и производительность ее работы.
converted to PDF by HupBaH9I
В этом параграфе мы расскажем о том, какие возможности дает среда Windows для решения
поставленной в предыдущем абзаце цели и постараемся убедить вас в эффективности модульного проектирования пользовательского приложения.
Одно из наиболее часто используемых решений - ориентировка на заказные прикладные программы, которые дают конечным пользователям наилучший доступ к информации с учетом всех особенностей работы данного заказчика. Однако создание заказных прикладных программ может быть очень дорогостоящим и наверняка потребует больших затрат времени. К тому же, в соответствии с развитием организации или какими-то изменениями в профиле ее действия, заказное программное обеспечение придется постоянно корректировать. Если посмотреть на заказную прикладную программу с точки зрения выполнения ею отдельных функций, то окажется, что значительная часть поддерживаемых ею функций, таких как редактирование данных, выполнение расчетов и т. п., достаточно стандартны и могут быть легко выполнены с помощью стандартного программного обеспечения. Использование функциональных возможностей, доступных в существующих прикладных программах, может существенно ускорить и удешевить процесс автоматизации обработки данных.
Например, прикладная программа, которая ищет с помощью системы управления базой данных сведения о потенциальных клиентах, может использовать возможности текстового процессора Microsoft Word for Windows для подготовки рекламных писем. Это решение позволяет использовать существующие функциональные возможности прикладных программ Microsoft Office, освобождая вас от необходимости разрабатывать всю прикладную программу.
Помимо несомненного выигрыша по времени, использование существующих прикладных программ в формировании заказных решений стимулируют следующие тенденции:
∙Быстрое повышение мощности и снижение стоимости персональных компьютеров.
∙Поистине революционные масштабы объединения вычислительных и информационных возможностей в рамках локальных и глобальных компьютерных сетей.
∙Высокие требования пользователей к качеству пользовательского интерфейса. Для
персонального компьютера графический пользовательский интерфейс стал в настоящее время стандартом де-факто.
Далее в этом и последующих параграфах данной главы мы рассмотрим наиболее важные аспекты, связанные с использованием функциональных возможностей Microsoft Office в прикладной программе для автоматизации обработки данных. Но сначала мы остановимся на тех средствах, которые составляют основу использования стандартного прикладного программного обеспечения в разрабатываемых пользовательских приложениях.
Стандартные прикладные программы Microsoft Office могут быть источником большого числа программных модулей (объектов) и составной частью инструментальных средств разработки благодаря функциональным возможностям стандарта OLE 2.0 и языка программирования
Microsoft Visual Basic for Application. Это означает, что прикладные программы Microsoft Office
содержат компоненты, которые вы можете использовать при разработке пользовательского приложения. Вы и пользователи ваших программ получаете тем самым следующие существенные преимущества:
∙Более эффективно используется стандартное программное обеспечение, которое, как правило, уже применяется пользователями.
∙Сокращается процесс обучения пользователей, которые используют уже имеющиеся навыки работы со знакомыми программами.
Использование стандарта OLE 2.0 является основой для разработки компонентного программного обеспечения, потому что этот стандарт обеспечивает средства для определения объектов и их совместного использования различными программами. Например, табличный процессор Microsoft Excel - одна из первых прикладных программ, которая предоставляет богатый набор объектов OLE. Библиотека объектных модулей OLE Microsoft Excel включает свыше 120 объектов и около 2700 связанных с ними методов и свойств. Эти объекты доступны через любую прикладную программу или язык, который поддерживает стандарт OLE 2.0, и их использование позволяет воспользоваться всеми функциональными возможностями Microsoft Excel без необходимости обеспечения этой функциональности в своей прикладной программе.
10.2. Как правильно использовать OLE 2.0
Стандарт OLE - Object Linked and Embedding (связывание и внедрение объектов) собственно своим названием определяет, что речь в нем идет о компоновке объектов и правилах их совместного использования для достижения интеграции среди прикладных программ.
converted to PDF by HupBaH9I
Представляя изображения, диаграммы, таблицы, фрагменты речи, документы и другие функциональные единицы программы как объекты, пользователи могут с большей легкостью объединять и обрабатывать данные из разных прикладных программ.
Вэтом параграфе мы изучим:
∙основные преимущества использования технологии OLE;
∙методику создания и использования OLE-объектов;
∙принципы работы OLE Automation.
Какие преимущества дает пользователю и разработчику эта технология? Вот основные из них:
∙Редактирование на месте позволяет работать с документом другого приложения Windows, не покидая пользовательского приложения. Необходимые элементы управления, включая меню, появятся на месте текущих, а после завершения работы вернутся на свое место элементы управления и меню пользовательского приложения. Это позволяет избежать необходимости ручной загрузки и перехода в другое приложение.
∙Перетаскивание данных между приложениями помогает реализовать наиболее естественный для пользователя метод сбора различных данных для использования в одном документе.
∙Технологии встраивания и связывания объектов дают возможность выбрать наиболее эффективный способ объединения разнородных данных в одном документе. При этом
связывание позволяет не увеличивать без необходимости объем документа и использовать наиболее свежую версию данных, хранящуюся в отдельном файле. Встраивание обеспечивает хранение всех необходимых данных в одном приложении.
∙Поддержка вложенных объектов позволяет в одном документе держать несколько зависимых объектов без необходимости обращения к нескольким приложениям. Например, встроенная в форму электронная таблица Excel может содержать встроенную в таблицу диаграмму. Изменения в электронной таблице повлекут изменения в диаграмме.
∙OLE Automation позволяет в приложении программным путем устанавливать свойства и задавать команды для объектов другого приложения. Это дает большие возможности для управления процессом подготовки текстовых документов высокого качества, формирования графиков или выполнения расчетов.
Возможности OLE 2.0
Стандарт OLE 2.0 описывает правила интеграции прикладных программ.
Он фактически расширяет пользовательский интерфейс, делая его более интуитивно понятным. Стандарт OLE 2.0 не ставит пользователя перед необходимостью набора команд или выбора опций, предоставляя возможность выполнять работу более естественным способом, управляя объектами в интерактивном режиме на экране компьютера. Пользователь, вместо того чтобы изучать методы работы с прикладный программой или операционной системой, может сосредоточиться на более эффективной работе с данными и документами.
Технология OLE 2.0 особенно полезна потому, что устанавливает стандартный метод
взаимодействия между прикладными программами при использовании различных объектов (документов, подготовленных разными прикладными программами). Она предлагает мощные средства для создания документов, получающих данные из разнообразных источников информации. Такие документы называются составными документами. Объекты, которые они содержат, могут включать почти любой тип информации, в том числе текст, растровые изображения, иллюстрации и фрагменты речи.
В технологии OLE 2.0 выделяются два главных типа данных, связанных с объектом: данные представления и локальные данные.
Данные представления объекта - это информация, нужная для представления объекта на экране компьютера, в то время как локальные данные объекта - это вся информация, необходимая для прикладной программы, чтобы редактировать объект.
Используя OLE 2.0 пользователь может также связывать или включать объект в документ.
converted to PDF by HupBaH9I
Связывание - это процесс, при котором в документ будут помещены только данные представления объекта и ссылка (или указатель на местонахождение) на локальные данные.
Локальные данные, связанные с объектом, существуют в некотором другом файле на диске. Всякий раз, когда объект модифицируется прикладной программой, этот файл открывается и прикладная программа использует хранящиеся в нем локальные данные. Пользователь работает со связанным объектом так, как будто он полностью содержится внутри документа.
Включение объекта физически помещает данные представления объекта и локальные данные внутри документа.
Вся информация, необходимая для редактирования объекта, содержится в документе. Любой объект, который содержит другие объекты (как связанные, так и вложенные), называется контейнером. Контейнерами чаще всего являются составные документы.
Включение объектов хотя и увеличивает объем документа, но позволяет перемещать объект
наряду с документом на другой компьютер и тем самым редактировать такие объекты на различных рабочих местах. Связанные объекты не могут "путешествовать" с документами за пределы локальной файловой системы компьютера, но они более эффективны, чем вложенные объекты, потому что один образец локальных данных объекта может служить источником для большого числа различных документов.
Использование OLE Automation
Один из важнейших элементов стандарта OLE 2.0 - OLE Automation - определяет способ управления командами прикладной программы из другой прикладной программы.
Прикладные программы, поддерживающие OLE Automation, имеют соответствующие объекты, которые так и называются - объекты OLE Automation, посредством которых вы можете управлять работой всех остальных объектов прикладной программы, используя возможности Visual Basic for Application.
OLE Automation для управления объектами использует OLE-серверы.
OLE-сервер - это программа, которая может предоставить другим программам возможность использовать свои объекты.
Программы, которые могут управлять объектами OLE-серверов, называются OLE-клиенты или
OLE-контроллеры.
Например, в версии 3.0 Visual FoxPro может выполнять функции только OLE-контроллера. Мы можем управлять объектами OLE-сервера, но не можем предоставить в чье-либо управление объекты Visual FoxPro.
Большинство OLE-серверов являются так называемыми серверами Out-of-Process. Они являются исполняемыми программами и могут взаимодействовать как с 16-bit, так и с 32-bit OLE- контроллерами. Расплатой за это является невысокая скорость обмена данными и значительные потребляемые ресурсы памяти. Другой тип OLE-сервера называется In-Process и представляет собой DLL-библиотеку, которая динамически подгружается и выгружается по необходимости. Хорошим примером такого сервера является процессор баз данных СУБД Access 7.0. Обмен данными с этим типом OLE-сервера происходит значительно быстрее, но работать он может только с OLE-контроллером такой же разрядности.
В табл. 10.1 приводится важная для разработчика информация о некоторых OLE-серверах
Microsoft.
Таблица 10.1. OLE-серверы Microsoft
OLE-сервер |
Где найти информацию |
|
об объектах |
converted to PDF by HupBaH9I
Серверы Out-of-Process
Microsoft Schedule+ 7.0 |
- |
Microsoft Graph 5.0 |
VBA_GRP.HLP |
Microsoft Word 7.0 |
WRDBASIC.HLP |
Microsoft Excel 7.0 |
VBA_XL.HLP |
Cерверы In-Process |
|
Data Access Object |
DAO.HLP, DAOSDK.HLP |
SQL Distributed |
SQLBOOKS.MVB |
Management Objects |
|
Вкачестве примера приведем несколько OLE-объектов для Microsoft Excel:
∙Application - запускает программу Microsoft Excel;
∙Workbook - рабочая книга, которая включает отдельные листы - один файл формата
Microsoft Excel;
∙Chart - график в рабочей книге;
∙Worksheet - рабочий лист в книге;
∙Range - одна ячейка или диапазон ячеек на листе.
Втаких больших приложениях, как Microsoft Excel, мы сталкиваемся с очень большим количеством объектов. Причем каждый объект занимает свое строго определенное положение в
иерархии объектов. Поэтому, обращаясь к объекту, мы должны, соответственно, перемещаться по этой иерархической структуре. Наверху иерархии находится объект Application. Какие-либо события или действия, связанные с этим объектом, будут иметь отношение в целом к прикладной программе. Например, для того чтобы закрыть приложение, мы должны написать такую команду:
Application.Quit
Объект Application включает в себя большое количество других объектов. Например, вы можете использовать следующую команду для ссылки на текущую рабочую книгу, открытую в
Microsoft Excel:
Application.Workbooks
Заметьте, что название объекта Workbooks приводится во множественном числе, потому что это ссылка на коллекцию объектов, в данном случае рабочих книг.
Объект коллекции - это набор объектов, имеющих общие свойства, события и методы, что позволяет сослаться на них как на единый объект.
Объекты коллекции позволяют значительно проще выполнять многие распространенные действия с прикладной программой. Например, для выполнения действий с каждым объектом в коллекции можно использовать оператор цикла:
*Организуем ссылку на запущенное приложение oExlApp = GETOBJECT(,"Excel.Application")
nWrk = 1
*Определяем, сколько открыто рабочих книг nCount = oExlApp.Application.WorkBooks.Count FOR nWrk = 1 TO nCount
*Выведем наименование каждой рабочей книги
? oExlApp.Application.WorkBooks.Item(nWrk).FullName
NEXT
* Закроем приложение oExlApp.Application.Quit
Чтобы запустить этот пример, загрузите Excel, откройте несколько файлов. В Visual FoxPro наберите приведенный в примере код в программном файле. В окне Command сделать это нельзя
converted to PDF by HupBaH9I
из-за команды FOR, которая не поддерживается в интерактивном режиме командного окна. Вам также может показаться, что в этом фрагменте лишней является переменная nCount. Это не так! При использовании OLE Automation не встраивайте ее код внутрь команд Visual FoxPro. Запустите программный файл.
Как вы могли заметить из приведенного примера, для ссылки на одну рабочую книгу в коллекции мы применяли метод Item, в котором используется номер элемента коллекции. Для ссылки на первую рабочую книгу в коллекции укажите:
Application.Workbooks.Item(1)
Для того чтобы закрыть первую книгу в коллекции:
Application.Workbooks.Item(1).Close
В свою очередь каждая рабочая книга содержит коллекцию рабочих листов, каждый рабочий лист - коллекцию ячеек и т. д. В программе сослаться на ячейку A1 можно таким образом:
Application.Workbooks.Item(1).Worksheets.Item("Sheet1").Cells.Item(1,1)
Как видно из приведенных примеров, мы должны разбираться в коллекциях для того, чтобы иметь возможность спускаться "вниз" по иерархии объектов. На рис. 10.1 приведена схема такого перемещения между объектами Microsoft Excel.
Рис. 10.1. Перемещение вниз по иерархии объектов с помощью коллекций в Microsoft Excel
Принцип перемещения вверх по иерархии более привычен для программиста, освоившего объектно-ориентированное программирование. Для этого используется свойство Parent и пока отсутствующее в Visual FoxPro, но привычное для приложений Microsoft Office свойство Application. Соответствующая схема для использования этих свойств приведена на рис. 10.2.
converted to PDF by HupBaH9I
Рис. 10.2.
При использовании OLE Automation очень важным понятием является понятие объектов верхнего уровня.
В каждом приложении объекты верхнего уровня позволяют ссылаться на них из другой программы.
Имеющиеся, например, в Microsoft Excel объекты верхнего уровня представлены на рис. 10.3.
Рис. 10.3.
Несколько ранее вы, наверное, уже обратили внимание, что ссылка на вновь создаваемый объект OLE Automation в программе Visual FoxPro выполняется так же, как при не визуальном программировании на новый объект самого Visual FoxPro - с помощью функции
CREATEOBJECT(ClassName [, eParameter1, eParameter2, ...])
Если OLE-объект уже существует, получить на него ссылку можно с помощью функции