図形からデータへのリンクについて

注:

データ接続機能は、Microsoft Visio Professional 2013 のライセンスを取得したユーザーのみが使用できます。

Visio でのデータ接続には、4 つの側面があります。

  • データ ファイルに接続する
  • 図形のデータにリンクする
  • リンクされたデータのグラフィック表示
  • データ ソースで変更されたリンク済みデータの更新、リンクされた図形の更新、以後に発生する可能性のある競合の解決

通常は、ここに示される順序でこれらの側面にアプローチします。つまり、最初に Visio 図面をデータ ソースに接続し、次に図面に含まれる図形をデータ ソース内のデータにリンクさせ、その図形のデータをグラフィック表示し、必要に応じてリンクされたデータを更新します。

Visio オブジェクト モデルには、上記の 4 つの側面それぞれについて、関連するオブジェクトやメンバーがあります。 このトピックは、第 2 の、Visio 図面内の図形をデータにリンクすることに関するものです。 データ接続の他の側面については次のトピックを参照してください。

Visio の図面をプログラムでデータ ソースに接続するときは、データ接続用の Visio API を使用できます。この API には、次のオブジェクトと関連メンバーが含まれます。

Visio 図面を外部データ ソースに接続すると、プログラムで、図面内の図形をそのデータ ソース内のデータにリンクすることができるようになります。 1 つ以上の図形を、あるデータ レコードセット内の単独のデータ行にリンクすることも、異なるデータ レコードセットに属するの複数のデータ行にリンクすることも可能です。 しかし同じレコードセットに属する複数のデータ行にリンクすることはできません。

既存の図形をデータにリンクする場合、一度に 1 つの図形をリンクすることも、グループとしてリンクすることも可能です。また、図形の作成とリンクを同時に行うこともできます。 図形とデータ行との対応関係がわかっていればそれを指定できますが、Visio に自動で対応付けさせることもできます。この場合、既存の図形データと、データ レコードセット内のデータを比較することにより、対応付けを行います。

図形をデータにリンクすると、データ グラフィックを図形に追加することにより、そのデータをグラフィック表示できます。 データ グラフィックについて詳しくは、「データのグラフィック表示について」を参照してください。

DataRecordsetオブジェクト、DataColumn オブジェクト、DataColumns コレクションには、データのリンクに関係するプロパティ、メソッド、イベントがいくつかあります。 Visio オブジェクト モデルにはこの他にも、ApplicationDocumentPageSelectionShapeWindow などのオブジェクトや、データのリンクに関係するメンバーがあります。

データのリンクと図形データ

図形をデータにリンクする操作は、図形データをすべての Visio 図形に割り当てることに依存しています。 図形データは、Visio 2007 より古いバージョンではカスタム プロパティと呼ばれていました。

Visio UI で図形データにアクセスし、これを図形に割り当てるには、図形上で右クリックして [データ] をポイントし、[図形データ] をクリックします。 また、Visio ShapeSheet スプレッドシートで、手動またはプログラムで図形データにアクセスし、これを割り当てることも可能です。 図形の ShapeSheet スプレッドシートは、その図形を右クリックして [シェイプシートの表示] をクリックすると表示されます。 このコマンドは、Visio が開発モードでなければ表示されません。 Visio を開発モードで実行するには、[ファイル] タブをクリックし、[オプション][詳細設定] の順にクリックして、[全般][開発モードで実行する] をクリックします。

ShapeSheet では、図形データは [図形データ] セクション (旧 [カスタム プロパティ] セクション) にあります。 後方互換性を保つため、既存のオブジェクト メンバーは、名前に「カスタム プロパティ」という文字列が残っています。 特定の図形に図形データを割り当てていない場合、シェイプシートには [図形データ] セクションが表示されません。 [図形データ] セクションを追加するには、先に説明した手順で ShapeSheet を表示し、[ShapeSheet] ウィンドウ上を右クリックして [セクションの挿入]、次いで [図形データ] をクリックし、最後に [OK] をクリックします。

図形をデータにリンクすると、[図形データ] セクションの列の多くが、DataColumn オブジェクトのプロパティと密接に対応します。 たとえば、[図形データ] セクションの [ラベル] 列は、[図形データ] ダイアログ ボックスの特定の図形データ項目に表示されるラベルを提供しますが、DataColumn.DisplayName プロパティに対応しており、[外部データ] ウィンドウに関連付けられたデータ列に対して表示される名前を制御します。 DataColumn オブジェクトの操作の詳細については、「データ列に関するプロパティを取得または設定する」を参照してください。

図形、データ レコードセット、データ行を識別する

Visio は、一意的な ID 番号を使用して、図形、レコードセット、およびデータ行を識別します。 図形 ID は、その図形が含まれているページ内でのみ一意です。 この番号を取得後、Visio のデータ関連オブジェクトのメソッドに渡して、図面の中の図形をどのように使用可能なデータ レコードセットのデータ行にリンクするかを正確に指定することができます。

図形の ID を確認するには、Shape.ID プロパティの値を取得します。 また、Visio では図形固有の ID または GUID も表示されます。 Page.ShapeIDsToUniqueIDs メソッドでは、図形 ID の配列を取得します。また、図形の GUID を取得するか、取得または作成するか、削除するかを指定する VisUniqueIDArgs からの列挙値を取得します。 Page.ShapeIDsToUniqueIDs メソッドでは、渡された図形の一意の ID の配列も返します。 逆に、一連の図形の一意の ID がわかっている場合は、Page.UniqueIDsToShapeIDs メソッドを使用して、これらの図形の図形 ID を取得できます。 選択した図形に対しては、Selection.GetIDs メソッドを使用して、図形 ID を取得します。

DataRecordsets コレクションに追加した DataRecordset オブジェクトの ID は、DataRecordset.ID プロパティ値として設定することができます。 データ レコードセットに属する各行の ID は、DataRecordset.GetDataRowIDs メソッドで、配列として取得できます。 詳細については、「Visio のデータへの接続について」の「プログラムを使用してデータ レコードセット内のデータへアクセスする」のセクションを参照してください。

データにリンクされた図形を作成する

既にデータにリンクされている図形を、図形を含まない図面ページまたはリンクする図形以外の図形を含む図面ページに作成する場合は、Page.DropLinked メソッドと Page.DropManyLinkedU メソッドを使用して既にデータにリンクされている図形を 1 つまたは複数作成できます。 これらのメソッドは、ページ内の指定された位置に追加の図形を作成するという点で Page.Drop メソッドと Page.DropManyU メソッドに類似していますが、これらのメソッドは、さらに、新しい図形と指定されたデータ レコードセットの指定されたデータ行の間に、リンクを形成します。

DropLinked メソッドは、リンクが設定された新しい Shape オブジェクトを返します。次のようなパラメーターを指定できます。

  • ObjectToDrop - 作成する特定の図形 (たとえば長方形) を指定します。
  • x - 作成した図形の中心点を置く、ページ上の x 座標。
  • y - 作成した図形の中心点を置く、ページ上の y 座標。
  • DataRecordsetID - リンク先であるデータ行を含む DataRecordset オブジェクトの ID プロパティ値。
  • DataRowID - リンク先であるデータ行の ID プロパティ値。
  • ApplyDataGraphicAfterLink ブール型 (Boolean) の値で、図形のデータ グラフィックがあればそれを自動的に適用し、なければ直近に使われたデータ グラフィックを適用するかどうかを表します。 既定では、データ グラフィックを適用しません。 データ グラフィックについて詳しくは、「データのグラフィック表示について」を参照してください。

次のコード例は、DropLinked メソッドを使ってアクティブな図面ページ上に図形を作成し、その中心座標を (2, 2) と設定し、さらにデータ行にリンクする方法を示します。 渡された DataRecordset オブジェクトから取得した ID と、リンク先データ行の ID を DropLinked メソッドに渡します。 ドロップされた図形は、コードが開く Basic_U.VSS ステンシルからの単純な四角形で、Visio の図面ウィンドウにドッキングします。

この例で、データ行の ID は 1 に設定されています。コードを実行する前に該当するデータ行が存在するかどうか確認し、なければコード中の ID 値を変更してください。

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

同様に DropManyLinkedU メソッドは、リンクが設定された図形を作成し、図形 ID の配列を返します。 パラメーターとして、作成する図形、ページ上の座標、リンク先データ行のそれぞれの配列を渡します。 図形の配列の各要素に、同じインデックス番号のデータ行と座標が対応します。

既存の図形をデータにリンクする

Visio 図面内の既存の各図形とデータ レコードセットの各行がどのように対応しているかが正確にわかっていれば、次のようにして各図形をデータにリンクできます。

  • 単一の図形を単一のデータ行にリンクする
  • 選択した一連の図形を、1 つ以上のデータ行にリンクする
  • 複数の図形を複数のデータ行にリンクする

さらに、図形とデータの正確な対応関係がわからない場合でも、指定した限られたマッチング情報を基に、Visio で可能な限り正確なマッチングを行うことができます。

単一の図形を単一のデータ行にリンクする

単一の図形を単一のデータ行にリンクするには、Shape.LinkToData メソッドを使用します。 このメソッドは引数としてデータ レコードセット ID とデータ行 ID を取る他、必要に応じ、リンク先データをデータ グラフィックに表示するかどうかを表す、ブール型 (Boolean) のフラグを指定できます。 既定値は、データ グラフィックを表示する設定になっています。

複数のデータをデータにリンクする

Selection オブジェクトの 2 つのメンバー、つまり Selection.LinkToData メソッドと Selection.AutomaticLink メソッド、あるいは Page.LinkShapesToDataRows メソッドを使用することにより、選択した 1 つ以上の図形をデータにリンクすることができます。

Selection.LinkToData メソッドの機能は、Shape オブジェクトの同名のメソッドとほぼ同じですが、単独の図形ではなく選択された複数の図形を、ある 1 つのデータ行にリンクすることができます。

図形とデータ行間の対応はわからないが、各図形のある属性とデータ レコードセットにある列のデータが一致する場合は、Selection.AutomaticLink メソッドを使用して、選択した既存の図形を複数のデータ行にリンクすることができます。 すべての図形に対して同じ属性を使用する必要があります。 このメソッドの詳細については、「自動的にデータにリンクする」を参照してください。

Page.LinkShapesToDataRows メソッドは、複数の図形をリンクするという点で Selection.LinkToData メソッドに似ています。 ただし、このメソッドは、選択した図形ではなく、同じページ上の図形をデータにリンクする場合に使用します。 LinkShapesToDataRows メソッドは図形を複数のデータ行にリンクするのに対し、LinkToData メソッドは複数の図形を単一の行にリンクします。 LinkShapesToDataRows メソッドで図形をリンクする場合、2 つの配列、つまり図形の配列とデータ行の配列を渡します。 この配列は、同じインデックス番号の図形とデータ行が対応するようにしておかなければなりません。 したがって、たとえば図形配列のインデックス 1 の図形は、データ行配列のインデックス 1 のデータ行にリンクされます。 なお、このメソッドに対しても、必要に応じ、既存のデータ グラフィックをリンクされた図形に適用するかどうかを指定できます。

自動的にデータにリンクする

Selection.AutomaticLink メソッドを使用して、選択した図形 (つまり、選択オブジェクトに割り当てられた図形) の図形データの値を、データ レコードセット内のデータ行に自動的にリンクできます (つまり、すべての図形とデータ行の正確な対応を指定するのではない)。 ただし、Microsoft Office Visio にリンクを作成する情報を十分提供するには、最低 1 つの一致するデータの組み合わせ (データベースの列名、図形の属性の種類、および必要に応じて図形の値) を提供する必要があり、これらの値には、メソッドの該当する配列間で、すべて同じ要素番号が設定されている必要があります。

図形の属性の種類は、一致したときに該当する図形の属性を示します。 属性は、図形のデータ項目 (以前のカスタム プロパティ値)、図形のテキスト、または、その他の VisAutoLinkFieldTypes 列挙に指定された値である可能性があります。

注:

たとえば、図面にさまざまな従業員を表す図形の選択が含まれているとします。 各図形は図形テキスト、この場合は従業員の名前で識別できます。 (Visio に付属するOrgData.xls ブックの従業員名の一部を使用し、そのデータ ソースに接続できます。既定では、OrgData.xlsは C:\Program Files\Microsoft Office\Office\Office15\Visio Content[ langID] にインストールされます。 langID は国または地域によって異なります)。一部のコンピューターでは、"Program Files" ではなく "Program Files (x86)" がパスに含まれる場合があります。

この図形を、各行が各従業員のデータを表すデータベースに接続する場合、次のパラメーターを AutomaticLink メソッドに渡します。

  • DataRecordsetID リンク先であるデータ行を含む DataRecordset オブジェクトの ID プロパティ値。 次の例では、既存のデータ レコードセットをプロシージャに渡し、その ID を取得します。
  • ColumnNames() データベースの列名を含む文字列の配列です。 配列の要素に、最低 1 つは AutoLinkFieldTypes 配列と FieldNames 配列の同じ位置の値に対応する値が含まれている必要があります。 次の例では、配列の位置 0 に列名 "Name" を含む配列を渡します。
  • AutoLinkFieldTypes() 図形の属性の種類を含む VisAutoLinkFieldTypes 列挙の長整数型 (Long) の値の配列です。 配列の要素に、最低 1 つは ColumnNames 配列と FieldNames 配列の同じ位置の値に対応する値が含まれている必要があります。 次の例では、配列の位置 0 に列挙値 visAutoLinkShapeText を渡します。
  • FieldNames () 図形の値で構成される文字列配列。 FieldNames 配列の要素に、最低 1 つは ColumnNames 配列と AutoLinkFieldTypes 配列の同じ位置の値に対応する値が含まれている必要があります。
  • AutoLinkFieldTypes に指定した値が visAutoLinkShapeText など多くの場合、FieldNames 値を指定する必要はないので、代わりに NULL 値を渡します。 次の例でもそうなので、空文字列を渡しています。 しかし AutoLinkFieldTypesvisAutoLinkCustPropsLabel 値、visAutoLinkUserRowName 値、visAutoLinkPropRowNameU 値、visAutoLinkUserRowNameU 値のいずれかを渡した場合は、FieldNames の値を渡して、データ列名と比較する図形データ アイテムを指定する必要があります。
  • AutoLinkBehavior VisAutoLinkBehaviors 列挙からの値。 これらの列挙値により、既存のリンクを新しいものに置き換えるなど、メソッドをカスタマイズするためのオプションが提供されます。 次の例では、既定値の 0 を渡します。
  • ShapeIDs() メソッドによりリンクした図形の ID を埋めて返すための配列です。

次の例は、AutomaticLink メソッドを使用して図形をデータに自動的にリンクする、1 つの方法を示しています。 この例は、上述のように、OrgData.xls というブックのデータに図面を接続していることを想定しています。 データの先頭列の名前は "Name" でなければなりません (OrgData.xls ではそうなっています)。 さらに、図面中の、データにリンクしようとしている各図形の図形テキストは、OrgData.xls のいずれかの行の "Name" 列の名前と一致する必要があります。

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

次のメソッドを使用すると、どの図形がどのデータにリンクしているかを確認できます。 図形がどのようにデータにリンクしているかを調べることにより、競合や壊れたリンクができてしまわないようにすることができます。

Shape.BreakLinkToData メソッドおよび Selection.BreakLinkToData メソッドは、名前からもわかるように、図形とデータ間の既存のリンクをプログラムで解除するために使用します。 さらに、UI で行われたさまざまな変更によってこれらのリンクが解除されることがあります。 たとえば、データ レコードセットやリンク先の行、リンク元の図形を削除した場合や、図形のショートカット メニューの [行とのリンクを解除] をクリックしたとき、行のショートカット メニューの [リンク解除] をクリックしたときなどです。

ユーザーが UI 上でデータ レコードセットや行、図形を削除した場合を除き、上述の操作を行うと Shape.ShapeLinkDeleted イベントが発生します。 前のセクションに記載されている方法を使用して、リンクの状態を確認することもできます。

データ列に関するプロパティを取得または設定する

DataRecordset オブジェクトには、DataRecordset オブジェクトに関連付けられたすべての DataColumn オブジェクトを含む DataColumns コレクションがあります。 このオブジェクトによって、データ列を ShapeSheet の Shape Data セクションのセルにマップできます。

次の例は、メソッドに渡されたデータ レコードセットのうち最初の列から、図形データ セクションのラベル セルの値を取得し、[イミディエイト] ウィンドウに表示する方法を示します。 次に値を設定し、新しい値を表示します。

この値を変更すると、データ レコードセット内の行にリンクされているすべての図形の [図形データ] ダイアログ ボックスの図形データ項目のラベルが変更されます。 ラベル セルの値を取得および設定するために、VisDataColumnProperties 列挙の visDataColumnPropertyDisplayName を、DataColumn.GetProperty メソッドと 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

リンク先データを更新し、競合を解決する

図面が接続されたデータ ソースでデータが変更された場合、Visio 図面のデータを更新して、その変更を反映することができます。 DataRecordset.RefreshInterval プロパティを設定して Visio が指定の間隔で自動的に最新のデータに更新するように指定します。 DataRecordset.Refresh メソッドを呼び出して、プログラムで最新のデータに更新することができます。

さらに、図形とデータ行の関係で競合が生じた場合に、これを解決することができます。 たとえば、データ レコードセットを更新した結果、データ ソースが変わり、ある図形のリンク先であったデータ行がなくなってしまった場合に競合が発生します。 また、更新されたレコードセットに、同じ主キーを持つ行が複数ある場合にも競合が起こります。

リンク先データを自動的に更新する

DataRecordset オブジェクトを作成すると、RefreshInterval プロパティの値は既定値の 0 に設定されます。 この設定では、データは自動的に更新されません。 DataRecordset.RefreshInterval を正の長整数型 (Long) の値に設定すると、自動更新の間隔 (分) を指定できます。 指定できる最小の間隔は 1 分です。 この設定は、ユーザーが [データ更新の構成] ダイアログ ボックスで設定できる値に対応します。

最後に更新操作を行った日付と時刻は、DataRecordset.TimeRefreshed プロパティから取得できます。

さらに、DataRecordset.RefreshSettings プロパティを使用して、データの自動更新方法をカスタマイズできます。 VisRefreshSettings 列挙の値を組み合わせて設定することにより、次のいずれか、または両方を指定できます。

  • 更新により生じた競合を解決するための UI ([競合のリフレッシュ] 作業ウィンドウ) を無効にすること。 (詳細については、次のセクションを参照してください。)
  • UI でデータに変更を施していても、更新操作により自動的に上書きされるようにすること。 このプロパティの既定値は 0 であり、どちらのイベントも発生しません。

更新操作により影響を受けたデータ レコードセット行を特定する

図形はその ID によってデータ行とのリンクを指定しているので、Visio がリンク先データを更新した場合、前回の更新以降、リンク先データ レコードセットのどの行が追加、変更、削除されたかを確認する必要があります。 このような行を特定するため、Visio はデータ レコードセットの行に割り当てられた行 ID を使います。 行 ID の割り当て方法は、データ レコードセットの作成時に主キーを指定したかどうかによって 2 とおりあります。

主キーがないデータ レコードセットを更新する

データ レコードセットの作成時に、データ ソース上の行の順序に従って、レコードセットの各行に行 ID が割り当てられます。 したがって、レコードセットの最初の行はかならず、行 ID が 1、次の行は行 ID が 2 となります。

その後、元のデータ ソースからデータ行を追加または削除できます。 次に、データを更新すると、その変更がデータ レコードセットに反映されます。 その結果、データ レコードセット内の行の順序が変更される場合があります。

たとえば 5 つの行から成るデータ レコードセットがあり、データ ソースの第 4 行が削除されたとします。Visio がそのデータ ソースに接続しているデータ レコードセットを更新すると、データ レコードセットの第 5 行は繰り上がって第 4 行になるので、行 ID は 4 になります。 また、5 という行 ID はデータ レコードセットから削除されます。

その結果、行 ID 5 にリンクしていた図形はリンク先がない状態になり、行 ID 4 にリンクしていた図形は、それまで 5 番目の位置にあった行からデータを取得するようになってしまいます。 このように、データ レコードセットの作成時に主キーを設定しておかないと、図形とデータのリンクが壊れてしまったり、本来のリンク先でない行にリンクされてしまったりするおそれがあります。

主キーがあるデータ レコードセットを更新する

データ レコードセットに主キーを設定しておけば、このようにリンクが壊れたり対応が崩れたりするのを防ぐことができます。 主キーとは、各行を一意的に識別できるようなデータ列 (複数のデータ列の組み合わせでも可) のことです。 各行の主キー カラムの値はデータ レコードセット内で行を一意に識別します。 多くの場合、主キーには ID 値があてられていますが、必要に応じてどの列でも主キーとして使うことができます。 いずれにしても、データを更新しても意図と異なる結果にならないようにするためには、各行を一意に識別できるような主キー列の値 (複数の列を主キーとして扱う場合はそれぞれの値の組) を与えることが重要です。

データ レコードセットに主キーが含まれていれば、これを更新した場合でも、各行の行 ID は同じ値のままです。 Visio は ID を使って図形とデータ行のリンク関係 (すなわち図形 ID と行 ID の対応) を管理していますが、この ID が更新操作により変わることはないため、図形は常に正しい行にリンクされていることになります。 同じデータ レコードセットで、同じ行 ID が再利用されることはありません。

指定されている場合は、DataRecordset.GetPrimaryKey メソッドを使用してデータ レコードセットの既存の主キーを指定します。 このメソッドでは、VisPrimaryKeySettings 列挙の値としてデータ レコードセットの主キー設定が返されます。 単一の列を主キーとして扱うか、複数の列を組み合わせて主キーにします。 前者は、単一の列の値に基づいて行を識別します。 後者の場合、複数の列の組み合わせで、行を一意に識別します。

主キー設定が visKeySingle または visKeyComposite の場合、主キーである列名文字列の配列が返されます。 主キー設定が既定の visKeyRowOrder の場合、空の主キー配列が返されます。

同様に、DataRecordset.SetPrimaryKey メソッドを使用してデータ レコードセットの主キー設定を指定すると共に、主キー カラムとして設定するカラム名を指定することができます。 主キーを設定する場合は、主キー カラムとなる 1 つ、または、複数のカラムには、各行に一意の値が含まれていることを確認してください。

プログラムでリンク先データを更新する

接続されたデータ レコードセットをプログラムで更新するには、DataRecordset.Refresh メソッドを使います。

このメソッドは、データ レコードセットに関連付けられたクエリ文字列を実行し、その結果返されたデータに従って、リンク元の図形を更新します。 特定の DataRecordset オブジェクトに対して Refresh メソッドを呼び出すと、同じ DataConnection オブジェクト (つまり、DataConnection プロパティの値が同じ) に関連付けられている他の DataRecordset オブジェクトもすべて更新されます。 同じ DataConnection プロパティ値を共有する DataRecordset オブジェクトは、トランザクション データ レコードセットと呼ばれます。

Refresh メソッドを呼び出すことによって競合が発生した場合、UI に [競合のリフレッシュ] 作業ウィンドウが表示されます。ただし、RefreshSettings プロパティに visRefreshNoReconciliationUI 列挙の値が含まれるように設定している場合は、表示されません。

リンクされているデータを更新する前に、Visio が同じデータベースの別のテーブルを検索するためのデータを取得するために使用するクエリを変更する場合は、DataRecordset.CommandString プロパティに新しい値を設定します。 まったく新しいデータ ソースに接続する場合は、DataRecordset.CommandString プロパティと DataConnection.ConnectionString プロパティの両方の値を設定します。

DataRecordset.GetLastDataError メソッドは、新しいデータ レコードセットを追加した場合、または既存のレコードセット内のデータを更新した結果生じた最新のエラーと関連付けられた ActiveX Data Object (ADO) エラー コード、ADO の記述、データ レコードセットの ID を取得します。

競合を特定し、解決する

データを更新して競合が発生した場合は、DataRecordset.GetAllRefreshConflicts メソッドと DataRecordset.GetMatchingRowsForRefreshConflict メソッドを使用して競合の原因を特定できます。 GetAllRefreshConflicts メソッドは、図形内のデータとその図形のリンク先であるデータ レコードセットの行との間に競合が発生している、図形の配列を返します。 どのデータ レコードセットが競合しているか判断するには、この各図形を GetMatchingRowsForRefreshConflict メソッドに渡して競合する行の配列を取得します。

データ レコードセットの行は、複数の行に同じ主キーが設定され、同じ図形にリンクされている場合に競合が発生します。 この場合、GetMatchingRowsForRefreshConflict メソッドは、少なくとも 2 つ以上の行 ID を含む配列を返します。

競合は、以前リンクされていたデータ行がデータ レコードセットから削除される場合にも発生します。 この場合、メソッドは空の配列を返します。

競合を解消したい図形を渡して DataRecordset.RemoveRefreshConflict メソッドを呼び出すと、現在のドキュメントから競合している情報が削除されます。

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。