Поделиться через


О подключении к данным в Visio

Примечание.

Функции подключения к данным доступны только для лицензированных пользователей Microsoft Visio профессиональный 2013.

Существует четыре аспекта подключения к данным в Visio:

  • Подключение к источнику данных

  • Связывание фигур с данными

  • Графическое представление связанных данных

  • Обновление связанных данных, измененных в источнике данных, обновление связанных фигур и разрешение последующих возможных конфликтов

Как правило реализация этих аспектов выполняется в перечисленном порядке. Это означает, что сначала вы подключаете документ Visio к источнику данных, затем связываете фигуры документа с данными в источнике, графически представляете данные в связанных фигурах и обновляете связанные данные при необходимости. С каждым из этих аспектов связаны новые объекты и элементы в объектной модели Visio. В этой статье рассматривается первый из этих аспектов: подключение документа Visio к источнику данных. Дополнительные сведения о других аспектах подключения к данным см. в следующих статьях:

Чтобы программно подключить документ Visio к источнику данных, можно использовать API Visio для подключений к данным, включающий следующие объекты и соответствующие элементы:

О наборах записей данных и подключениях к данным

В каждом объекте Document приложения Visio есть коллекция DataRecordsets. Она является пустой до подключения к источнику данных. Чтобы подключить документ Visio к источнику данных, нужно добавить объект DataRecordset в коллекцию DataRecordsets документа. В свою очередь объект DataRecordset содержит коллекцию DataColumns объектов DataColumn, каждый из которых сопоставлен с соответствующим столбцом (полем) в источнике данных.

Источники данных, к которым можно подключиться, включают электронные таблицы Excel, базы данных Access и SQL Server, списки SharePoint, а также другие источники данных OLEDB или ODBC, например база данных Oracle. Когда вы добавляете объект DataRecordset путем подключения к одному из этих источников данных, Visio выделяет подключение в объекте DataConnection, и считается, что объект DataRecordset подключен.

Вы также можете добавить объект DataRecordset с помощью XML-файла, соответствующего классической XML-схеме набора записей данных ADO Classic (ADO версии 2.x), в качестве источника данных. Полученный объект DataRecordset считается не подключенным. Соединение между источником данных и объектом DataRecordset выполняется только в одну сторону: из источника данных в документ Visio. Если данные в источнике изменяются, вы можете обновить данные в документе, чтобы отразить эти изменения. Однако вы не можете изменить данные в документе и передать их в источник данных.

Добавление объектов DataRecordset

Чтобы добавить объект DataRecordset в коллекцию DataRecordsets, можно использовать один из следующих трех методов в зависимости от источника данных, к которому нужно подключиться, и необходимости передачи методу строки подключения и строки команды запроса или сохраненного файла подключения к данным Office (ODC), содержащего сведения о подключении и запросе.

В следующем примере макроса Visual Basic для приложений (VBA) показано, как можно использовать метод Add для подключения документа Visio к данным на листе Excel, в этом случае в примере книги ORGDATA.XLS, входящей в комплект Visio:

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

Примечание.

Если запустить этот код в неанглоязычных сборках Visio, путь к файлу ORGDATA.XLS, представленный в виде "Samples\1033\ORGDATA.XLS", будет другим. Подставьте правильный путь для своей версии Visio в коде.

Метод Add возвращает объект DataRecordset и использует четыре параметра:

  • ConnectionIDOrString. Идентификатор существующего объекта DataConnection или строки подключения для указания нового подключения к источнику данных. Если передается идентификатор существующего объекта DataConnection, используемого в одном или нескольких других наборах записей данных, набор записей данных становится транзакционным набором записей группы. Все наборы записей данных в группе обновляются при каждой операции обновления данных. Вы можете определить соответствующую строку подключения, применив сначала мастер выбора данных в пользовательском интерфейсе Visio, чтобы создать такое же подключение, записав макрос во время работы мастера и скопировав строку подключения из кода макроса.

  • CommandString. Строка, указывающая таблицу базы данных или лист Excel и поля (столбцы) в таблице или листе, содержащие данные, которые нужно запросить. Командная строка также передается методу DataRecordset.Refresh при обновлении данных в наборе записей.

  • AddOptions. Сочетание одного или нескольких значений из перечисления VisDataRecordsetAddOptions. Эти значения определяют конкретные действия набора записей данных и позволяют, например, предотвратить появление запрошенных данных из набора записей в окне Внешние данные в пользовательском интерфейсе Visio или их обновление с помощью действий пользователя. После назначения этого значения его нельзя изменить, пока существует объект DataRecordset.

  • Name. Необязательная строка, присваивающая набору записей данных отображаемое имя. Если указать отображение данных из набора записей в окне Внешние данные в пользовательском интерфейсе Visio, передаваемое имя появляется на вкладке этого окна, соответствующей набору записей данных. В нашем примере отсутствует существующее подключение к данным, поэтому в качестве первого параметра метода Add передается strConnection — определенная нами строка подключения. Для второго параметра мы передаем strCommand, определяемую нами командную строку, которая позволяет Visio выбрать все столбцы на указанном листе. В качестве третьего параметра метода Add передается нуль, чтобы указать действие по умолчанию для набора записей данных, а в качестве последнего параметра передается значение Org Data — отображаемое имя, определенное для набора записей данных.

В следующем примере кода показано, как получить объект DataConnection, созданный при добавлении объекта DataRecordset в коллекцию DataRecordsets. Он печатает строку подключения, связанную с объектом DataConnection, в окне интерпретации, обращаясь к свойству ConnectionString объекта DataConnection.

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

Аналогично получению строки подключения, связанной с объектом DataConnection, путем обращения к свойству ConnectionString вы можете получить командную строку, связанную с объектом DataRecordset, обратившись к его свойству CommandString. Оба этих свойства можно назначать, поэтому вы можете в любой момент изменить источник данных, связанный с объектом DataRecordset, или запрос, связанный с объектом DataConnection, при этом изменения не отображаются в документе до обновления данных. Дополнительные сведения об обновлении данных см. в статье О связывании фигур с данными.

Программный доступ к данным в наборе записей данных

Когда вы импортируете данные, приложение Visio назначает целочисленные идентификаторы строк, начиная с 1, для каждой строки данных в итоговом наборе данных с учетом порядка строк в исходном источнике данных. В Visio идентификаторы строк данных используются для отслеживания строк, если они связаны с фигурами и если обновляются данные. Если нужно получить доступ к строкам данных программным способом, используйте эти идентификаторы строк данных. Сведения о том, как операции обновления данных влияют на порядок строк, см. в статье О связывании фигур с данными.

Используйте метод DataRecordset.GetDataRowIDs для получения массива идентификаторов всех строк в наборе данных, где каждая строка представляет одну запись данных. Метод GetDataRowIDs использует в качестве параметра строку условий, соответствующую руководствам, указанным в API объекта данных ActiveX (ADO) для настройки свойства ADO.Filter. Указав соответствующие условия и используя операторы AND и OR для разделения предложений, можно отфильтровать сведения в наборе записей данных, чтобы возвратить только определенные строки набора данных. Чтобы не применять фильтр (т. е. для получения всех строк), передайте пустую строку (""). Дополнительные сведения о строках условий см. в статье Свойство Filter в справочнике по API ADO 2.x. После получения идентификаторов строк данных можно использовать метод DataRecordset.GetRowData, чтобы получить все данные, хранящиеся в каждом столбце строки данных. Дополнительные сведения о столбцах данных см. в статье О связывании фигур с данными.

В следующем примере кода показано, как использовать методы GetDataRowIDs и GetRowData, чтобы возвратить идентификатор каждой строки и получить данные, хранящиеся в каждом столбце каждой строки переданного набора записей данных. В нем используются два вложенных цикла For…Next для итерации по всем строкам в наборе записей, а затем для итерации по всем столбцам для каждой строки. Код выводит сведения, возвращаемые в окне интерпретации. Обратите внимание, что вы передаете пустую строку методу GetDataRowIDs, чтобы пропустить фильтрацию и получить все строки из набора записей. После вызова процедуры обратите внимание, что первый показанный набор данных (соответствующий первой строке данных) содержит заголовки всех столбцов данных в наборе записей данных.

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

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.