Опубликован: 04.07.2006 | Уровень: для всех | Доступ: свободно
Лекция 6:

Обмен данными

Аннотация: Рассматривается DDE - динамический обмен данными и следующий этап разработки в области обмена данными - OLE. Особый интерес представляет практическая работа 44 - передача данных между приложениями Access и Excel. Приводятся две практические работы, относящиеся к области ActiveX - технологии, обеспечивающей эффективную работу приложений типа клиент- сервер.

Продукты корпорации Microsoft поддерживают протокол динамического обмена данными - DDE (протокол - правила при коммуникациях). С использованием папки обмена CLIPBRD.EXE выполняются DDE-связи в компьютерной сети (стартует сетевая DDE-служба), при этом данные должны быть сделаны доступными - должен быть реализован общий доступ. В процессе обмена данными устанавливаются связи между папками обмена удалeнных компьютеров; данные буфера обмена должны находиться на страницах папки обмена. Такая связь может быть реализована и средствами Visual Basic. Приложения могут выполнять как роль клиента, запрашивающего и принимающего данные, так и роль сервера - источника данных.

Технология обмена данными между приложениями развита до такого уровня, что данные не нужно заново копировать - они после их изменения автоматически передаются через DDE-связь. OLE - следующий этап разработок в области обмена данных. Это технология связи программ, обеспечивающая приложениям совместное использование данных. Технология OLE поддерживается с помощью внедрённых и связанных объектов. Развитие OLE - это технология ActiveX.

DDE

Рассмотрим примеры использования Microsoft Access в роли сервера DDE для приложения-клиента, запрашивающего и принимающего даные по каналу связи DDE. Сеанс связи начинается с открытия канала связи; при этом используется функция DDEInitiate, в аргументе которой перечисляются: имя приложения (база данных Access), имя файла базы данных, имя таблицы; пример: intChan1 = DDEInitiate("MSAccess", "C:\Winnt\Profiles\Administrator\dde6;TABLE dde1")

После этого становится возможной передача данных в другое приложение по этому каналу. Для передачи требования на пересылку, например, текстовых данных из приложения-сервера по открытому каналу DDE используется функция DDERequest, в аргументе которой указывается номер канала связи и сформулирован запрос, пример: strResp1 = DDERequest(intChan1, "All"). После окончания передачи данных нужно вызвать в приложении-клиенте функцию DDETerminate для закрытия текущего канала обмена или функцию DDETerminateAll для закрытия всех каналов связи.

Практическая работа 40. DDE

40а. DDE. Простейший пример обмена данными

Задание: записать в файл результат запроса к данным таблицы базы данных (Access).

Порядок выполнения:

  1. создать базу данных (здесь - dde6), таблицу (здесь - dde1), сделать запрос, закрыть приложение Access,
  2. создать макрос в приложении Word, код макроса дан ниже,
  3. стартовать макроc; в результате его выполнения стартует закрытое ранее приложение Access,
  4. открыть файл dde61.txt (в редакторе Блокнот).
Sub dde6()' макрос в приложении Word,
Dim intChan1 As Integer ' канал связи
Dim strResp1 As Variant ' требование на запрос
' открыть канал связи
intChan1 = DDEInitiate("MSAccess",_
"C:\Winnt\Profiles\Administrator\dde6;TABLE dde1")
strResp1 = DDERequest(intChan1, "All") ' требование на запрос
DDETerminate intChan1 ' закрыть текущий канал связи
Open "dde61.txt" For Output As #1 ' открыть файл для записи
Write #1, strResp1 ' записать результат запроса
Close #1 ' закрыть файл
End Sub

Содержимое полученного файла dde61.txt - это результат запроса ("All"): вывести всeсодержимое таблицы базы данных, рис. 6.1.

Простейший пример DDE; данные, выводимые в файл

Рис. 6.1. Простейший пример DDE; данные, выводимые в файл

40в. DDE

Приводится аналогичный пример; создаются 4 таблицы: student, (рис. 6.2, рис. 6.3) stipendija, sessija, prikaz; выполняются 4 запроса (рис. 6.4, рис. 6.5), создается макрос в приложении Word (см. код, данный ниже), открываются 4 канала связи, результаты 4-х запросов по 4-м каналам связи выводятся в файлы dde621 - dde624. Пояснения к коду макроса:

  • All - вывести все данные из таблиц, включая имена полей,
  • FildNames,T - вывести список из 2-х строк, содержащий имена полей (первая строка) и их типы данных (вторая строка).
Sub dde62() ' макрос в приложении Word
Dim intChan1 As Integer, intChan2 As Integer, intChan3 As Integer
Dim intChan4 As Integer, strResp1 As Variant, strResp2 As Variant
Dim strResp3 As Variant, strResp4 As Variant
intChan1 = DDEInitiate("MSAccessquot;, quot;A:\nin;TABLE Studentquot;)
intChan2 = DDEInitiate(quot;MSAccessquot;, quot;A:\nin;TABLE Stipendiumquot;)
Таблица Pruefung

Рис. 6.2. Таблица Pruefung
Таблица Student

увеличить изображение
Рис. 6.3. Таблица Student
Результат запроса

Рис. 6.5. Результат запроса
intChan3 = DDEInitiate("MSAccess", "A:\nin;TABLE Pruefung")
intChan4 = DDEInitiate("MSAccess", "A:\nin;QUERY Befehl")
strResp1 = DDERequest(intChan1, "All")
strResp2 = DDERequest(intChan2, "All")
strResp3 = DDERequest(intChan3, "FieldNames;T")
strResp4 = DDERequest(intChan4, "All")
DDETerminate intChan1: DDETerminate intChan2
DDETerminate intChan3: DDETerminate intChan4
Open "dde621.txt" For Output As #1
Write #1, strResp1
Close #1
Open "dde622.txt" For Output As #1
Write #1, strResp2
Close #1
Open "dde623.txt" For Output As #1
Write #1, strResp3
Close #1
Open "dde624.txt" For Output As #1
Write #1, strResp4
Close #1
End Sub
Константин Новков
Константин Новков
Как подключить библиотеку DLL ?
антонина квасова
антонина квасова
Что реализует инструкция Open - Open "a:\t.txt" For Output As #1
Светлана Ведяева
Светлана Ведяева
Россия, Саратов
Оксана Пагина
Оксана Пагина
Россия, Москва