Поделиться через


Метод DataRecordset.GetMatchingRowsForRefreshConflict (Visio)

Возвращает массив идентификаторов строк набора записей данных, связанных с фигурой, конфликтующей после обновления набора записей данных.

Примечание.

Этот объект или элемент Visio доступен только лицензированным пользователям Visio профессиональный 2013.

Синтаксис

expression. GetMatchingRowsForRefreshConflict (ShapeInConflict)

Выражение Выражение, возвращающее объект DataRecordset .

Параметры

Имя Обязательный или необязательный Тип данных Описание
ShapeInConflict Обязательный Shape Фигура, связанная с данными, конфликтующая после обновления набора записей данных.

Возвращаемое значение

Long()

Замечания

Метод GetAllRefreshConflicts возвращает массив фигур, в которых существует конфликт между данными в фигуре и данными в строке data-recordset, с которой связана фигура. Чтобы определить, какие строки набора данных вызвали конфликт, можно передать каждую из этих фигур в свою очередь методу GetMatchingRowsForRefreshConflict , который возвращает массив строк, конфликтующих для данной фигуры.

Строки в наборе записей данных могут конфликтовать, если две или более из них имеют одинаковые первичные ключи и могут связываться с одной и той же фигурой. В этом случае метод GetMatchingRowsForRefreshConflict возвращает массив, содержащий не менее двух идентификаторов строк.

Конфликты также могут возникать, если из набора записей данных удалена строка, ранее связанная с данными. В этом случае метод возвращает пустой массив.

Чтобы удалить конфликт, передайте фигуру с конфликтом в метод RemoveRefreshConflict , который удаляет конфликтующую информацию из текущего документа. Сведения о конфликтах сохраняются в текущем документе до тех пор, пока вы не удалите фигуру в конфликте или не вызовете метод RemoveRefreshConflict для фигуры.

Пример

Этот макрос Microsoft Visual Basic для приложений (VBA) показывает, как использовать метод GetAllRefreshConflicts, чтобы определить, какие фигуры, если таковые имеются, имеют конфликты после обновления набора записей данных, а затем использовать метод GetMatchingRowsForRefreshConflict, чтобы определить, какие строки или строки набора записей данных вызывают конфликт. Он обновляет недавно добавленный набор данных и, если не обнаруживает результирующие конфликты, выводит сообщение "Нет конфликтов" в окне Интерпретации. Если конфликты не обнаруживаются, каждая фигура с конфликтами передается методу GetMatchingRowsForRefreshConflict и выводит результирующие идентификаторы строк в том же окне.

Перед выполнением этого макроса убедитесь, что последний добавленный набор записей данных является подключенным (не основанным на XML) набором данных и что подключение к исходному источнику данных по-прежнему доступно. Затем удалите строку в источнике данных или внесите другое изменение, которое вызовет конфликт при обновлении набора записей данных.

Public Sub GetMatchingRowsForRefreshConflict_Example() 
 
    Dim vsoDataRecordset As Visio.DataRecordset 
    Dim intRecordsetCount As Integer 
    Dim intShapeCount As Integer 
    Dim vsoShapes() As Visio.Shape 
     
    Dim intRowCount As Integer 
    Dim vsoShapeInConflict As Visio.Shape 
     
    Dim alngRowIDs() As Long 
    Dim lngvsoRowID As Long 
         
    intRecordsetCount = Visio.ActiveDocument.DataRecordsets.Count 
    Set vsoDataRecordset = Visio.ActiveDocument.DataRecordsets(intRecordsetCount) 
     
    vsoDataRecordset.Refresh 
    vsoShapes = vsoDataRecordset.GetAllRefreshConflicts 
     
    If IsEmpty(vsoShapes) Then 
        Debug.Print "No conflict" 
    Else 
        For intShapeCount = LBound(vsoShapes) To UBound(vsoShapes) 
            Set vsoShapeInConflict = vsoShapes(intShapeCount) 
            alngRowIDs = vsoDataRecordset.GetMatchingRowsForRefreshConflict(vsoShapeInConflict) 
             
            If IsEmpty(alngRowIDs) Then 
                Debug.Print "For shape:", vsoShapeInConflict.Name, "Row deleted." 
            Else 
                For intRowCount = LBound(alngRowIDs) To UBound(alngRowIDs) 
                    lngvsoRowID = alngRowIDs(intRowCount) 
                    Debug.Print "For shape:", vsoShapeInConflict.Name, "Row ID of row in conflict:", lngvsoRowID 
                Next intRowCount 
            End If 
            
        Next intShapeCount 
         
    End If 
     
End Sub

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.