Verwenden von Microsoft Access als DDE-Server
Gilt für: Access 2013, Office 2013
Microsoft Access unterstützt den dynamischen Datenaustausch (DDE) entweder als Zielanwendung (Clientanwendung) oder als Quellanwendung (Server). Beispielsweise kann eine Anwendung wie Microsoft Word, die als Client fungiert, Daten über DDE von einer Microsoft Access-Datenbank anfordern, die als Server fungiert.
Tipp
Wenn Sie Microsoft Access-Objekte aus einer anderen Anwendung bearbeiten müssen, sollten Sie die Verwendung von Automation in Betracht ziehen.
Eine DDE-Konversation zwischen einem Client und einem Server wird zu einem bestimmten Thema eingerichtet. Ein Thema kann entweder eine Datendatei im von der Serveranwendung unterstützten Format oder das Thema System sein, das Informationen zur Serveranwendung selbst bereitstellt. Nachdem eine Unterhaltung zu einem bestimmten Thema begonnen hat, kann nur ein diesem Thema zugeordnetes Datenelement übertragen werden.
Angenommen, Sie führen Microsoft Word aus und möchten Daten aus einer bestimmten Microsoft Access-Datenbank in ein Dokument einfügen. Sie beginnen eine DDE-Unterhaltung mit Microsoft Access, indem Sie einen DDE-Kanal mit der Funktion DDEInitiate öffnen und den Namen der Datenbankdatei als Thema angeben. Anschließend können Sie Daten aus dieser Datenbank über diesen Kanal an Microsoft Word übertragen.
Als DDE-Server unterstützt Microsoft Access die folgenden Themen:
Das Thema "System"
Der Name einer Datenbank (Datenbankthema )
Der Name einer Tabelle (Tablename-Thema )
Der Name einer Abfrage (Queryname-Thema )
Eine Microsoft Access SQL-Zeichenfolge (sqlstring-Thema )
Nachdem Sie eine DDE-Konversation eingerichtet haben, können Sie die DDEExecute-Anweisung verwenden, um einen Befehl vom Client an die Serveranwendung zu senden. Bei Verwendung als DDE-Server erkennt Microsoft Access einen der folgenden Befehle als gültigen Befehl:
Der Name eines Makros in der aktuellen Datenbank.
Jede Aktion, die Sie in Visual Basic mit einer der Methoden des DoCmd-Objekts ausführen können.
Die Aktionen OpenDatabase und CloseDatabase, die nur für DDE-Vorgänge verwendet werden. (Ein Beispiel für die Verwendung dieser Aktionen finden Sie im Beispiel weiter unten in diesem Thema.)
Hinweis
Wenn Sie eine Makroaktion als DDEExecute-Anweisung angeben, folgen die Aktion und alle Argumente der DoCmd-Objektsyntax und müssen in Klammern ([ ]) eingeschlossen werden. Anwendungen, die DDE unterstützen, erkennen jedoch keine systeminternen Konstanten in DDE-Vorgängen. Außerdem müssen Zeichenfolgenargumente in Anführungszeichen (" ") eingeschlossen werden, wenn die Zeichenfolge ein Komma enthält. Andernfalls sind keine Anführungszeichen erforderlich.
Die Clientanwendung kann die DDERequest-Funktion verwenden, um Textdaten von der Serveranwendung über einen offenen DDE-Kanal anzufordern. Oder der Client kann die DDEPoke-Anweisung verwenden, um Daten an die Serveranwendung zu senden. Nach Abschluss der Datenübertragung kann der Client die DDETerminate-Anweisung verwenden, um den DDE-Kanal zu schließen, oder die DDETerminateAll-Anweisung , um alle geöffneten Kanäle zu schließen.
Hinweis
Wenn Ihre Clientanwendung den Empfang von Daten über einen DDE-Kanal abgeschlossen hat, sollte sie diesen Kanal schließen, um Speicherressourcen zu sparen.
Im folgenden Beispiel wird veranschaulicht, wie Sie eine Microsoft Word-Prozedur mit Visual Basic erstellen, die Microsoft Access als DDE-Server verwendet. (Damit dieses Beispiel funktioniert, muss Microsoft Access ausgeführt werden.)
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
Die folgenden Abschnitte enthalten Informationen zu den gültigen DDE-Themen, die von Microsoft Access unterstützt werden.
Das Thema "System"
Das Thema System ist ein Standardthema für alle Microsoft Windows-basierten Anwendungen. Sie enthält Informationen zu den anderen Themen, die von der Anwendung unterstützt werden. Um auf diese Informationen zuzugreifen, muss Ihr Code zuerst die DDEInitiate-Funktion mit dem argument topic aufrufen und dann die DDERequest-Anweisung mit einer der folgenden für das Item-Argument angegebenen Ausführen.
Element |
Rückgabewerte |
---|---|
SysItems |
Eine Liste der Elemente, die vom Systemthema in Microsoft Access unterstützt werden. |
Formate |
Eine Liste der Formate, die Microsoft Access in die Zwischenablage kopieren kann. |
Status |
"Beschäftigt" oder "Bereit". |
Viva Topics |
Eine Liste aller geöffneten Datenbanken. |
Im folgenden Beispiel wird die Verwendung der Funktionen DDEInitiate und DDERequest mit dem Thema System veranschaulicht:
' 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]"
Das Datenbankthema
Das Datenbankthema ist der Dateiname einer vorhandenen Datenbank. Sie können entweder nur den Basisnamen (Northwind) oder den Pfad und .mdb Erweiterung (C:\Access\Samples\Northwind.mdb) eingeben. Nachdem Sie eine DDE-Konversation mit der Datenbank gestartet haben, können Sie eine Liste der Objekte in dieser Datenbank anfordern.
Hinweis
Sie können DDE nicht verwenden, um die Microsoft Access-Arbeitsgruppeninformationsdatei abzufragen.
Das Datenbankthema unterstützt die folgenden Elemente.
Element |
Rückgabewerte |
---|---|
TableList |
Eine Liste von Tabellen |
QueryList |
Eine Liste von Abfragen |
FormList |
Eine Liste von Formularen |
ReportList |
Eine Liste von Berichten |
MacroList |
Eine Liste von Makros |
ModuleList |
Eine Liste der Module |
ViewList |
Eine Liste von Ansichten |
StoredProcedureList |
Eine Liste gespeicherter Prozeduren |
DatabaseDiagramList |
Eine Liste von Datenbankdiagrammen |
Das folgende Beispiel zeigt, wie Sie das Formular Employees in der Northwind-Beispieldatenbank aus einer Visual Basic-Prozedur öffnen können:
' 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]"
Das TABLE-Thema
In diesen Themen wird die folgende Syntax verwendet:
databasename ; TABLEtable tablename
databasename ; QUERYqueryname
databasename ; SQL [ sqlstring ]
Bestandteil |
Beschreibung |
---|---|
databasename |
Der Name der Datenbank, in der sich die Tabelle oder Abfrage befindet oder für die die SQL-Anweisung gilt, gefolgt von einem Semikolon (;). Der Datenbankname kann nur der Basisname (Northwind) oder der vollständige Pfad und .mdb Erweiterung (C:\Access\Samples\Northwind.mdb) sein. |
tablename |
Der Name einer vorhandenen Tabelle. |
queryname |
Der Name einer vorhandenen Abfrage. |
sqlstring |
Eine gültige SQL-Anweisung mit einer Länge von bis zu 256 Zeichen, die mit einem Semikolon endet. Wenn Sie mehr als 256 Zeichen austauschen möchten, lassen Sie dieses Argument aus, und verwenden Sie stattdessen aufeinanderfolgende DDEPoke-Anweisungen , um eine SQL-Anweisung zu erstellen. Der folgende Visual Basic-Code verwendet beispielsweise die DDEPoke-Anweisung , um eine SQL-Anweisung zu erstellen und dann die Ergebnisse der Abfrage anzufordern. |
In der folgenden Tabelle sind die gültigen Elemente für die Themen TABLE tablename, QUERY queryname und SQL sqlstring aufgeführt.
Element |
Rückgabewerte |
---|---|
Alle |
Alle Daten in der Tabelle, einschließlich Feldnamen. |
Daten |
Alle Datenzeilen ohne Feldnamen. |
FieldNames |
Eine einzeilenige Liste von Feldnamen. |
FieldNames; T |
Eine zweiteilige Liste von Feldnamen (erste Zeile) und deren Datentypen (zweite Zeile). Dies sind die zurückgegebenen Werte: Wert
|
NextRow |
Die Daten in der nächsten Zeile in der Tabelle oder Abfrage. Wenn Sie einen Kanal öffnen, gibt NextRow die Daten in der ersten Zeile zurück. Wenn die aktuelle Zeile der letzte Datensatz ist und Sie NextRow ausführen, schlägt die Anforderung fehl. |
PrevRow |
Die Daten in der vorherigen Zeile in der Tabelle oder Abfrage. Wenn PrevRow die erste Anforderung in einem neuen Kanal ist, werden die Daten in der letzten Zeile der Tabelle oder Abfrage zurückgegeben. Wenn der erste Datensatz die aktuelle Zeile ist, schlägt die Anforderung für PrevRow fehl. |
FirstRow |
Die Daten in der ersten Zeile der Tabelle oder Abfrage. |
LastRow |
Die Daten in der letzten Zeile der Tabelle oder Abfrage. |
FieldCount |
Die Anzahl der Felder in der Tabelle oder Abfrage. |
SQLText |
Eine SQL-Anweisung, die die Tabelle oder Abfrage darstellt. Für Tabellen gibt dieses Element eine SQL-Anweisung im Format "SELECT '*' FROM table;" zurück. |
SQLText; n |
Eine SQL-Anweisung in N-Zeichenblöcken, die die Tabelle oder Abfrage darstellt, wobei n eine ganze Zahl bis zu 256 ist. Angenommen, eine Abfrage wird durch die folgende SQL-Anweisung dargestellt: Das Element "SQLText; 7" gibt die folgenden durch Tabstopps getrennten Blöcke zurück: Das Element "SQLText; 7" gibt die folgenden durch Tabstopps getrennten Blöcke zurück: |
Das folgende Beispiel zeigt, wie Sie DDE in einer Visual Basic-Prozedur verwenden können, um Daten aus einer Tabelle in der Northwind-Beispieldatenbank anzufordern und diese Daten in eine Textdatei einzufügen:
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