Partager via


À propos de la connexion des données dans Visio

Remarque

Seuls les utilisateurs titulaires d’une licence Microsoft Visio Professionnel 2013 ont accès aux fonctions de connectivité des données.

Dans Visio, la connectivité des données comporte quatre aspects :

  • la connexion à une source de données ;

  • la liaison des formes avec des données ;

  • l’affichage graphique des données liées ;

  • l’actualisation des données liées qui ont été modifiées dans la source de données, la mise à jour des formes liées et la résolution de tout conflit qui peut en résulter.

En règle générale, vous abordez ces aspects dans l’ordre dans lequel ils sont répertoriés. Vous connectez d’abord votre dessin Visio à une source de données, vous liez les formes de votre dessin aux données de la source de données, vous affichez graphiquement les données dans les formes liées et vous actualisez les données liées lorsque cela est nécessaire. Chacun de ces aspects comporte de nouveaux objets et membres associés dans le modèle objet Visio. Cette rubrique traite du premier aspect, à savoir la connexion de votre dessin Visio à une source de données. Pour plus d’informations sur les autres aspects, voir les rubriques suivantes :

Pour connecter votre dessin Visio à une source de données par programme, vous pouvez utiliser l’API de Visio pour la connectivité de données, qui inclut les objets suivants et leurs membres associés :

À propos des jeux d’enregistrements de données (Data Recordsets) et des connexions de données

Chaque objet Document Visio possède une collection DataRecordsets, qui reste vide tant que vous n’avez pas établi de connexion à une source de données. Pour connecter un document Visio à une source de données, vous devez ajouter un objet DataRecordset à la collection DataRecordsets du document. Un objet DataRecordset possède lui aussi une collection DataColumns d’objets DataColumn, chacun correspondant à une colonne (un champ) dans la source de données.

Les sources de données auxquelles vous pouvez vous connecter comprennent les feuilles de calcul Excel, les bases de données Access et SQL Server, les listes SharePoint, ainsi que d’autres sources de données OLEDB ou ODBC, telles qu’une base de données Oracle. Lorsque vous ajoutez un objet DataRecordset en vous connectant à l’une de ces sources de données, Visio analyse la connexion dans un objet DataConnection ; l’objet DataRecordset est alors considéré comme connecté.

Vous pouvez également ajouter un objet DataRecordset en utilisant un fichier XML conforme au schéma XML Data Recordset ADO Classic (ADO version 2.x) en tant que source de données. L’objet DataRecordset résultant est considéré comme non connecté. La connexion entre une source de données et un objet DataRecordset est unidirectionnelle, de la source de données vers le dessin Visio. Si les données sont modifiées dans la source, vous pouvez actualiser les données dans le dessin. Par contre, si vous apportez des modifications aux données dans le dessin, vous ne pourrez pas actualiser les données correspondantes dans la source de données.

Ajout d’objets DataRecordset

Pour ajouter un objet DataRecordset à la collection DataRecordsets, vous pouvez utiliser l’une des trois méthodes suivantes, selon la source de données à laquelle vous souhaitez vous connecter et selon que vous souhaitez envoyer une chaîne de connexion et une chaîne de commande de requête ou un fichier ODC (Office Data Connection) contenant la connexion et les informations de requête :

L’exemple de macro Visual Basic pour Applications (VBA) suivant montre comment utiliser la méthode Add pour connecter un dessin Visio à des données dans une feuille de calcul Excel, en l’occurrence, dans le classeur ORGDATA.XLS fourni avec 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

Remarque

Si vous exécutez ce code dans une version de Visio dont la langue est autre que l’anglais, le chemin d’accès au fichier ORGDATA.XLS, (« Samples\1033\ORGDATA.XLS », dans cet exemple) sera différent. Vous devez donc remplacer le chemin d’accès dans votre code par celui de votre version de Visio.

La méthode Add renvoie un objet DataRecordset en faisant appel à quatre paramètres :

  • ConnectionIDOrString ID d’un objet DataConnection existant ou chaîne de connexion spécifiant une nouvelle connexion de source de données. Si vous transmettez l’ID d’un objet DataConnection existant actuellement utilisé par un ou plusieurs jeux d’enregistrements de données, ces derniers deviennent un groupe de jeux d’enregistrements avec transaction. Tous les jeux d’enregistrements de données du groupe sont réactualisés dès qu’une actualisation des données a lieu. Vous pouvez déterminer une chaîne de connexion appropriée en utilisant d’abord l’Assistant Sélecteur de données de l’interface utilisateur Visio pour établir la même connexion, puis en enregistrant une macro pendant l’exécution de l’assistant, enfin en copiant la chaîne de connexion du code de la macro.

  • CommandString Chaîne spécifiant la table de base de données ou la feuille de calcul Excel, ainsi que les champs (colonnes) de la table ou de la feuille de calcul contenant les données que vous souhaitez interroger. La chaîne de commande est également transmise à la méthode DataRecordset.Refresh lors de l’actualisation des données du jeu d’enregistrements.

  • AddOptions Combinaison d’une ou plusieurs valeurs de l’énumération VisDataRecordsetAddOptions. Ces valeurs spécifient certains comportements des jeux d’enregistrements de données, par exemple pour empêcher les données interrogées dans le jeu d’enregistrements d’apparaître dans la fenêtre Données externes de l’interface Visio ou pour les empêcher d’être actualisées par des actions utilisateur. Une fois que vous avez affecté cette valeur, vous ne pouvez plus la changer pendant la durée de l’objet DataRecordset.

  • Name Chaîne facultative qui attribue un nom d’affichage au jeu d’enregistrements de données. Si vous spécifiez que les données du jeu d’enregistrements doivent s’afficher dans la fenêtre Données externes de l’interface Visio, le nom que vous indiquez s’affiche dans l’onglet de cette fenêtre qui correspond au jeu d’enregistrements de données. Dans notre exemple, il n’existe pas de connexion de données, donc, pour le premier paramètre de la méthode Add, nous spécifions strConnection, la chaîne de connexion que nous avons définie. Pour le deuxième paramètre, nous spécifions strCommand, la chaîne de commande que nous avons définie, qui indique à Visio de sélectionner toutes les colonnes de la feuille de calcul spécifiée. Quant au troisième paramètre de la méthode Add, nous indiquons zéro pour spécifier le comportement par défaut du jeu d’enregistrements de données ; le dernier paramètre reçoit Org Data, le nom d’affichage que nous avons défini pour le jeu d’enregistrements de données.

L’exemple de code suivant montre comment obtenir l’objet DataConnection créé lorsque nous avons ajouté un objet DataRecordset à la collection DataRecordsets. Il affiche la chaîne de connexion associée à l’objet DataConnection dans la fenêtre Exécution en accédant à la propriété ConnectionString de l’objet DataConnection.

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

De la même manière que vous pouvez obtenir la chaîne de connexion associée à un objet DataConnection en accédant à sa propriété ConnectionString, vous pouvez obtenir la chaîne de commande associée à un objet DataRecordset en accédant à sa propriété CommandString. Ces deux propriétés sont modifiables, vous pouvez donc changer la source de données associée à un objet DataRecordset ou la requête associée à un objet DataConnection à tout moment, bien que les changements ne soient pas reflétés dans votre dessin tant que vous n’avez pas actualisé les données. Pour plus d’informations sur l’actualisation des données, consultez À propos de l’association de formes à des données.

Accès par programme aux données de recordsets de données

Lorsque vous importez des données, Visio affecte des ID de lignes d’entiers, en commençant par le numéro 1, à chaque ligne de données dans le jeu d’enregistrements de données résultant, sur la base de l’ordre des lignes de la source de données d’origine. Visio utilise les ID de lignes de données pour effectuer le suivi des lignes lorsqu’elles sont liées à des formes et lors de l’actualisation des données. Si vous souhaitez accéder aux lignes de données par programme, vous devez obligatoirement utiliser ces ID. Pour plus d’informations sur l’impact des opérations d’actualisation des données sur l’ordre des lignes, consultez À propos de l’association de formes à des données.

Utilisez la méthode DataRecordset.GetDataRowIDs pour obtenir un tableau des ID de toutes les lignes d’un jeu d’enregistrements de données, où chaque ligne représente un enregistrement de données unique. La méthode GetDataRowIDs prend comme paramètre une chaîne de critères, chaîne conforme aux instructions définies dans l’API ActiveX Data Object (ADO) pour la spécification de la propriété ADO.Filter. En spécifiant les critères appropriés et à l'aide des opérateurs AND et OR pour séparer des clauses, vous pouvez filtrer les informations dans le jeu d'enregistrements de données, afin de renvoyer uniquement certaines lignes de jeu d'enregistrements de données sélectionnées. Pour ne pas appliquer de filtre (ce qui équivaut à obtenir toutes les lignes), transférez une chaîne vide (""). Pour plus d’informations sur les chaînes de critères, voir la rubrique Property Filter dans la référence de l’API ADO 2. x. Une fois les ID de lignes de données récupérés, vous pouvez utiliser la méthode DataRecordset.GetRowData pour obtenir toutes les données stockées dans chaque colonne de la ligne de données. Pour plus d’informations sur les colonnes de données, consultez À propos de l’association de formes à des données.

L’exemple de code suivant montre comment utiliser les méthodes GetDataRowIDs et GetRowData pour renvoyer l’ID de ligne de chaque ligne, puis obtenir les données stockées dans chaque colonne et chaque ligne du jeu d’enregistrements de données spécifié. Il fait appel à deux boucles For…Next imbriquées pour parcourir toutes les lignes du jeu d’enregistrements puis, dans chaque ligne, parcourir toutes les colonnes. Le code affiche les informations renvoyées dans la fenêtre Exécution. Notez que vous affectez une chaîne vide à la méthode GetDataRowIDs pour contourner le filtrage et obtenir ainsi toutes les lignes du jeu d’enregistrements. Une fois la procédure appelée, notez que le premier jeu de données affiché (correspondant à la première ligne de données) contient les en-têtes de toutes les colonnes de données du jeu d’enregistrements de données.

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

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.