Freigeben über


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

  • 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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