關於將圖形連結至資料
注意事項
資料連線功能僅供取得 Microsoft Visio Professional 2013 授權的使用者使用。
在 Visio 中,資料連接有四種方式:
- 連接至資料來源
- 將圖形連結至資料
- 以圖形方式顯示連結資料
- 重新整理資料來源中已變更的連結資料、更新連結圖形,以及解決可能產生的後續衝突
一般而言,您會以上述順序採用這些方式,也就是說,您會先將 Visio 繪圖連接到資料來源,然後將繪圖中的圖形連結到資料來源的資料,以圖形方式顯示連結圖形中的資料,必要時重新整理連結資料。
在 Visio 物件模型中,每一種方式都有其相關聯的物件與成員。 本主題處理第二種方式,將 Visio 繪圖中的圖形連結至資料。 如需有關其他資料連接方式的詳細資訊,請參閱下列主題:
若要以程式設計方式將您的 Visio 繪圖連接到資料來源,可以使用 Visio API 來進行資料連線,包括下列物件及其相關成員:
- DataRecordsets 集合
- DataRecordset 物件
- DataConnection 物件
- DataRecordsetChangedEvent 物件
- DataColumns 集合
- DataColumn 物件
將 Visio 繪圖連接至外部資料來源之後,就可以以程式將繪圖中的圖形從該來源連結至資料。 您可以將一個或多個圖形連結至資料記錄集中之資料的單一 資料列,或連結至不同資料記錄集中之資料的多個資料列。 然而,不可以將圖形連結至相同資料記錄集中之資料的多個資料列。
您可以將現有圖形連結至資料,方式是一次一個圖形或以群組形式;或是建立圖形並同時將它們連結至資料。 您可以指定圖形與資料列之間的已知對應關係,或讓 Visio 比較現有圖形資料與資料錄集中的資料,以自動判斷對應關係。
將圖形連結至資料之後,將資料圖形新增至圖形,就可以以圖形顯示該資料。 如需資料圖形的詳細資訊,請參閱關於以圖形方式顯示資料。
DataRecordset 及 DataColumn 物件和 DataColumns 集合會開放數個方便進行資料連結的屬性、方法及事件。 此外,Visio 物件模型中之其他物件的數個成員 (包括 Application、Document、Page、Selection、Shape 及 Window 物件) 都與資料連結有關。
資料連結及圖形資料
將圖形連結至資料根據的是可以將圖形資料指定給所有 Visio 圖形。 在 Visio 2007 之前的 Visio 版本中,圖形資料稱為自訂屬性。
若要在 Visio UI 中存取及指定圖形資料,請以滑鼠右鍵按一下圖形,指向 [資料] 然後按一下 [圖形資料]。 或者,也可以在 Visio ShapeSheet 試算表中手動或以程式存取及指定圖形資料。 若要顯示所選取圖形的 ShapeSheet 試算表 (ShapeSheet),請以滑鼠右鍵按一下圖形,然後按一下 [顯示 ShapeSheet]。 若要查看這個命令,則必須在開發人員模式執行 Visio。 若要在開發人員模式執行 Visio,請按一下 [檔案] 索引標籤上的 [選項],並按一下 [進階],然後選取 [一般] 下方的 [在開發人員模式執行]。
在 ShapeSheet 內,圖形資料包含在 [圖形資料] 區段中 (先前稱為 [自訂屬性] 區段)。 為了維持回溯相容性,現有物件成員會在名稱中保留「自訂屬性」或「自訂屬性」。 如果您不為特定圖形指派圖形資料,則 ShapeSheet 中不會出現任何 [圖形資料] 區段。 您可以將 [圖形資料] 區段新增至 ShapeSheet,方法是如先前所述顯示 ShapeSheet,在 ShapeSheet 視窗中的任何位置按一下滑鼠右鍵,然後按一下 [插入區段],選取 [圖形資料],然後按一下 [確定]。
將圖形連結至資料之後,[圖形資料] 區段的許多資料欄會與 DataColumn 物件的屬性十分相似。 例如,[圖形資料] 區段中的 [標籤] 資料欄 (提供 [圖形資料] 對話方塊中之特定圖形資料項目的顯示標籤) 相當於 DataColumn.DisplayName 屬性,而這個屬性控制 [外部資料] 視窗中之相關資料欄的顯示名稱。 如需有關使用 DataColumn 物件的詳細資訊,請參閱取得及設定資料欄屬性。
識別圖形、資料錄集及資料列
Visio 使用唯一識別碼來識別圖形、資料記錄集及資料列。 圖形識別碼只有在它們所在的頁面範圍內是唯一的。 決定這些識別碼之後,可以將它們傳送給 Visio 資料相關物件的方法,以明確指定圖表中的圖形應該如何連結至可用資料記錄集中的資料列。
若要判斷圖形的識別碼,請取得 Shape.ID 屬性值。 此外,Visio 也為圖形提供唯一的識別碼或 GUID。 Page.ShapeIDsToUniqueIDs 方法會取用圖形識別碼的陣列,以及從 VisUniqueIDArgs 取得列舉值,指定是否取得、取得或產生或刪除圖形 GUID。 Page.ShapeIDsToUniqueIDs 方法也會傳回傳入圖形唯一識別碼的陣列。 相反地,如果知道一組圖形的唯一識別碼,則可以使用 Page.UniqueIDsToShapeIDs 方法取得那些圖形的圖形識別碼。 如果是某選取範圍的圖形,請使用 Selection.GetIDs 方法取得圖形的圖形識別碼。
若要判斷新增至 DataRecordsets 集合之 DataRecordset 物件的識別碼,請取得 DataRecordset.ID 屬性值。 若要判斷資料錄集中之每個資料列的識別碼,請呼叫 DataRecordset.GetDataRowIDs 方法,這個方法會傳回資料列識別碼的陣列。 如需詳細資訊,請參閱關於在 Visio 中連接到資料中「以程式設計方式存取資料錄集中的資料」一節。
建立連結至資料的圖形
想要建立已連結至資料的圖形,但是此繪圖頁面未包含任何圖形或是包含的圖形並不是想要連結的圖形時,可以使用 Page.DropLinked 及 Page.DropManyLinkedU 方法建立一個或多個其他已連結至資料的圖形。 這些方法類似 Page.Drop 及 Page.DropManyU 方法,因為這些方法會在頁面的指定位置處建立其他圖形,此外,也會在新圖形與所指定資料記錄集中的所指定資料列之間建立連結。
DropLinked 方法會傳回新的已連結 Shape 物件,並取用下列參數:
- ObjectToDrop - 想要建立的特定圖形 (例如,矩形)。
- x - 頁面上之新圖形中心的 x 座標。
- y - 頁面上之新圖形中心的 y 座標。
- DataRecordsetID - 包含要連結之目標資料列的 DataRecordset 物件的 ID 屬性值。
- DataRowID - 要連結之資料列的 ID 屬性值。
- ApplyDataGraphicAfterLink Boolean 值,指定在圖形已有資料圖形時,是否要自動套用圖形的資料圖形,而在沒有圖形的資料圖形時,是否要套用最近使用過的資料圖形。 預設值是不套用資料圖形。 如需資料圖形的詳細資訊,請參閱關於以圖形方式顯示資料。
下列範例程式碼顯示如何使用 DropLinked 方法在使用中繪圖頁面上建立圖形 (中心點是頁面座標 (2, 2),而且已連結至資料列)。 它會取用所傳送的 DataRecordset 物件、取得它的識別碼,然後將該識別碼以及要連結之資料列的識別碼傳送給 DropLinked 方法。 放下的圖形是來自 Basic_U.VSS 樣板的一個簡單的矩形,其程式碼會開啟,並固定在 Visio 繪圖視窗。
在這個範例中,資料列的識別碼是設為 1;執行程式碼之前,請先確定有該識別碼的資料列,或變更程式碼中的識別碼值。
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 方法也會先建立一組連結的圖形 (以圖形識別碼陣列的形式傳回)。 它會當成要放下之圖形的參數陣列、座標及要連結的資料列。 而對應陣列索引位置處的項目則決定圖形及資料列如何產生關聯,以及要放下頁面之哪個位置處的個別圖形。
將現有圖形連結至資料
明確知道 Visio 繪圖中的一個或多個現有圖形相當於資料記錄集中的一個或多個資料列時,可以用下列方式將現有圖形連結至資料:
- 將單一圖形連結至單一資料列
- 將某選取範圍的圖形連結至一個或多個資料列
- 將多個圖形連結至多個資料列
此外,如果不知道圖形與資料的明確對應,則可以指示 Visio 根據您所提供的有限比對資料進行最適合的比對。
將單一圖形連結至資料列
若要將單一圖形連結至單一資料列,請使用 Shape.LinkToData 方法。 這個方法會取用資料記錄集識別碼和資料列識別碼,以及選用 Boolean 旗標 (指定是否顯示資料圖形中的已連結資料)。 預設是顯示資料圖形。
將多個圖形連結至資料
Selection 物件的兩個成員 (Selection.LinkToData 及 Selection.AutomaticLink 方法),以及 Page.LinkShapesToDataRows 方法,可以將選取範圍內的一個或多個現有圖形連結至資料。
Selection.LinkToData 方法的運作方式與 Shape 物件的相同方法十分類似,不同之處在於它是將某選取範圍的圖形 (而不是單一圖形) 連結至單一資料列。
如果不確定圖形與資料列的對應關係,但是知道每個圖形的特定屬性符合資料錄集中之某個資料欄的資料,則 Selection.AutomaticLink 方法提供方式將某選取範圍的現有圖形連結至資料的多個資料列。 請注意,所有圖形必須具有相同屬性。 如需此方法的詳細資訊,請參閱自動連結至資料。
Page.LinkShapesToDataRows 方法類似 Selection.LinkToData 方法在於它會連結多個圖形。 不過,您可以使用這個方法將同一個頁面上的圖形 (而非選取範圍中的圖形) 連結至資料。 LinkShapesToDataRows 方法是將圖形連結至多個資料列,而 LinkToData 方法則是將多個圖形連結至單一資料列。 若要連結圖形,請將一組陣列傳送給 LinkShapesToDataRows 方法:一組是用於圖形,而另一組是用於資料列。 請注意,符合的陣列位置必須相等。 因此,例如,圖形陣列中之位置 1 處的圖形是連結至資料列陣列中之位置 1 處的資料。 再次提醒,呼叫這個方法時,可以選擇性地指定是否要將現有資料圖形套用至所連結的圖形。
自動連結至資料
使用 Selection.AutomaticLink 方法將所選取圖形中的圖形資料值 (即,指定給 Selection 物件的圖形) 自動連結至資料記錄集中的資料列 (即,未指定所有圖形與資料列的明確對應關係)。 然而,若要提供給 Visio 足夠的資訊以建立連結,則至少必須提供一組相符資料:資料庫中之資料欄的名稱、圖形屬性類型,必要時再加上圖形值,它們都位於您傳送給這個方法之對應陣列的相同索引位置處。
圖形屬性類型會指出做為比對基礎的圖形屬性。 屬性可以是圖形資料項目 (之前稱為自訂屬性值) 或圖形文字的值,或另一個在 VisAutoLinkFieldTypes 列舉中指定的值。
注意事項
例如,假設您的繪圖包含代表不同員工的圖形選取範圍。 其圖形文字可用來識別圖形,在此情況下為個別員工的名稱。 (您可以從隨附于 Visio 的OrgData.xls活頁簿中使用一些員工名稱,然後連線到該資料來源。根據預設,OrgData.xls會安裝在下列路徑:C:\Program Files\Microsoft Office\Office15\Visio Content[ langID],其中 langID 會因國家或地區而異。) 在某些電腦上,路徑可能包含「程式檔 (x86) 」,而不是「Program Files」。
若要將這些圖形連接至資料庫,而每個員工的資料構成了資料庫中的資料列,將下列參數傳送給 AutomaticLink 方法:
- DataRecordsetID 包含要連結之目標資料列的 DataRecordset 物件的 ID 屬性值。 在後續的範例中,我們會將現有資料錄集傳遞至程序並取得其識別碼。
- ColumnNames() 字串陣列,由資料庫中資料欄的名稱組成。 陣列中至少必須要有一個位置的值對應於 AutoLinkFieldTypes 與 FieldNames 陣列中相同位置的值。 在下列範例中,我們會在陣列位置 0 傳遞包含 "Name" 資料欄名稱的陣列。
- AutoLinkFieldTypes() 來自 VisAutoLinkFieldTypes 列舉中 Long 值的陣列,其中包含圖形屬性類型。 陣列中至少必須要有一個位置的值對應於 ColumnNames 與 FieldNames 陣列中相同位置的值。 在下列範例中,我們會在陣列位置 0 傳遞列舉值 visAutoLinkShapeText。
- FieldNames() 包含圖形值的字串陣列。 FieldNames 陣列中至少必須要有一個位置的值對應於 ColumnNames 與 AutoLinkFieldTypes 陣列中相同位置的值。
- AutoLinkFieldTypes 的大部分值 (例如,visAutoLinkShapeText) 都不需要指定 FieldNames 值,您可以改為傳送空值。 在我們的範例中就是這種情況,因此會傳送空白字串。 然而,傳送 AutoLinkFieldTypes 的 visAutoLinkCustPropsLabel、visAutoLinkUserRowName、visAutoLinkPropRowNameU 或 visAutoLinkUserRowNameU 值時,必須傳送 FieldNames 的值,以完整指定與資料欄名稱進行比較的圖形資料項目。
- AutoLinkBehavior 來自 VisAutoLinkBehaviors 列舉的值。 這些列舉值提供選項來自訂方法,例如,用來將現有連結取代為新連結。 下列範例會傳遞預設值 0。
- ShapeIDs() 傳回時,這個方法會用連結圖形之識別碼填滿的陣列。
下列範例顯示一種使用 AutomaticLink 方法自動連結圖形與資料的方式。 範例假設您已經將繪圖如上述說明連接到 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
探索圖形與資料間的連結
使用下列方法可以決定哪個圖形已連結至資料。 知道如何將圖形連結至資料,有助於防止衝突及中斷的連結:
- Page.GetShapesLinkedToData
- Page.GetShapesLinkedToDataRow
- Shape.GetLinkedDataRow
- Shape.GetCustomPropertyLinkedColumn
- Shape.GetCustomPropertiesLinkedToData
- Shape.IsCustomPropertyLinked
中斷圖形與資料間的連結
如其名稱所隱含,您可以使用 Shape.BreakLinkToData 和 Selection.BreakLinkToData 方法來以程式設計方式中斷圖形與資料之間的現有連結。 此外,在 UI 中進行的各種變更也可能中斷這些連結。 例如,當使用者刪除資料錄集、連結的資料列或連結的圖形時,或者當使用者按一下圖形捷徑功能表上的 [從資料列解除連結] 或資料列的捷徑功能表上的 [取消連結],他們便可能中斷連結。
除了使用者從 UI 刪除資料錄集、資料列或圖形外,所有這些動作都會引發 Shape.ShapeLinkDeleted 事件。 您也可以使用上一節所述的方法來判斷連結的狀態。
取得及設定資料欄屬性
每個 DataRecordset 物件都包含與 DataRecordset 物件相關聯之所有 DataColumn 物件的 DataColumns 集合。 這些物件可讓您將資料欄對應至 ShapeSheet 之 [圖形資料] 區段中的儲存格。
下列範例顯示如何取得傳送至該方法之資料記錄集中第一個資料欄的 [圖形資料] 區段之 [標籤] 儲存格值,並將其顯示在 [即時運算] 視窗中。 然後它會設定值,並顯示新的值。
變更此值會針對連結至資料記錄集中資料列的所有圖形,變更 [圖形資料] 對話方塊中圖形資料項目的標籤。 為了取得並設定 [標籤] 儲存格值,我們會將 visDataColumnPropertyDisplayName 值從 VisDataColumnProperties 列舉傳送至 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,表示這些事件都不會發生。
識別重新整理作業的資料錄集資料列
因為圖形是透過其圖形識別碼連結至特定資料列,所以 Visio 在重新整理連結的資料時,必須決定自上次重新整理資料後,已新增、變更或移除所連結資料記錄集中的哪些資料列。 為了識別這些資料列,Visio 會使用指定給資料記錄集中之資料列的資料列識別碼。 Visio 可以用兩種方式指定這些資料列識別碼 (視建立資料記錄集時是否指定資料記錄集的主索引鍵而定)。
重新整理沒有主索引鍵的資料錄集
建立資料記錄集時,Visio 會根據資料來源中之資料列的現有順序,將資料列識別碼指定給資料記錄集中的所有資料列。 因此,一律會將資料列識別碼 1 指定給資料記錄集中的第一個資料列,而資料列識別碼 2 則指定給第二個資料列,以此類推。
接著,您可以新增或移除原始資料來源中的資料列。 然後,重新整理資料時,資料記錄集就會反映那些變更。 因此,資料記錄集中的資料列順序可能會變更。
例如,在五個資料列的資料記錄集中,如果移除資料來源中的第四個資料列,則在 Visio 重新整理連接至該資料來源的資料記錄集時,資料記錄集中的第五個資料列會變成新的第四個資料列,而且指定資料列識別碼 4。 資料列識別碼 5 會從資料記錄集中移除。
因此,連結至資料列識別碼 5 的圖形會遺失它們的連結,而連結至資料列識別碼 4 的圖形現在會從先前在第五個位置的資料列中取得資料。 如您所見,如果在建立資料記錄集時未指定資料記錄集的主索引鍵,會導致圖形與資料間的連結中斷,或者,在 Visio 中,圖形所連結的資料列不是您想要它們連結的資料列。
重新整理具有主索引鍵的資料錄集
指定資料記錄集的主索引鍵,有助於防止這些中斷或不符連結。 主索引鍵會為識別含有每個資料列之唯一識別碼的資料欄名稱。 每個資料列的主索引鍵資料欄中的值,會唯一識別資料記錄集內的該資料列。 主索引鍵通常是識別碼值,但是可以將任意資料欄或資料欄組合指定為主索引鍵。 然而,為了在重新整理資料時取得一致的結果,請務必讓每個資料列的主索引鍵資料欄值 (或多個主索引鍵資料欄的一組值) 是唯一的。
因此,您重新整理時,或 Visio 重新整理包括主索引鍵的資料記錄集時,資料記錄集的資料列會保留它們在重新整理作業之前的相同資料列識別碼。 因為 Visio 是透過識別碼 (資料列識別碼的圖形識別碼) 將圖形連結至資料列,而且因為資料列識別碼在重新整理作業之後仍然會相同,所以資料連結的圖形仍然會連結至正確的資料列。 請注意,資料列識別碼絕不可以重複使用於給定的資料記錄集。
如果已指定資料錄集的主索引鍵,請使用 DataRecordset.GetPrimaryKey 方法來判斷資料錄集的現有主索引鍵。 這個方法會傳回資料錄集的主索引鍵設定,做為 VisPrimaryKeySettings 列舉的值。 使用單一或綜合主索引鍵。 單一索引鍵的基礎是單一資料欄之值上的資料列識別。 綜合主索引鍵會使用兩個以上的資料欄來唯一識別資料列。
如果主索引鍵設定是 visKeySingle 或 visKeyComposite,則這個方法也會傳回主索引鍵資料欄名稱字串陣列。 如果主索引鍵設定是 visKeyRowOrder (預設值),則這個方法會空的主索引鍵陣列。
同樣地,您也可以使用 DataRecordset.SetPrimaryKey 方法指定資料錄集的主索引鍵設定,以及您要設為主索引鍵資料欄的資料欄名稱。 再次提醒,設定主索引鍵時,請確定您挑選為主索引鍵資料欄的資料欄,在每個資料列上都含有唯一的值 (或一組值)。
以程式設計方式重新整理連結的資料
若要以設計方式重新整理連接的資料錄集,請呼叫 DataRecordset.Refresh 方法。
呼叫這個方法會執行與資料記錄集相關聯的查詢字串,然後使用查詢傳回的資料來更新連結的圖形。 在特定 DataRecordset 物件上呼叫 Refresh 方法,會重新整理與同一 DataConnection 物件 (即,它們的 DataConnection 屬性值相同) 相關聯的所有其他 DataRecordset 物件。 共用相同的 DataConnection 屬性值的 DataRecordset 物件稱為交易資料錄集。
如果因呼叫 Refresh 而導致衝突,則除非將 RefreshSettings 屬性設為包括 visRefreshNoReconciliationUI 列舉值,否則 Visio 會在 UI 中顯示 [重新整理衝突] 工作窗格。
重新整理連結資料之前,如果想要變更 Visio 用來擷取資料的查詢,以查詢相同資料庫中的不同資料表,請將 DataRecordset.CommandString 屬性設為新值。 若要連接至全新的資料來源,請設定 DataRecordset.CommandString 及 DataConnection.ConnectionString 屬性值。
DataRecordset.GetLastDataError 方法會取得與最近發生之錯誤 (在現有資料錄集中,新增新的資料錄集或重新整理其中的資料所造成) 相關聯的 Active X Data Objects (ADO) 錯誤碼、ADO 描述及資料錄集識別碼。
識別及解決衝突
您或 Visio 重新整理資料並發生衝突時,可以使用 DataRecordset.GetAllRefreshConflicts 及 DataRecordset.GetMatchingRowsForRefreshConflict 方法來判斷發生衝突的原因。 GetAllRefreshConflicts 方法會傳回圖形中之資料與資料記錄集資料列 (已連結圖形) 中之資料間已發生衝突的圖形陣列。 若要判斷衝突是由哪些資料記錄集資料列所造成,請接著將所有這些圖形都傳送給 GetMatchingRowsForRefreshConflict 方法,而這個方法會傳回發生衝突的資料列陣列。
如果資料記錄集中的兩個以上資料列具有相同的主索引鍵,而且連結至相同圖形,則資料記錄集中的資料列會發生衝突。 發生這個問題時,GetMatchingRowsForRefreshConflict 會傳回至少含有兩個資料列識別碼的陣列。
從資料記錄集中移除先前的資料連結資料列時,也會發生衝突。 發生這個問題時,這個方法會傳回空的陣列。
若要移除這個衝突,請將圖形傳送給 DataRecordset.RemoveRefreshConflict 方法,而這個方法會移除目前文件中的衝突資訊。
支援和意見反應
有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應。