Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: Access 2013, Office 2013
Microsoft Access поддерживает динамический обмен данными (DDE) в качестве целевого (клиентского) или исходного (серверного) приложения. Например, такое приложение, как Microsoft Word, выступая в качестве клиента, может запрашивать данные через DDE из базы данных Microsoft Access, которая выступает в качестве сервера.
Совет
Если вам нужно управлять объектами Microsoft Access из другого приложения, можно рассмотреть возможность использования службы автоматизации.
Беседа DDE между клиентом и сервером устанавливается по определенной теме. Раздел может быть файлом данных в формате, поддерживаемом серверным приложением, или системным разделом, который предоставляет сведения о самом серверном приложении. После начала беседы по определенной теме можно передать только элемент данных, связанный с этой темой.
Например, предположим, что вы используете Microsoft Word и хотите вставить в документ данные из определенной базы данных Microsoft Access. Вы начинаете беседу по DDE с Microsoft Access, открыв канал DDE с функцией DDEInitiate и указав имя файла базы данных в качестве темы. Затем можно передать данные из этой базы данных в Microsoft Word через этот канал.
Как сервер DDE, Microsoft Access поддерживает следующие разделы:
Системный раздел
Имя базы данных (раздел базы данных )
Имя таблицы (раздел tablename )
Имя запроса (раздел queryname )
Строка SQL Microsoft Access (раздел sqlstring )
После создания беседы DDE можно использовать инструкцию DDEExecute для отправки команды от клиента в серверное приложение. При использовании в качестве DDE-сервера Microsoft Access распознает любую из следующих команд в качестве допустимой команды:
Имя макроса в текущей базе данных.
Любое действие, которое можно выполнить в Visual Basic с помощью одного из методов объекта DoCmd .
Действия OpenDatabase и CloseDatabase, которые используются только для операций DDE. (Пример использования этих действий см. далее в этом разделе.)
Примечание.
При указании макрокоманды в качестве оператора DDEExecute действие и все аргументы следуют синтаксису объекта DoCmd и должны быть заключены в квадратные скобки ([ ]). Однако приложения, поддерживающие DDE, не распознают встроенные константы в операциях DDE. Кроме того, строковые аргументы должны быть заключены в кавычки (" "), если строка содержит запятую. В противном случае кавычки не требуются.
Клиентское приложение может использовать функцию DDERequest для запроса текстовых данных из серверного приложения через открытый канал DDE. Кроме того, клиент может использовать инструкцию DDEPoke для отправки данных в серверное приложение. После завершения передачи данных клиент может использовать инструкцию DDETerminate для закрытия канала DDE или инструкцию DDETerminateAll для закрытия всех открытых каналов.
Примечание.
Когда клиентское приложение завершит прием данных по каналу DDE, оно должно закрыть этот канал, чтобы сэкономить ресурсы памяти.
В следующем примере показано, как создать процедуру Microsoft Word с помощью Visual Basic, которая использует Microsoft Access в качестве сервера DDE. (Чтобы этот пример работал, microsoft Access должен быть запущен.)
Sub AccessDDE()
Dim intChan1 As Integer, intChan2 As Integer
Dim strQueryData As String
' Use System topic to open Northwind sample database.
' Database must be open before using other DDE topics.
intChan1 = DDEInitiate("MSAccess", "System")
' You may need to change this path to point to actual location
' of Northwind sample database.
DDEExecute intChan1, "[OpenDatabase C:\Access\Samples\Northwind.mdb]"
' Get all data from Ten Most Expensive Products query.
intChan2 = DDEInitiate("MSAccess", "Northwind.mdb;" _
& "QUERY Ten Most Expensive Products")
strQueryData = DDERequest(intChan2, "All")
DDETerminate intChan2
' Close database.
DDEExecute intChan1, "[CloseDatabase]"
DDETerminate intChan1
' Print retrieved data to Debug Window.
Debug.Print strQueryData
End Sub
В следующих разделах содержатся сведения о допустимых разделах DDE, поддерживаемых Microsoft Access.
Системный раздел
Системный раздел является стандартным для всех приложений На базе Microsoft Windows. Он предоставляет сведения о других темах, поддерживаемых приложением. Чтобы получить доступ к этой информации, код должен сначала вызвать функцию DDEInitiate с аргументом topic , а затем выполнить инструкцию DDERequest с одним из указанных ниже данных для аргумента item .
Элемент |
Возвращаемое значение |
---|---|
SysItems |
Список элементов, поддерживаемых разделом System в Microsoft Access. |
Форматы |
Список форматов, которые Microsoft Access может скопировать в буфер обмена. |
Состояние |
"Занят" или "Готов". |
Темы |
Список всех открытых баз данных. |
В следующем примере показано использование функций DDEInitiate и DDERequest с разделом System:
' In Visual Basic, initiate DDE conversation with Microsoft Access.
Dim intChan1 As Integer, strResults As String
intChan1 = DDEInitiate("MSAccess", "System")
' Request list of topics supported by System topic.
strResults = DDERequest(intChan1, "SysItems")
' Run OpenDatabase action to open Northwind.mdb.
' You may need to change this path to point to actual location
' of Northwind sample database.
DDEExecute intChan1, "[OpenDatabase C:\Access\Samples\Northwind.mdb]"
Раздел базы данных
Раздел базы данных — это имя файла существующей базы данных. Можно ввести только базовое имя (Northwind) или его путь и расширение .mdb (C:\Access\Samples\Northwind.mdb). После запуска беседы DDE с базой данных можно запросить список объектов в этой базе данных.
Примечание.
Вы не можете использовать DDE для запроса файла сведений о рабочей группе Microsoft Access.
Раздел базы данных поддерживает следующие элементы.
Элемент |
Возвращаемое значение |
---|---|
TableList |
Список таблиц |
QueryList |
Список запросов |
FormList |
Список форм |
ReportList |
Список отчетов |
MacroList |
Список макросов |
ModuleList |
Список модулей |
ViewList |
Список представлений |
StoredProcedureList |
Список хранимых процедур |
DatabaseDiagramList |
Список схем баз данных |
В следующем примере показано, как открыть форму Employees в образце базы данных Northwind из процедуры Visual Basic:
' In Visual Basic, initiate DDE conversation with
' Northwind sample database.
' Make sure database is open.
intChan2 = DDEInitiate("MSAccess", "Northwind")
' Request list of forms in Northwind sample database.
strResponse = DDERequest(intChan2, "FormList")
' Run OpenForm action and arguments to open Employees form.
DDEExecute intChan2, "[OpenForm Employees,0,,,1,0]"
Раздел TABLE
В этих разделах используется следующий синтаксис:
databasename ; TABLEtablename
databasename ; QUERYqueryname
databasename ; SQL [ sqlstring ]
Part |
Описание |
---|---|
databasename |
Имя базы данных, в которой находится таблица или запрос или к которой применяется инструкция SQL, за которой следует точка с запятой (;). Имя базы данных может быть только базовым именем (Northwind) или ее полным путем и расширением .mdb (C:\Access\Samples\Northwind.mdb). |
tablename |
Имя существующей таблицы. |
queryname |
Имя существующего запроса. |
sqlstring |
Допустимая инструкция SQL длиной до 256 символов, заканчивающаяся точкой с запятой. Чтобы заменить более 256 символов, опустите этот аргумент и вместо этого используйте последовательные инструкции DDEPoke для создания инструкции SQL. Например, следующий код Visual Basic использует инструкцию DDEPoke для создания инструкции SQL, а затем запроса результатов запроса. |
В следующей таблице перечислены допустимые элементы для разделов TABLE tablename, QUERY queryname и SQL sqlstring .
Элемент |
Возвращаемое значение |
---|---|
Все |
Все данные в таблице, включая имена полей. |
Data |
Все строки данных без имен полей. |
FieldNames |
Список имен полей в одной строке. |
FieldNames; T |
Список имен полей (первая строка) и их типов данных (вторая строка). Возвращаются следующие значения: Значение
|
NextRow |
Данные в следующей строке таблицы или запроса. При открытии канала NextRow возвращает данные в первой строке. Если текущая строка является последней записью и вы запускаете NextRow, запрос завершается ошибкой. |
PrevRow |
Данные в предыдущей строке таблицы или запроса. Если PrevRow является первым запросом к новому каналу, возвращаются данные в последней строке таблицы или запроса. Если первая запись является текущей строкой, запрос для PrevRow завершается ошибкой. |
FirstRow |
Данные в первой строке таблицы или запроса. |
LastRow |
Данные в последней строке таблицы или запроса. |
FieldCount |
Количество полей в таблице или запросе. |
SQLText |
Инструкция SQL, представляющая таблицу или запрос. Для таблиц этот элемент возвращает инструкцию SQL в виде SELECT '*' FROM table;". |
SQLText; n |
Инструкция SQL в n-символьных блоках, представляющая таблицу или запрос, где n — целое число до 256. Например, предположим, что запрос представлен следующей инструкцией SQL: Элемент "SQLText; 7" возвращает следующие блоки с разделителями табуляции: элемент "SQLText; 7" возвращает следующие блоки с разделителями табуляции: |
В следующем примере показано, как использовать DDE в процедуре Visual Basic для запроса данных из таблицы в образце базы данных Northwind и вставки данных в текстовый файл:
Sub NorthwindDDE
Dim intChan1 As Integer, intChan2 As Integer, intChan3 As Integer
Dim strResp1 As Variant, strResp2 As Variant, strResp3 As Variant
' In a Visual Basic module, get data from Categories table,
' Catalog query, and Orders table in Northwind.mdb.
' Make sure database is open first.
intChan1 = DDEInitiate("MSAccess", "Northwind;TABLE Shippers")
intChan2 = DDEInitiate("MSAccess", "Northwind;QUERY Catalog")
intChan3 = DDEInitiate("MSAccess", "Northwind;SQL SELECT * " _
& "FROM Orders " _
& "WHERE OrderID > 10050;")
strResp1 = DDERequest(intChan1, "All")
strResp2 = DDERequest(intChan2, "FieldNames;T")
strResp3 = DDERequest(intChan3, "FieldNames;T")
DDETerminate intChan1
DDETerminate intChan2
DDETerminate intChan3
' Insert data into text file.
Open "C:\DATA.TXT" For Append As #1
Print #1, strResp1
Print #1, strResp2
Print #1, strResp3
Close #1
End Sub