Freigeben über


Informationen zum Herstellen von Verbindungen zu Daten in Visio

Hinweis

Datenkonnektivitätsfeatures sind nur für lizenzierte Benutzer von Microsoft Visio Professional 2013 verfügbar.

Die Datenkonnektivität in Visio unterliegt vier Gesichtspunkten:

  • Herstellen einer Verbindung zu einer Datenquelle

  • Verknüpfen von Shapes mit Daten

  • Grafisches Anzeigen von verknüpften Daten

  • Aktualisieren verknüpfter Daten, die in der Datenquelle geändert wurden, Aktualisieren verknüpfter Shapes und Beheben möglicher Konflikte

In der Regel wenden Sie sich diesen Aspekten in der aufgeführten Reihenfolge zu. Sie verbinden also zunächst die Visio-Zeichnung mit einer Datenquelle, verknüpfen dann die Shapes in der Zeichnung mit Daten in der Datenquelle, zeigen die Daten in verknüpften Shapes grafisch an und aktualisieren bei Bedarf die verknüpften Daten. Für jeden dieser Aspekte sind neue Objekte und Elemente im Visio-Objektmodell zugewiesen. In diesem Thema wird der erste Aspekt erläutert, das Verbinden der Visio-Zeichnung mit einer Datenquelle. Weitere Informationen zu den anderen Aspekten der Datenkonnektivität finden Sie unter den folgenden Themen:

Wenn Sie eine Visio-Zeichnung programmgesteuert mit einer Datenquelle verbinden möchten, können Sie die Visio-API für Datenkonnektivität verwenden. Die API enthält die folgenden Objekte und zugehörigen Elemente:

Informationen zu Datenrecordsets und Datenverbindungen

Jedes Document-Objekt in Visio hat eine DataRecordsets-Auflistung, die leer ist, bis Sie eine Verbindung zur Datenquelle hergestellt haben. Wenn Sie ein Visio-Dokument mit einer Datenquelle verbinden möchten, fügen Sie der DataRecordsets-Auflistung des Dokuments ein DataRecordset-Objekt hinzu. Ein DataRecordset -Objekt hingegen verfügt über eine DataColumns -Auflistung mit DataColumn -Objekten, die jeweils einer entsprechenden Spalte (Feld) in der Datenquelle zugeordnet sind.

Datenquellen, mit denen Sie eine Verbindung herstellen können, umfassen Excel-Kalkulationstabellen, Access- und SQL Server-Datenbanken, SharePoint-Listen und andere OLEDB- oder ODBC-Datenquellen, z. b. eine Oracle-Datenbank. Wenn Sie ein DataRecordset-Objekt hinzufügen, indem Sie eine Verbindung mit einer dieser Datenquellen herstellen, abstrahiert Visio die Verbindung in einem DataConnection-Objekt, und das DataRecordset-Objekt muss verbunden sein.

Sie können ein DataRecordset-Objekt auch mithilfe einer XML-Datei, die dem Datenrecordset-XML-Schema für ADO Classic (ADO-Version 2.x) entspricht, als Datenquelle hinzufügen. Das resultierende DataRecordset -Objekt gilt als verbindungslos. Die Verbindung zwischen einer Datenquelle und einem DataRecordset -Objekt ist einseitig, von der Datenquelle zur Visio-Zeichnung. Wenn Daten in der Datenquelle geändert werden, können Sie die Daten in der Zeichnung aktualisieren, damit die Änderungen angezeigt werden. Es ist jedoch nicht möglich, Änderungen an den Daten in der Zeichnung vorzunehmen und diese Änderungen dann in die Datenquelle zu übertragen.

Hinzufügen von DataRecordset-Objekten

Sie können eine der folgenden drei Methoden verwenden, um der DataRecordsets-Auflistung ein DataRecordset-Objekt hinzuzufügen. Welche Methode Sie verwenden, hängt von der Datenquelle ab, mit der eine Verbindung hergestellt werden soll, und davon, ob Sie an die Methode eine Verbindungszeichenfolge und eine Abfrage-Befehlszeichenfolge oder eine gespeicherte ODC-Datei (Office Data Connection) übergeben möchten, die die Verbindungs- und Abfrageinformationen enthält:

Das folgende Beispielmakro für Visual Basic für Applikationen (VBA) veranschaulicht, wie Sie mit der Add-Methode eine Verbindung zwischen einer Visio-Zeichnung und Daten in einem Excel-Arbeitsblatt herstellen können. In diesem Fall handelt es sich dabei um das Beispielarbeitsblatt ORGDATA.XLS, das im Lieferumfang von Visio enthalten ist:

Public Sub AddDataRecordset()

    Dim strConnection As String
    Dim strCommand As String
    Dim strOfficePath As String
    Dim vsoDataRecordset As Visio.DataRecordset
    strOfficePath = Visio.Application.Path    
    strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _
                       & "User ID=Admin;" _
                       & "Data Source=" + strOfficePath + "SAMPLES\1033\ORGDATA.XLS;" _
                       & "Mode=Read;" _
                       & "Extended Properties=""HDR=YES;IMEX=1;MaxScanRows=0;Excel 12.0;"";" _
                       & "Jet OLEDB:Engine Type=34;"
    strCommand = "SELECT * FROM [Sheet1$]"
    Set vsoDataRecordset = ActiveDocument.DataRecordsets.Add(strConnection, strCommand, 0, "Data")

End Sub

Hinweis

Wenn Sie diesen Code in einer nicht englischen Visio-Version ausführen, lautet der Pfad zur Datei ORGDATA.XLS (hier als Samples\1033\ORGDATA.XLS angegeben) anders. Verwenden Sie in Ihrem Code den richtigen Pfad für Ihre Version von Visio.

Die Add-Methode gibt ein DataRecordset-Objekt zurück und akzeptiert vier Parameter:

  • ConnectionIDOrString Die ID eines vorhandenen DataConnection-Objekts oder der Verbindungszeichenfolge, mit der eine neue Verbindung zur Datenquelle angegeben wird. Wenn Sie die ID eines vorhandenen DataConnection -Objekts übergeben, das derzeit von einem oder mehreren anderen Datenrecordsets verwendet wird, werden diese Datenrecordsets zu einem Transact-Gruppenrecordset. Wenn ein Datenaktualisierungsvorgang ausgeführt wird, werden alle Datenrecordsets in der Gruppe aktualisiert. Sie können eine gültige Verbindungszeichenfolge bestimmen, indem Sie mit dem Datenauswahl-Assistenten auf der Visio-Benutzeroberfläche dieselbe Verbindung herstellen, ein Makro aufzeichnen, während der Assistent ausgeführt wird, und dann die Verbindungszeichenfolge aus dem Makrocode kopieren.

  • CommandString Diejenige Zeichenfolge, die die Datenbanktabelle oder das Excel-Arbeitsblatt und die Felder (Spalten) in der Tabelle bzw. in dem Arbeitsblatt angibt, die die abzufragenden Daten enthalten. Die Befehlszeichenfolge wird außerdem an die DataRecordset.Refresh-Methode übergeben, wenn die Daten im Recordset aktualisiert werden.

  • AddOptions eine Kombination aus einem oder mehreren Werten aus der VisDataRecordsetAddOptions-Enumeration. Mit diesen Werten werden bestimmte Datenrecordsets-Verhalten angegeben, und es ist damit beispielsweise möglich, zu verhindern, dass die abgefragten Daten im Recordset im Fenster Externe Daten auf der Visio-Benutzeroberfläche erscheinen oder durch Benutzeraktionen aktualisiert werden. Nachdem Sie diesen Wert zugewiesen haben, können Sie ihn für die Dauer des DataRecordset-Objektes nicht mehr ändern.

  • Name Eine optionale Zeichenfolge, die einen Anzeigenamen für das Datenrecordset vergibt. Wenn Sie angeben, dass Daten aus dem Recordset im Fenster Externe Daten auf der Visio-Benutzeroberfläche angezeigt werden sollen, wird der übergebene Name auf der Registerkarte des Fensters angezeigt, das dem Datenrecordset entspricht. In unserem Beispiel ist keine Datenverbindung vorhanden, daher wird für den ersten Parameter der Add-Methode die von uns definierte Verbindungszeichenfolge strConnection übergeben. Für den zweiten Parameter wird die von uns definierte Befehlszeichenfolge strCommand übergeben, die Visio anweist, alle Spalten im angegebenen Arbeitsblatt auszuwählen. Für den dritten Parameter der Add-Methode wird ein Nullwert übergeben, um das Standardverhalten des Datenrecordsets anzugeben, und für den letzten Parameter wird Org Data übergeben, also der Anzeigename, den wir für das Datenrecordset definiert haben.

Im folgenden Beispielcode wird gezeigt, wie Sie das DataConnection-Objekt abrufen, das beim Hinzufügen eines DataRecordset-Objekts zur DataRecordsets-Sammlung erstellt wurde. It prints the connection string associated with the DataConnection object in the Immediate window by accessing the ConnectionString property of the DataConnection object.

Public Sub GetDataConnectionObject(vsoDataRecordset As Visio.DataRecordset) 
 
    Dim vsoDataConnection As DataConnection 
    Set vsoDataConnection = vsoDataRecordset.DataConnection 
    Debug.Print vsoDataConnection.ConnectionString 
 
End Sub

Genauso, wie Sie die Verbindungszeichenfolge abrufen können, die einem DataConnection-Objekt zugeordnet ist, indem Sie auf die zugehörige ConnectionString-Eigenschaft zugreifen, können Sie die Befehlszeichenfolge abrufen, die einem DataRecordset-Objekt zugordnet ist, indem Sie auf die zugehörige CommandString-Eigenschaft zugreifen. Beide Eigenschaften können zugeordnet werden, sodass Sie die Datenquelle, die einem DataRecordset-Objekt zugeordnet ist, oder die einem DataConnection-Objekt zugeordnete Abfrage jederzeit ändern können, auch wenn Änderungen werden in der Zeichnung erst wiedergegeben werden, wenn Sie die Daten aktualisieren. Weitere Informationen zum Aktualisieren von Daten finden Sie unter Informationen zum Verknüpfen von Shapes mit Daten.

Programmgesteuertes Zugreifen auf Daten in Datenrecordsets

Wenn Sie Daten importieren, weist Visio jeder Datenzeile im resultierenden Datenrecordset ganzzahlige Zeilen-IDs zu, die jeweils mit 1 beginnen und auf der Zeilenreihenfolge in der ursprünglichen Datenquelle basieren. Visio verwendet IDs für Datenzeilen, um die Zeilen nachzuverfolgen, wenn sie mit Shapes verknüpft sind und Daten aktualisiert werden. Wenn Sie programmgesteuert auf Datenzeilen zugreifen möchten, müssen Sie diese Datenzeilen-IDs verwenden. Weitere Informationen dazu, wie die Zeilenreihenfolge durch Datenaktualisierungsvorgänge beeinflusst wird, finden Sie unter Informationen zum Verknüpfen von Shapes mit Daten.

Verwenden Sie die DataRecordset.GetDataRowIDs -Methode, um eine Matrix der IDs aller Zeilen in einem Datensatz abzurufen, wobei jede Zeile einen einzelnen Datensatz darstellt. Die GetDataRowIDs-Methode nimmt als Parameter eine Kriterien-Zeichenfolge an, bei der es sich um eine Zeichenfolge handelt, die der ADO-API (ActiveX Data Object) Richtlinie zum Festlegen der ADO.Filter-Eigenschaft entspricht. Durch die Angabe geeigneter Kriterien und der Verwendung von UND- und ODER-Operatoren zum Separieren von Klauseln können Sie die Informationen im Datenrecordset filtern, um nur bestimmte Datenrecordset-Zeilen selektiv zurückzugeben. Wenn Sie keinen Filter anwenden möchten (um alle Zeilen abzurufen), übergeben Sie eine leere Zeichenfolge (""). Weitere Informationen zu Kriterien-Zeichenfolgen finden Sie im Thema Filtereigenschaft in der ADO 2.x API-Referenz. Nachdem Sie die Datenzeilen-IDs abgerufen haben, können Sie mithilfe der Methode DataRecordset.GetRowData alle Daten abrufen, die in den einzelnen Spalten in der Datenzeile gespeichert sind. Weitere Informationen zu Datenspalten finden Sie unter Informationen zum Verknüpfen von Shapes mit Daten.

Im folgenden Beispielcode wird gezeigt, wie Sie die Methoden GetDataRowIDs und GetRowData verwenden, um die Zeilen-ID jeder Zeile zurückzugeben und dann die in den einzelnen Spalten gespeicherten Daten in jede Zeile des übergebenen Datenrecordsets abzurufen. It uses two nested For…Next loops to iterate through all the rows in the recordset and then, for each row, iterate through all the columns in that row. The code displays the information returned in the Immediate window. Note that you pass an empty string to the GetDataRowIDs method to bypass filtering and get all the rows in the recordset. After you call the procedure, note that the first set of data shown (corresponding to the first data row) contains the headings for all the data columns in the data recordset.

Public Sub GetDataRecords(vsoDataRecordset As Visio.DataRecordset)

    Dim lngRowIDs() As Long
    Dim lngRow As Long
    Dim lngColumn As Long
    Dim varRowData As Variant

    'Get the row IDs of all the rows in the recordset
    lngRowIDs = vsoDataRecordset.GetDataRowIDs("")

    'Iterate through all the records in the recordset.
    For lngRow = LBound(lngRowIDs) To UBound(lngRowIDs)
        varRowData = vsoDataRecordset.GetRowData(lngRow)

        'Print a separator between rows
        Debug.Print "------------------------------"

       'Print the data stored in each column of a particular data row.
        For lngColumn = LBound(varRowData) To UBound(varRowData)
            Debug.Print vsoDataRecordset.DataColumns(lngColumn + 1).Name _
               & Trim(Str(lngColumn)) & " = " & VarRowData(lngColumn)
        Next lngColumn
    Next lngRow

End Sub

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.