Acerca de la conexión de datos en Visio

Nota:

Las características de conectividad de datos están disponibles solo para los usuarios con licencia de Microsoft Visio Profesional 2013.

Existen cuatro aspectos de conectividad de datos en Visio:

  • Conectar con un origen de datos

  • Vincular formas a datos

  • Mostrar datos vinculados gráficamente

  • Actualizar los datos vinculados que han cambiado en el origen de datos, actualizar las formas vinculadas y resolver los conflictos posteriores que puedan surgir

Normalmente, estos aspectos se plantean en el orden en el que se enumeran; es decir, primero conecte el dibujo de Visio a un origen de datos, después vincule las formas del dibujo a datos del origen de datos, muestre los datos de las formas vinculadas gráficamente y actualice los datos vinculados si fuese necesario. Cada uno de estos aspectos tiene nuevos objetos y miembros asociados en el modelo de objetos de Visio. En este tema se trata el primero de estos aspectos: conectar el dibujo de Visio a un origen de datos. Para obtener más información sobre el resto de los aspectos de conectividad de datos, vea los temas siguientes:

Para conectar los dibujos de Visio a un origen de datos mediante programación, puede usar la API de Visio para la conectividad de datos, que incluye los siguientes objetos y sus miembros asociados:

Conjuntos de registros de datos y las conexiones de datos

Cada objeto Document de Visio tiene una colección DataRecordsets, que estará vacía hasta que se establezca una conexión con un origen de datos. Para conectar un documento de Visio a un origen de datos, se agrega un objeto DataRecordset a la colección DataRecordsets del documento. A su vez, un objeto DataRecordset tiene una colección DataColumns de objetos DataColumn, cada uno de los cuales está asignado a la columna (campo) correspondiente del origen de datos.

Los orígenes de datos con los que puede conectar incluyen las hojas de cálculo de Excel, las bases de datos de Access y SQL Server, las listas de SharePoint y otros orígenes de datos OLEDB u ODBC, como las bases de datos de Oracle. Cuando agrega un objeto DataRecordset al conectar uno de estos orígenes de datos, Visio resume la conexión en un objeto DataConnection, y se dice que el objeto DataRecordset está conectado.

También puede agregar un objeto DataRecordset mediante un archivo XML que se ajusta al esquema XML del conjunto de registros de datos clásico de ADO como origen de datos (versión 2.x de ADO). Se dice que objeto DataRecordset resultante está sin conexión. La conexión entre un origen de datos y un objeto DataRecordset solo va en una dirección, desde el origen de datos hasta el dibujo de Visio. Si cambian los datos del origen, puede actualizar los datos del dibujo para reflejar dichos cambios. Sin embargo, no podrá hacer cambios en los datos del dibujo y aplicar esos cambios posteriormente en el origen de datos.

Agregar objetos DataRecordset

Para agregar un objeto DataRecordset a la colección DataRecordsets, puede utilizar uno de los tres métodos siguientes, dependiendo del origen de datos con el que desee conectar y si desea pasar el método una cadena de conexión y una cadena de consulta o un archivo de conexión de datos de Office (ODC) guardado que contiene la conexión y la información de consulta:

La siguiente macro de ejemplo de Visual Basic para Aplicaciones (VBA) muestra cómo se debería usar el método Add para conectar un dibujo de Visio con datos de una hoja de cálculo de Excel, en este caso, con el libro ORGDATA.XLS de ejemplo que se incluye en 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

Nota:

Si ejecuta este código en versiones que no estén en inglés de Visio, la ruta de acceso al archivo ORGDATA.XLS, que se muestra aquí como "Samples\1033\ORGDATA.XLS" será distinta. Sustituya la ruta correcta de su versión de Visio en el código.

El método Add devuelve un objeto DataRecordset y toma cuatro parámetros:

  • ConnectionIDOrString: identificador de un objeto DataConnection existente o cadena de conexión para especificar una nueva conexión al origen de datos. Si pasa el identificador de un objeto DataConnection existente que está siendo usado actualmente por uno o más conjuntos de registros de datos, dichos conjuntos de registros se convierten en un conjunto de registros del grupo de la transacción. Todos los conjuntos de registros de datos del grupo se actualizan cada vez que se produce una operación de actualización de datos. Puede determinar una cadena de conexión apropiada usando primero el Asistente para selector de datos de la interfaz de usuario de Visio con el fin de realizar la misma conexión, grabar una macro mientras se ejecuta el asistente y, después, copiar la cadena de conexión desde el código de la macro.

  • CommandString: cadena que especifica la tabla de base de datos o la hoja de cálculo de Excel y los campos (columnas) de la tabla o de la hoja que contienen los datos sobre los que desea realizar la consulta. La cadena de comando también se pasa al método DataRecordset.Refresh cuando se actualizan los datos del conjunto de registros de datos.

  • AddOptions: combinación de uno o más valores de la enumeración VisDataRecordsetAddOptions. Estos valores especifican ciertos comportamientos de los conjuntos de registros de datos y permiten, por ejemplo, evitar que los datos consultados en el conjunto de registros aparezcan en la ventana Datos externos de la UI de Visio o que se actualicen mediante las acciones de los usuarios. Una vez asignado este valor, no se puede cambiar mientras dure el objeto DataRecordset.

  • Name: cadena opcional que da un nombre para mostrar al conjunto de registros de datos. Si especifica que los datos del conjunto de registros se muestren en la ventana Datos externos de la interfaz de usuario de Visio, el nombre que pase aparecerá en la ficha de la ventana que corresponda al conjunto de registro de datos. En este ejemplo, no hay ninguna conexión de datos existente; por tanto, para el primer parámetro del método Add, se pasa strConnection, la cadena de conexión que se haya definido. Para el segundo parámetro, se pasa strCommand, la cadena de comando que se haya definido, que conduce a Visio a seleccionar todas las columnas de la hoja de cálculo que se hayan especificado. Para el tercer parámetro del método Add, se pasa cero para especificar el comportamiento predeterminado del conjunto de registros de datos, y para el último parámetro, se pasa Org Data, el nombre para mostrar que se ha definido para el conjunto de registros de datos.

El código de ejemplo siguiente muestra cómo obtener el objeto DataConnection que se creó al agregar un objeto DataRecordset a la colección DataRecordsets. Se imprime la cadena de conexión asociada con el objeto DataConnection de la ventana Inmediato obteniendo acceso a la propiedad ConnectionString del objeto DataConnection.

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

De la misma forma que puede obtener la cadena de conexión asociada a un objeto DataConnection accediendo a su propiedad ConnectionString, también puede obtener la cadena de comando asociada a un objeto DataRecordset accediendo a su propiedad CommandString. Ambas propiedades se pueden asignar, de modo que puede cambiar el origen de datos asociado a un objeto DataRecordset o la consulta asociada a un objeto DataConnection en cualquier momento, aunque los cambios no se reflejarán en el dibujo hasta que actualice los datos. Para obtener más información sobre la actualización de datos, vea Vinculación de formas a datos.

Acceder a los datos de los conjuntos de registros de datos mediante programación

Cuando se importan Datos, Visio asigna identificadores de filas de enteros, comenzando con el número 1, a cada fila de datos del conjunto de registros de datos resultante, basándose en el orden de filas del origen datos original. Visio utiliza los identificadores de filas de datos para hacer un seguimiento de las filas cuando éstas están vinculadas a formas y cuando se actualizan los datos. Si desea obtener acceso a las filas de datos mediante programación, debe utilizar estos identificadores de filas de datos. Para obtener más información sobre cómo afectan las operaciones de actualización de datos al orden de las filas, vea Vinculación de formas a datos.

Puede usar el método DataRecordset.GetDataRowIDs para obtener una matriz de los identificadores de todas las filas de un conjunto de registros de datos, donde cada fila representa un solo registro de datos. El método GetDataRowIDs adopta como parámetro una cadena de criterios, que se ajusta a las directrices especificadas en la API de ActiveX Data Object (ADO) para el establecimiento de la propiedad ADO.Filter. Mediante la especificación de los criterios adecuados y el uso de los operadores AND y OR para separar cláusulas, puede filtrar la información del conjunto de registros de datos para que solo se devuelvan algunas filas de este conjunto de registros selectivamente. Para no aplicar ningún filtro (es decir, para obtener todas las filas), pase una cadena vacía (""). Para obtener más información sobre las cadenas de criterios, vea el tema Propiedad Filter de la Referencia de la API de ADO 2.x. Una vez recuperados los identificadores de las filas de datos, puede usar el método DataRecordset.GetRowData para obtener todos los datos almacenados en cada columna de la fila de datos. Para obtener más información sobre columnas de datos, vea Vinculación de formas a datos.

El código de ejemplo siguiente muestra cómo utilizar los métodos GetDataRowIDs y GetRowData para devolver el identificador de cada fila y obtener los datos almacenados en todas las columnas de todas las filas del conjunto de registros de datos en los que se pasan. Se utilizan dos bucles anidados For…Next para recorrer en iteración todas las filas del conjunto de registros y, a continuación, recorrer en iteración todas las columnas de cada una de las filas. El código muestra la información devuelta en la ventana Inmediato. Observe que se pasa una cadena vacía al método GetDataRowIDs con el fin de omitir el proceso de filtrado y obtener todas las filas del conjunto de registros. Después de llamar al procedimiento, observe que el primer conjunto de datos que se muestra (correspondiente a la primera fila de datos) contiene los encabezados de todas las columnas de datos del conjunto de registros de datos.

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

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.