- •Государственное образовательное учреждение высшего профессионального образования
- •Часть 1
- •Введение. Технологии обмена данными
- •Тема 1. Динамический обмен данными (dde)
- •1.1 Принципы динамического обмена данными
- •Структура транзакций dde
- •1.2. Транзакции dde
- •1.3. Примеры и задачи: обмен данными между приложениями по протоколу dde
- •Использование функции dde
- •Передача данных из Excel в Access с помощью модуля Access
- •Взаимодействие Access и Word
- •Взаимодействие Access и Excel
- •Построение диаграммы с помощью инструкции ddeExecute
- •Тема 2. Буфер обмена данными
- •2.1 Буфер обмена данными в vb
- •2.2. Методы объекта Clipboar.
- •2.3. Примеры и задачи: программирование буфера обмена данными
- •Тема 3. Ole-технологии
- •3.1. Представление ole-данных
- •3.2. Элемент управления ole-контейнер
- •3.3. Объекты ole как элементы управления
1.1 Принципы динамического обмена данными
DDE (Dynamic Data Exchange )– установленный протокол обмена данными в реальном времени между приложениями Windows, несовместимыми с OLE2
Основные определения:
Процесс обмена информацией с использованием DDE называется сеансом связи DDE.
Приложение, начинающее сеанс связи, называется клиентом DDE.
Приложение, предоставляющее данные, называется сервером DDE.
Основными элементами сеанса связи DDE, называемыми транзакциями, являются:
Запрос клиента к серверу на начало сеанса связи
Запрос данных у сервера
Получение данных от сервера
Посылка данных серверу
Посылка команд серверу
Прекращение сеанса связи
На рис.1 приведена схема сеанса связи DDE. Пунктиром обозначены необязательные транзакции.
Рис.1
Обработка сообщений по протоколу DDE осуществляется Windows FIFO (first-in, first-out). Для поддержания нужного временного режима перемещения сообщений клиент может потребовать подтверждения сервером получения всех сообщений. Такой тип связей называется асинхронным. В синхронном сеансе связи клиент использует метод прерываний и посылает сразу несколько сообщений, а затем ожидает ответа. Если в течение одного периода прерывания ответ от сервера не получен, генерируется сообщение об ошибке.
Структура транзакций dde
В соответствии с протоколом DDE от сервера к клиенту и обратно могут передаваться текст, числа и реже графическая и специальная информация. При этом получаемые от сервера данные обрабатываются методами и кодом управления приложения-клиента.
При формировании запросов используется трехуровневая иерархия для идентификации необходимых данных:
Приложение (Servise Name). Обычно представляет собой имя выполняемого файла без расширения .exe (WINWORD, EXCEL, MSACCESS, CorelDRW, Pbrush и т.д.). Имя нужного приложения можно получить из контекстного меню значка приложения (Свойства – Версия - Внутреннее имя)
Документ (Topic). Указывает на имя файла (документа Word, книги Excel и пр.), содержащего требуемую информацию. Если приложение не использует файлов, то документ представляет собой строку, специфическую для данного приложения. Возможен также документ System (рассмотрен будет ниже)
Раздел данных (Item). Представляет собой фрагмент данных, содержащийся в указанном документе (имя закладки в документе Word, адрес диапазона ячеек Excel в формате R1C1, ссылку на имя поля в базе данных Access и пр.)
1.2. Транзакции dde
Транзакции DDE реализуются функциями и инструкциями DDE.
Функция DDEInitiate()
Функция DDEInitiate позволяет открыть канал сеанса DDE, обеспечивающий передачу данных между приложением-сервером и приложением-клиентом.
Синтаксис:
DDEInitiate(приложение, документ)
Функция возвращает номер канала связи (типа Long), который при необходимости используется другими транзакциями.
Функция DDE()
Функция DDE позволяет открыть сеанс динамического обмена данными с приложением-сервером, направить требование на прием данных из этого приложения и вывести полученные данные в элементе управления в форме или отчете приложения-клиента.
Функция DDE записывается в ячейку свойства Данные (ControlSource) следующих элементов управления в форме: поле, поле со списком, группа переключателей или флажок.
Синтаксис:
DDE(приложение, документ, раздел)
С элементами управления формы функция используется следующим образом.
Поле. Выводит содержимое раздела в поле. Например, содержимое ячейки Excel.
Поле со списком. Выводит список раздела. Например, содержимое диапазона ячеек Excel.
Группа переключателей. Числовое значение, возвращаемое функцией DDE, включает соответствующий переключатель (1 – первый, 2 – второй и т.д.)
Флажок. Если DDE возвращает 0, то флажок будет снят, иначе – установлен.
Функция DDERequest()
Функция DDERequest передает в приложение-сервер по открытому каналу связи требование на прием данных из указанного раздела.
Синтаксис:
DDERequest(канал, раздел)
DDERequest возвращает значение типа Variant, содержащее требуемые данные в виде строки.
Функция DDESend()
Передает из элемента управления в форме или отчете приложения-клиента данные приложению-серверу. Функция вводится в ячейку свойства Данные следующих элементов управления: поле, поле со списком, группа переключателей или флажок.
Синтаксис:
DDESend(приложение, документ, раздел, данные)
Инструкция DDEExequte
Инструкция передает по открытому каналу связи команду из приложения-клиента в приложение-сервер. Например, переданная в Excel команда New(Создать), позволяет создать новую электронную таблицу.
Синтаксис:
DDEExequte канал, команда
Аргумент команда представляет собой строковое выражение, задающее команду, принимаемую приложением-сервером.
Допустимые команды:
Имя макроса в базе данных
Макрокоманды VB, являющиеся методами объекта DoCmd
Макрокоманды OpenDetaBase, ClosedataBase.
Инструкция DDEPoke
Инструкция передает текст из приложения-клиента в приложение-сервер.
Синтаксис:
DDEPoke канал, раздел, данные
Инструкции DDETerminate и DDETerminateAll
Инструкция DDETerminate закрывает указанный канал связи.
Синтаксис:
DDETerminate канал
Инструкция DDETerminateAll закрывает все открытые каналы связи.
Синтаксис:
DDETerminateAll
Если открытых каналов связи нет, то вызов этих инструкций приводит в ошибке.
Сеанс связи организуется обычно по следующей схеме:
Открывается сеанс связи (DDE)
Открываются каналы связи (DDEInitiate)
Выполняется обмен данными между клиентом и сервером (DDEExecute, DDEPoke, DDERequest, DDESend)
Закрываются каналы связи (DDETerminate, DDETerminateAll)
