Как подключить библиотеку DLL ? |
Обмен данными
Продукты корпорации 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).
Порядок выполнения:
- создать базу данных (здесь - dde6), таблицу (здесь - dde1), сделать запрос, закрыть приложение Access,
- создать макрос в приложении Word, код макроса дан ниже,
- стартовать макроc; в результате его выполнения стартует закрытое ранее приложение Access,
- открыть файл 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.
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;)
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