Access VBA教程:ReplicationConflictFunction属性

利用 ReplicationConflictFunction属性可以使用自定义的冲突解决代码,来解决在同步的过程中副本之间的数据冲突。如果设置了该属性,当用户要求解决冲突时,Microsoft Access 会调用用户的冲突解决函数,来代替内置的“冲突解决程序”。

设置

将 ReplicationConflictFunction属性设为一个文本字符串,作为希望调用的Function 过程的名称。注意,必须是 Function 过程的名称,而不能是Sub 过程的名称。除非已经设置了该属性,否则 Microsoft Access 将调用“冲突解决程序”。

如果首次在 Visual Basic 中设置该属性的值,那么必须先创建该属性,并将其追加到用户定义的 Document对象的 Properties集合中。过程中应当包含错误处理代码,以测试该属性尚未存在于 Properties集合中的情况。有关详细信息,请参阅 CreateProperty方法。

创建并追加 ReplicationConflictFunction属性时,还必须为 CreateProperty方法中的可选参数 DDL 提供 True 值。该参数将确保不具有 dbSecWriteDef 权限的用户不能更改或删除新的 Property对象,如果不将该参数设为 True 值,那么将无法调用自定义的冲突解决程序代码。

若要将控制权重新返回给内置的“冲突解决程序”,请从 Properties集合中删除该属性。

通过单击“文件”菜单上的“数据库属性”,可以在“‘数据库名称’属性”对话框的“自定义”选项卡中添加或删除该属性。

说明

如果在一个或多个副本中,复制数据库中的相同记录已经被修改,那么当一个副本与副本集同步时,将产生冲突。当用户选择解决这些冲突时,Microsoft Access 将调用内置的“冲突解决程序”。向导将每一个冲突显示给用户,用户必须手动确定哪一个更改的记录包含了正确的数据。

在应用程序中,如果选择了自动解决冲突,那么就可以编写自定义过程来解决冲突,然后通过设置 ReplicationConflictFunction属性来覆盖内置的解决冲突功能。应该创建一个单一的函数作为冲突解决程序代码的入口点,然后将 ReplicationConflictFunction属性设置为该函数的名称。

自己编写的自定义冲突解决程序代码,也必须能够处理复制设计错误和复制数据错误。

示例

以下函数设置了 DAO对象的 Microsoft Access属性。可以使用该函数设置 ReplicationConflictFunction属性。如果在用户自定义 Document对象的 Properties集合中已经不存在这个属性,那么 Microsoft Access 将创建并追加该属性。请注意,为了设置该属性,必须为可选参数blnDDL 赋予 True 值 (-1)。


Function SetAccessProperty(obj As Object, strName As String, _
        intType As Integer, varSetting As Variant, _
        Optional blnDDL As Boolean) As Boolean
    Dim prp As Property
    Const intPropNotFound As Integer = 3270
    On Error GoTo Error_SetAccessProperty
    ' Explicitly refer to Properties collection.
    obj.Properties(strName) = varSetting
    obj.Properties.Refresh
    SetAccessProperty = True
Exit_SetAccessProperty:
    Exit Function
Error_SetAccessProperty:
    If Err = intPropNotFound Then
        ' Check whether optional argument has been passed.
        If Not IsMissing(blnDDL) Then
            ' Create property, denote type, set initial value, indicate DDL.
            Set prp = obj.CreateProperty(strName, intType, varSetting, blnDDL)
        Else
            ' Create property, denote type, set initial value.
            Set prp = obj.CreateProperty(strName, intType, varSetting)
        End If
        ' Append Property object to Properties collection.
        obj.Properties.Append prp
        obj.Properties.Refresh
        SetAccessProperty = True
        Resume Exit_SetAccessProperty
    Else
        MsgBox Err & ": " & vbCrLf & Err.Description
        SetAccessProperty = False
        Resume Exit_SetAccessProperty
    End If
End Function

以下过程调用 SetAccessProperty函数,以设置 ReplicationConflictFunction属性:


Sub SetConflictResolver()
    Dim dbs As Database, ctr As Container, doc As Document
    Dim blnReturn As Boolean
    ' Return reference to current database.
    Set dbs = CurrentDb
    ' Return reference to Databases container.
    Set ctr = dbs.Containers!Databases
    ' Return reference to SummaryInfo Document object.
    Set doc = ctr.Documents!userdefined
    blnReturn = SetAccessProperty(doc, _
        "ReplicationConflictFunction", dbText, "CustomResolver", True)
    ' Evaluate return value.
    If blnReturn = True Then
        Debug.Print "Property set successfully."
    Else
        Debug.Print "Property not set successfully."
    End If
End Sub

上页:Access VBA教程:RepeatSection属性 下页:Access VBA教程:Report属性

Access VBA教程:ReplicationConflictFunction属性

Access VBA教程:Report属性 Access VBA教程:Reports属性
Access VBA教程:Required属性 Access VBA教程:ResyncCommand属性
Access VBA教程:ReturnsRecords属性 Access VBA教程:RightMargin属性
Access VBA教程:RollbackTransaction属性 Access VBA教程:RowHeight属性
Access VBA教程:RowSource属性 Access VBA教程:RowSourceType属性
Access VBA教程:RowSourceType属性(用户定义函数) - 代码参数值 Access VBA教程:RowSpacing属性
Access VBA教程:RunningSum属性 Access VBA教程:RunPermissions属性
Access VBA教程:ScaleHeight属性 Access VBA教程:ScaleLeft属性
Access VBA教程:ScaleMode属性 Access VBA教程:ScaleTop属性
Access VBA教程:ScaleWidth属性 Access VBA教程:Scaling属性
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号