À propos de la liaison des formes à des données
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 a objets et les membres associés dans le modèle objet Visio. Cette rubrique traite les problèmes liés la seconde de ces aspects liant les formes dans votre dessin Visio à des données. Pour plus d’informations sur les autres aspects de connectivité des données, 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 :
- Collection DataRecordsets
- Objet DataRecordset
- Objet DataConnection
- Objet DataRecordsetChangedEvent
- Collection DataColumns
- Objet DataColumn
Après avoir connecter votre dessin Visio à une source de données externes, vous pouvez lier les formes du dessin aux données à partir de cette source par programme. Vous pouvez lier une ou plusieurs formes à une seule ligne de données dans un jeu d’enregistrements de données ou à plusieurs lignes de données dans les jeux d’enregistrements de données différentes. Toutefois, vous ne pouvez pas lier des formes à plusieurs lignes de données dans le même jeu d’enregistrements.
Vous pouvez lier des formes existantes à des données, une forme individuellement ou en tant que groupe ; ou, vous pouvez créer des formes et lier à des données simultanément. Vous pouvez spécifier que la correspondance entre les formes et de lignes de données, si vous connaissez, ou vous pouvez laisser Visio déterminer correspondance automatiquement, basé sur une comparaison entre les données de forme existantes et de données dans le jeu d’enregistrements de données.
Une fois que vous liez des formes aux données, vous pouvez afficher ces données graphiquement en ajoutant des graphiques de données à des formes. Pour plus d’informations sur les graphiques, consultez À propos de l’affichage graphique des données.
Les objets DataRecordset et DataColumn et la collection DataColumns disposent de plusieurs propriétés, méthodes et événements qui facilitent la liaison des données. En outre, plusieurs membres d’autres objets du modèle objet de Visio, notamment les objets Application, Document, Page, Selection, Shape et Window, sont concernés par la liaison des données.
Liaison des données et données de formes
Lier les formes données s’appuie sur le fait que vous pouvez attribuer des données de forme à toutes les formes Visio. Dans les versions de Visio antérieures à Visio 2007, les données de forme étaient appelées propriétés personnalisées.
Pour accéder aux et attribuer des données de forme dans le UI Visio, cliquez sur une forme, pointez sur données, puis cliquez sur données de forme. Par ailleurs, vous pouvez accéder et affecter manuellement ou par programme les données de forme dans la feuille de calcul Visio ShapeSheet. Pour afficher la feuille de calcul ShapeSheet (ShapeSheet) pour une forme sélectionnée, cliquez sur la forme, puis cliquez sur afficher la feuille ShapeSheet. Pour afficher cette commande, vous devez exécuter Visio en mode développeur. Pour exécuter Visio en mode développeur, cliquez sur le fichier , cliquez sur Options, cliquez sur avancé, puis, sous général, sélectionnez Exécuter en mode développeur.
Dans la feuille ShapeSheet, les données de forme sont inclues dans la section données de forme (précédemment appelée la section Propriétés personnalisées). Pour garder la compatibilité descendante, les membres de l’objet existant conservent « propriété personnalisée » ou « propriétés personnalisées » dans son nom. Si vous n’affectez pas les données de forme pour une forme donnée, aucune section données de forme n’apparaît dans la feuille ShapeSheet. Vous pouvez ajouter une section données de forme à une feuille ShapeSheet en affichant une feuille ShapeSheet comme décrit précédemment, clic droit sur n’importe où dans la fenêtre ShapeSheet en cliquant sur insérer une Section, sélection données de forme, puis en cliquant sur OK.
Une fois que vous liez des formes aux données, la plupart des colonnes de la section données de forme correspondent étroitement aux propriétés de la DataColumn objet. Par exemple, la colonne Étiquette dans la section Données de forme, qui fournit l’étiquette qui apparaît pour un élément de données de forme dans la boîte de dialogue Données de forme, correspond à la propriété DataColumn.DisplayName, qui contrôle le nom qui apparaît pour la colonne de données liée dans la fenêtre Données externes. Pour plus d’informations sur le fonctionnement de l’objet DataColumn, voir Récupération et définition des propriétés de colonne de données.
Identification des formes, des jeux d’enregistrements de données et des lignes de données
Visio utilise des numéros d’identification uniques pour identifier les formes, des jeux d’enregistrements et des lignes de données. ID de forme sont uniques uniquement dans l’étendue de la page, sur qu'il se trouve. Après avoir déterminé ces chiffres, vous pouvez les transmettre aux méthodes des objets Visio données associées pour spécifier exactement comment les formes dans votre diagramme doivent créer un lien vers lignes de données dans les jeux d’enregistrements de données disponibles.
Pour déterminer l’ID d’une forme, obtenez la valeur de la propriété Shape.ID. Visio attribue également aux formes des ID ou GUID uniques. La méthode Page.ShapeIDsToUniqueIDs prend un tableau d’ID de forme, ainsi qu’une valeur d’énumération de VisUniqueIDArgs, en spécifiant s’il convient de récupérer, d’ajouter ou de supprimer les GUID de forme. La méthode Page.ShapeIDsToUniqueIDs renvoie également un tableau d’ID uniques pour les formes transmises. Inversement, si vous connaissez les ID uniques d’un ensemble de formes, vous pouvez utiliser la méthode Page.UniqueIDsToShapeIDs pour obtenir les ID de forme de ces formes. Pour une sélection de formes, utilisez la méthode Selection.GetIDs pour obtenir les ID de forme de ces formes.
Pour déterminer l’ID d’un objet DataRecordset que vous ajoutez à la collection DataRecordsets, récupérez la valeur de la propriété DataRecordset.ID. Pour déterminer les ID de chacune des lignes d’un jeu d’enregistrements de données, appelez la méthode DataRecordset.GetDataRowIDs, qui renvoie un tableau d’ID de ligne. Pour plus d’informations, voir la section « Accès par programme aux données de jeux d’enregistrements de données » dans À propos de la connexion des données dans Visio.
Création de formes liées à des données
Lorsque vous souhaitez créer des formes déjà liées à des données sur une page de dessin qui soit ne contient pas de formes, soit en contient d’autres que celles que vous souhaitez lier, vous pouvez utiliser les méthodes Page.DropLinked et Page.DropManyLinkedU pour créer une ou plusieurs formes supplémentaires, déjà liées à des données. Ces méthodes ressemblent à la Page.Drop et Page.DropManyU méthodes qu’ils créent des formes supplémentaires à un emplacement spécifique dans la page ; mais par ailleurs, ils créent des liens entre les nouvelles formes et lignes de données spécifiées dans un jeu d’enregistrements de données spécifié.
La méthode DropLinked renvoie un nouvel objet Shape lié et fait appel aux paramètres suivants :
- ObjetÀDéplacer : forme spécifique (par exemple, Rectangle) que vous souhaitez créer.
- x : coordonnée x du centre de la nouvelle forme sur la page.
- y : coordonnée y du centre de la nouvelle forme sur la page.
- DataRecordsetID : valeur de la propriété ID de l’objet DataRecordset contenant les lignes de données avec lesquelles établir un lien.
- DataRowID : valeur de la propriété ID de la ligne de données avec laquelle établir un lien.
- ApplyDataGraphicAfterLink : valeur booléenne spécifiant s’il convient d’appliquer automatiquement le graphique de données de la forme si elle en possède déjà un et, dans le cas contraire, s’il convient d’appliquer le graphique de données le plus récemment utilisé. La valeur par défaut consiste ne pas à appliquer un graphique de données. Pour plus d’informations sur les graphiques, voir À propos de l’affichage graphique des données.
L’exemple de code suivant montre comment utiliser le DropLinked méthode pour créer une forme sur la page de dessin active centré en coordonnées de page (2, 2) et liée à une ligne de données. Il faut la DataRecordset objet passé, obtient ses ID, puis passe cet ID, ainsi que des ID de la ligne de données pour créer un lien, de la DropLinked méthode. La forme exclus subitement est un rectangle simple à partir du gabarit Basic_U.VSS qui s’ouvre le code, ancrée dans la fenêtre de dessin Visio.
Dans cet exemple, l’ID de la ligne de données est défini sur 1 ; avant d’exécuter le code, assurez-vous qu’une ligne avec cet ID existe ou modifiez la valeur d’ID dans le code.
Public Sub DropLinkedShape(vsoDataRecordset As Visio.DataRecordset)
Dim vsoShape As Visio.Shape
Dim vsoMaster As Visio.Master
Dim dblX As Double
Dim dblY As Double
Dim lngRowID As Long
Dim lngDataRecordsetID As Long
lngDataRecordsetID = vsoDataRecordset.ID
Set vsoMaster = Visio.Documents.OpenEx("Basic_U.VSS", 0).Masters("Rectangle")
x = 2
y = 2
lngRowID = 1
Set vsoShape = ActivePage.DropLinked(vsoMaster, dblX, dblY, lngDataRecordsetID, lngRowID, True)
End Sub
Le DropManyLinkedU méthode même crée un ensemble de formes liées, renvoyé sous forme de matrice d’ID de forme. Il faut comme des tableaux de paramètres de formes pour déplacer, les coordonnées et les lignes de données pour créer un lien vers. Les entrées en positions correspondantes index de tableau déterminent comment lignes formes et les données sont liées et où dans la page des formes individuelles ces derniers sont supprimés.
Liaison de formes existantes à des données
Lorsque vous savez exactement comment une ou plusieurs formes dans un dessin Visio existants et une ou plusieurs lignes dans un jeu d’enregistrements de données correspondent à l’autre, vous pouvez lier les formes existantes à des données des façons suivantes :
- Lier une seule forme à une ligne de données unique
- Créer un lien vers une ou plusieurs lignes de données une sélection de formes
- Lier plusieurs formes à plusieurs lignes de données
En outre, si vous ne connaissez pas la forme exacte du mappage des données, vous pouvez demander à Visio de réaliser la meilleure correspondance possible, sur la base des informations de correspondance limitées que vous fournissez.
Liaison d’une seule forme à une ligne de données
Pour lier une seule forme à une seule ligne de données, utilisez la méthode Shape.LinkToData. Cette méthode prend un ID de jeu d’enregistrements de données et données ligne ID mais aussi éventuellement une booléenne indicateur précisant si Afficher les données liées dans un graphique de données. La valeur par défaut consiste à afficher le graphique de données.
Liaison de plusieurs formes aux données
Deux membres de l’objet Selection, les méthodes Selection.LinkToData et Selection.AutomaticLink, ainsi que la méthode Page.LinkShapesToDataRows, permettent de lier une ou plusieurs formes dans une sélection de données.
La méthode Selection.LinkToData fonctionne d’une manière identique à l’objet Shape, sauf qu’elle lie une sélection de formes, au lieu d’une seule forme, à une seule ligne de données.
Si vous n’êtes pas sûr de la correspondance entre les formes et les lignes de données, mais que vous savez qu’une correspondance existe entre un attribut spécifique de chaque forme et les données d’une colonne du jeu d’enregistrements, la méthode Selection.AutomaticLink fournit un moyen de lier une sélection de formes existantes à plusieurs lignes de données. Notez que celui-ci doit être l’attribut même pour toutes les formes. Pour plus d’informations sur cette méthode, voir liaison aux données automatiquement.
La méthode Page.LinkShapesToDataRows est similaire à la méthode Selection.LinkToData dans le sens où elle est capable de lier plusieurs formes. Toutefois, vous utilisez cette méthode pour lier des formes sur une même page, plutôt que des formes dans une sélection, aux données. La méthode LinkShapesToDataRows lie des formes à plusieurs lignes de données, tandis que la méthode LinkToData lie plusieurs formes à une seule ligne. Pour lier des formes, transmettre le LinkShapesToDataRows méthode une paire de tableaux : une pour les formes et l’autre pour les lignes de données. Notez que les positions de matrice correspondants doivent correspondre. Par conséquent, par exemple, la forme à la position 1 dans la matrice de forme est liée aux données à la position 1 dans la matrice de ligne de données. Une fois encore, lorsque vous appelez la méthode, vous pouvez aussi spécifier si vous voulez appliquer un graphique de données existante à des formes liées.
Liaison automatique à des données
Utilisez la méthode Selection.AutomaticLink pour lier des valeurs de données de forme dans les formes sélectionnées, autrement dit, les formes attribuées à un objet de sélection, aux lignes de données dans un jeu d’enregistrements de données automatiquement, autrement dit, sans spécifier la correspondance exacte de toutes les formes et lignes de données. Pour offrir Visio informations suffisantes pour créer les liens, toutefois, vous devez fournir au moins un jeu de données correspondant : le nom de colonne dans la base de données, un type d’attribut de forme, et, si nécessaire, une valeur de forme simultanément la même position d’index de correspondantes passer à la méthode matrices.
Le type d’attribut de forme indique l’attribut de la forme sur laquelle baser la correspondance. Cet attribut peut être la valeur d’un élément de données de forme (auparavant appelé valeur de propriété personnalisée), le texte d’une forme ou une valeur parmi celles spécifiées dans l’énumération VisAutoLinkFieldTypes.
Remarque
Supposez, par exemple, que votre dessin contient une sélection de formes représentant des différents employés. Leur texte de forme identifie les formes, en l’occurrence les noms respectifs des employés (Vous pouvez utiliser certains noms d’employés du classeur OrgData.xls fourni avec Visio, puis vous connecter à cette source de données. Par défaut, OrgData.xls est installé au chemin d’accès suivant : C:\Program Files\Microsoft Office\Office15\Visio Content[ langID], où langID varie selon le pays ou la région.) Sur certains ordinateurs, le chemin d’accès peut inclure « Program Files (x86) » au lieu de « Program Files ».
Pour connecter ces formes à une base de données dans laquelle les données de chaque employé constituent une ligne dans la base de données, transmettez les paramètres suivants à la méthode AutomaticLink :
- DataRecordsetID : valeur de la propriété ID de l’objet DataRecordset contenant les lignes de données avec lesquelles établir une liaison. Dans l’exemple suivant, nous transmettons un jeu d’enregistrements existant à la procédure et obtenons son ID.
- ColumnNames() : tableau de chaînes constitué de noms de colonnes dans la base de données. Au moins une position du tableau doit posséder une valeur qui correspond aux valeurs à la même position dans les tableaux AutoLinkFieldTypes et FieldNames. Dans l’exemple suivant, nous transmettons un tableau qui contient le nom de colonne « Nom » à la position 0 du tableau.
- AutoLinkFieldTypes() : tableau de valeurs Long tirées de l’énumération VisAutoLinkFieldTypes, contenant les types d’attributs de forme. Au moins une position du tableau doit posséder une valeur qui correspond aux valeurs à la même position dans les tableaux ColumnNames et FieldNames. Dans l’exemple suivant, nous transmettons la valeur de l’énumération visAutoLinkShapeText à la position 0 du tableau.
- FieldNames() : tableau de chaînes représentant des valeurs de forme. Au moins une position du tableau FieldNames doit posséder une valeur correspondant aux valeurs à la même position dans les tableaux ColumnNames et AutoLinkFieldTypes.
- Pour la plupart des valeurs de TypesChampLienAuto, par exemple pour visAutoLinkShapeText, il n’est pas nécessaire de spécifier la valeur de NomsChamps ; vous pouvez transmettre une chaîne vide à la place. C’est le cas dans cet exemple, nous transmettons donc une chaîne vide. Cependant, lorsque vous transmettez les valeurs visAutoLinkCustPropsLabel, visAutoLinkUserRowName, visAutoLinkPropRowNameU ou visAutoLinkUserRowNameU de TypesChampLienAuto, vous devez transmettre une valeur pour NomsChamps qui spécifie dans son intégralité l’élément de données de forme afin d’effectuer une comparaison avec le nom de la colonne de données.
- AutoLinkBehavior : valeur de l’énumération VisAutoLinkBehaviors. Ces valeurs énumérées fournissent des options pour personnaliser la méthode, par exemple, pour remplacer les liens existants avec d’autres. L’exemple suivant transmet la valeur par défaut, 0.
- ShapeIDs() : tableau que la méthode remplit avec les ID des formes liées lors du renvoi.
L’exemple suivant montre une manière d’utiliser la AutomaticLink méthode pour lier des formes et les données automatiquement. L’exemple part du principe que vous avez connecté votre dessin aux données dans l’exemple de classeur OrgData.xls, comme expliqué ci-dessus. Notez que le code nécessite que la première colonne de données nommée « Nom », comme c’est le cas dans OrgData.xls. Notez également que le texte de la forme de chacune des formes dans votre dessin que vous voulez lier aux données doit correspondre à un noms dans la colonne « Nom » dans OrgData.xls de.
Public Sub LinkToDataAutomatically(vsoDataRecordset As Visio.DataRecordset)
Dim vsoSelection As Visio.Selection
Dim columnNames(1) As String
Dim fieldTypes(1) As Long
Dim fieldNames(1) As String
Dim shapesLinked() As Long
columnNames(0) = "Name"
fieldTypes(0) = Visio.VisAutoLinkFieldTypes.visAutoLinkShapeText
fieldNames(0) = ""
ActiveWindow.DeselectAll
ActiveWindow.SelectAll
Set vsoSelection = ActiveWindow.Selection
vsoSelection.AutomaticLink vsoDataRecordset.ID, _
columnNames, _
fieldTypes, _
fieldNames, 0, shapesLinked
End Sub
Découverte de liens entre des formes et des données
Utilisez les méthodes suivantes pour déterminer les formes sont liées aux données. Le fait de connaître comment les formes sont liées aux données permet d’éviter les conflits et les liens rompus :
- Page.GetShapesLinkedToData
- Page.GetShapesLinkedToDataRow
- Shape.GetLinkedDataRow
- Shape.GetCustomPropertyLinkedColumn
- Shape.GetCustomPropertiesLinkedToData
- Shape.IsCustomPropertyLinked
Rupture de liens entre des formes et des données
Comme leur nom l’indique, vous pouvez utiliser les méthodes Shape.BreakLinkToData et Selection.BreakLinkToData pour rompre par programme des liens existants entre des formes et des données. Par ailleurs, différentes modifications sont apportées dans l’interface utilisateur pouvant rompre ces liens. Par exemple, si un utilisateur supprime un jeu d’enregistrements de données, une ligne liée, ou une forme liée, ou s’il clique sur Supprimer le lien de la ligne dans le menu contextuel de la forme ou sur Supprimer le lien dans le menu contextuel d’une ligne, il risque de provoquer la rupture des liens.
Sauf dans le cas où l’utilisateur supprime un jeu d’enregistrements de données, une ligne ou une forme, toutes ces actions déclenchent l’événement Shape.ShapeLinkDeleted. Vous pouvez également utiliser les méthodes énumérées dans la section précédente pour déterminer l’état du lien.
Obtention et définition des propriétés de colonne de données
Chaque DataRecordset objet contient un DataColumns collection de tous les DataColumn associés liés des objets le DataRecordsetobjet. Ces objets permettent de mapper les colonnes de données aux cellules dans la section données de forme de la feuille ShapeSheet.
L’exemple suivant montre comment récupérer la valeur de la cellule Étiquette pour la première colonne du jeu d’enregistrements de données transmis à la méthode et de l’afficher dans la fenêtre Exécution. Il définit ensuite la valeur et l’affiche. Puis il définit la valeur et affiche la nouvelle valeur.
Modification de cette valeur modifie l’étiquette de l’élément de données de forme dans le données de forme boîte de dialogue de toutes les formes liées à des lignes dans le jeu d’enregistrements de données. Pour obtenir et définir la valeur de la cellule Étiquette, nous transmettons la valeur visDataColumnPropertyDisplayName depuis l’énumération VisDataColumnProperties vers les méthodes DataColumn.GetProperty et DataColumn.SetProperty.
Public Sub ChangeColumnProperties(vsoDataRecordset As Visio.DataRecordset)
Dim strPropertyName As String
Dim strNewName As String
Dim vsoDataColumn As Visio.DataColumn
strNewName = "New Property Name"
Set vsoDataColumn = vsoDataRecordset.DataColumns(1)
strPropertyName = vsoDataColumn.GetProperty(visDataColumnPropertyDisplayName)
Debug.Print strPropertyName
vsoDataColumn.SetProperty visDataColumnPropertyDisplayName, strNewName
strPropertyName = vsoDataColumn.GetProperty(visDataColumnPropertyDisplayName)
Debug.Print strPropertyName
End Sub
Actualisation des données liées et résolution des conflits
Lorsque les données changent dans la source de données à laquelle votre dessin est connecté, vous pouvez actualiser les données dans votre dessin Visio pour refléter ces modifications. Vous pouvez spécifier une actualisation automatique des données par Visio à un intervalle spécifié en définissant la propriété DataRecordset.RefreshInterval. Vous pouvez actualiser les données par programme en appelant la méthode DataRecordset.Refresh.
En outre, vous pouvez résoudre les conflits dans la relation entre les formes et les lignes de données. Par exemple, des conflits peuvent survenir lorsque vous actualisez le jeu d’enregistrements de données et des lignes de données à laquelle les formes ont été liés avant l’opération d’actualisation ne sont plus existent, en raison des modifications apportées à la source de données. Autres conflits sont possibles que lorsque deux ou plusieurs lignes dans le jeu d’enregistrements actualisé ont des clés primaires identiques.
Actualisation automatique de données liées
Lorsque vous créez un objet DataRecordset, sa propriété RefreshInterval prend la valeur zéro (0) par défaut. Cette valeur indique que les données ne sont pas actualisées automatiquement. Si vous définissez DataRecordset.RefreshInterval sur une valeur positive de type Long, vous pouvez spécifier l’intervalle en minutes entres les actualisations automatiques. Vous pouvez spécifier l’intervalle de minimale est une minute. Ce paramètre correspond à la valeur d’un utilisateur peut définir dans les configurer l’actualisation boîte de dialogue.
Pour déterminer la date et l’heure de la dernière action d’actualisation, obtenez la valeur de la propriété DataRecordset.TimeRefreshed.
En outre, la propriété DataRecordset.RefreshSettings vous permet de personnaliser les actualisations automatiques des données. En attribuant à cette propriété une combinaison des valeurs de l’énumération VisRefreshSettings, vous pouvez spécifier une des deux actions suivantes :
- L’interface utilisateur de conflits d’actualisation (le actualiser les conflits volet Office) est désactivé. Pour plus d’informations, voir la section suivante.
- Opérations d’actualisation automatiquement d’écraser les modifications apportées aux données dans l’interface utilisateur. La valeur par défaut pour cette propriété est égal à 0, ce qui signifie qu’aucune de ces événements se produisent.
Identification des lignes de jeux d’enregistrements de données pour les opérations d’actualisation
Étant donné que les formes sont liées par leur ID forme lignes de données spécifiques, lorsque Visio actualise les données liées, il doit déterminer les lignes dans le jeu d’enregistrements de données liées ou jeux d’enregistrements ont été ajoutées, modifié ou supprimé depuis la dernière fois que les données a été actualisées. Pour identifier ces lignes, Visio utilise la ligne d’ID assignées à des lignes dans le jeu d’enregistrements de données. Visio peut attribuer ces ID ligne deux façons, selon que vous avez désignées clés primaires pour le jeu d’enregistrements de données lorsque vous en avez créé.
Actualisation des jeux d’enregistrements de données ne possédant pas de clés primaires
Lorsque vous créez un jeu d’enregistrements de données, Microsoft Visio attribue des ID de ligne à toutes les lignes contenues dans le jeu d’enregistrements, selon l’ordre existant des lignes dans la source de données. En conséquence, la première ligne dans le jeu d’enregistrements est toujours attribuée ligne ID 1, la deuxième ligne ID 2 et ainsi de suite.
Par la suite, vous pouvez ajouter ou supprimer des lignes de données à partir de la source de données d’origine. Ensuite, lorsque vous actualisez les données, le jeu d’enregistrements de données reflète ces modifications. Par conséquent, l’ordre de ligne dans le jeu d’enregistrements de données peut changer.
Par exemple, dans un jeu d’enregistrements de données à cinq lignes, si la quatrième ligne de la source de données est supprimée, lorsque Visio actualise le jeu d’enregistrements de données connecté à cette source de données, la cinquième ligne du jeu d’enregistrements de données devient la quatrième ligne et se voit attribuer l’ID de ligne 4. L’ID de ligne 5 est supprimé du jeu d’enregistrements de données. ID de la ligne 5 est supprimé du jeu d’enregistrements de données.
Par conséquent, les formes liées à la ligne 5 ID espacé les liens vers les et formes liées à la ligne 4 ID désormais obtenir des données de la ligne précédemment dans la cinquième position. Comme vous le voyez, ne pas attribution clés primaires aux jeux d’enregistrements de données lorsque vous créez les peut entraîner dans les liens rompus entre les formes et des données ou dans Visio liés formes liaison à des lignes autre que celles à laquelle vous souhaitez.
Actualisation des jeux d’enregistrements de données possédant des clés primaires
Pour éviter ces liens rompus ou discordantes en attribuant des clés primaires aux jeux d’enregistrements de données. Une clé primaire identifie le nom de la colonne de données ou les colonnes qui contiennent des identificateurs uniques pour chaque ligne. La valeur dans la colonne clé primaire pour chaque ligne identifie de cette ligne dans le jeu d’enregistrements de données. Clés primaires sont souvent des valeurs d’ID, mais vous pouvez définir une colonne ou une combinaison de colonnes devant être la clé primaire. Toutefois, pour obtenir des résultats cohérents lorsque vous actualisez les données, il est essentiel de rendre la valeur de colonne clé primaire (ou l’ensemble de valeurs pour plusieurs colonnes de clé primaire) uniques pour chaque ligne.
Par conséquent, lorsque vous actualisez ou de Visio actualise un jeu d’enregistrements de données qui inclut les clés primaires, ses lignes de conservent la même ligne ID qu’ils avaient avant l’opération d’actualisation. Étant donné que Visio lie des formes à des lignes de données par ID — ID à ID de ligne de la forme, et, car l’ID de ligne restent les mêmes après une opération d’actualisation, données liés les formes restent liés à la ligne correcte. Notez que les ID de ligne ne sont jamais recyclés pour un donné un jeu d’enregistrements de données.
Utilisez la méthode DataRecordset.GetPrimaryKey pour déterminer la clé primaire existante d’un jeu d’enregistrements de données si elle est spécifiée. Cette méthode renvoie le paramètre de clé primaire du jeu d’enregistrements de données, en tant que valeur de l’énumération VisPrimaryKeySettings. Utilisez des clés primaires uniques ou composites. Une seule touche base l’identification de ligne sur les valeurs dans une seule colonne. Une clé primaire composite utilise deux ou plusieurs colonnes pour identifier une ligne de manière unique.
Si le paramètre de clé primaire est visKeySingle ou visKeyComposite, la méthode renvoie également une matrice de chaînes de nom de colonne clé primaires. Si le paramètre de clé primaire est visKeyRowOrder, la valeur par défaut, la méthode renvoie une matrice vide de clés primaires.
De même, vous pouvez utiliser la méthode DataRecordset.SetPrimaryKey pour spécifier le paramètre de clé primaire du jeu d’enregistrements de données, ainsi que le nom de la ou des colonnes que vous souhaitez définir comme colonne(s) de clé primaire. Une fois encore, lorsque vous définissez les clés primaires, assurez-vous que l’ou les colonnes que vous choisissez d’être colonnes de clé primaire contiennent des valeurs uniques (ou ensembles de valeurs) pour chaque ligne.
Actualisation des données liées par programme
Pour actualiser par programme un jeu d’enregistrements de données connecté, appelez la méthode DataRecordset.Refresh.
Appel à cette méthode exécute la chaîne de requête associée le jeu d’enregistrements de données et puis met à jour les formes liées avec les données renvoyées par la requête. L’application de la méthode Refresh sur un objet DataRecordset entraîne l’actualisation de tous les autres objets DataRecordset associés au même objet DataConnection (c’est-à-dire ayant la même valeur pour leur propriété DataConnection). DataRecordset objets partage la même DataConnection valeur de propriété sont appelés jeux d’enregistrements de données traités.
Si la méthode Refresh entraîne des conflits, Visio affiche le volet Office Actualiser les conflits dans l’interface, à moins de définir que la propriété RefreshSettings ne contienne la valeur énumérée de visRefreshNoReconciliationUI.
Avant d’actualiser des données liées, si vous souhaitez modifier la requête utilisée par Visio pour extraire les données dans le but d’interroger une autre table de la même base de données, attribuez une nouvelle valeur à la propriété DataRecordset.CommandString. Pour vous connecter à une nouvelle source de données, définissez les valeurs des propriétés DataRecordset.CommandString et DataConnection.ConnectionString.
La méthode DataRecordset.GetLastDataError obtient le code d’erreur ADO (Active X Data Objects), la description ADO et l’ID du jeu d’enregistrements de données associé à l’erreur la plus récente causée par l’ajout d’un nouveau jeu d’enregistrements de données ou l’actualisation des données dans un jeu existant.
Identification et résolution des conflits
Lors de l’actualisation des données (par vous ou par Visio) et si un conflit survient, vous pouvez utiliser les méthodes DataRecordset.GetAllRefreshConflicts et DataRecordset.GetMatchingRowsForRefreshConflict pour déterminer les raisons du conflit. Le GetAllRefreshConflicts méthode renvoie une matrice de formes pour lesquelles il existe un conflit entre les données sous la forme et les données dans la ligne de jeu d’enregistrements de données à laquelle la forme est liée. Pour déterminer les lignes de jeu d’enregistrements de données a mis au point le conflit, vous pouvez ensuite passer chacune de ces formes pour le GetMatchingRowsForRefreshConflict méthode, qui renvoie une matrice de lignes qui sont en conflit.
Lignes dans le jeu d’enregistrements de données peuvent entrer en conflit lorsque deux ou plusieurs d'entre eux ont des clés primaires identiques et peuvent créer une liaison à la même forme. Lorsque cela se produit, GetMatchingRowsForRefreshConflict renvoie une matrice contenant les ID de ligne au moins deux.
Conflits peuvent également se produire quand une ligne précédemment données liées à partir du jeu d’enregistrements de données est supprimée. Lorsque cela se produit, la méthode renvoie une matrice vide.
Pour résoudre le conflit, transmettez la forme à la méthode DataRecordset.RemoveRefreshConflict, qui supprime les informations de conflit du document actif.
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.