ACC: Wie die ReplicationConflictFunction-Eigenschaft

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 158930 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Erweiterte: Erfordert Experten Codierung und Interoperabilität sowie Mehrbenutzerfähigkeiten.

Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

In diesem Artikel zeigen, wie Sie die ReplicationConflictFunction-Eigenschaft in einem Datenbankreplikat festgelegt, sodass eine benutzerdefinierte Prozedur Synchronisierungskonflikte auflösen zu erstellen.

Weitere Informationen

Wenn Sie replizierte Datenbanken in Microsoft Access verwenden, können Sie von Zeit zu Zeit Synchronisierungsfehler auftreten. Microsoft Access enthält einen Konfliktlöser Assistenten diese Konflikte zu beheben, bei deren auftreten.

Sie möchten allerdings Erstellen Ihrer eigenen Prozedur Benutzer Synchronisierungskonflikte auflösen können. Außerdem Microsoft Access Developer's Toolkit-Lizenzvereinbarung lässt nicht zum Verteilen von Assistenten mit Ihren Anwendungen zur Laufzeit; aus diesem Grund müssen Sie eine eigene Prozedur Konflikt Auflösung erstellen, wenn Ihre Laufzeitanwendung replizierte Datenbanken enthält.

Die Eigenschaft ReplicationConflictFunction können Sie eine benutzerdefinierte Prozedur verwenden, um statt den Assistenten Konfliktlöser Konflikte zu beheben. Die Prozedur, die Sie zum Lösen von Konflikten erstellen muss in einem replizierbar Modul im Designmaster sein.

Erstellen einer benutzerdefinierten Konfliktlöser

Die benutzerdefinierte Prozedur muss drei Arten von Fehlern verarbeiten können:
  • Synchronisierungskonflikte
  • Synchronisierungsfehler
  • Entwurfsfehler

Synchronisierung Konflikte

Synchronisierungskonflikte auftreten, wenn ein Datensatz in einer Tabelle mit zwei oder mehr unterschiedlichen Replikaten aktualisiert werden. Auch wenn die Änderungen zu verschiedenen Feldern im Datensatz vorgenommen werden, wird Sie von Microsoft Jet-Datenbankmodul als ein Konflikt behandelt. Das Jet-Datenbankmodul versucht nicht, den Konflikt zu beheben. Stattdessen einen Algorithmus verwendet, um eine Version des Datensatzes als offizielle ändern auswählen und die andere Version in eine Konflikttabelle gespeichert.

Konflikttabellen heißen <tablename> _Conflict, <tablename> die Tabelle ist in der der Konflikt aufgetreten ist. Sie können Konflikte mit Visual Basic-Code nach der ConflictTable-Eigenschaft einer Tabelle erkennen. Der folgende Teil einer Prozedur überprüft das Vorhandensein von Konflikttabellen in einer replizierten Datenbank:
   Sub ViewSyncConflict()
      Dim Db As DATABASE
      Dim Td As TableDef
      Dim i as Integer
      Set Db = CurrentDb
      ' Step backward through the TableDefs collection so you
      ' do not miss any tables when you delete conflict tables.
      For i = Db.TableDefs.Count - 1 to 0 Step -1
         Set Td = Db.Tabledefs(i)
         If (Td.ConflictTable <> "") Then
            ' Open a recordset based on the conflict table.
            ' Insert code to do conflict resolution.
            ' Delete the conflicting record when you are done.
            ' Delete the conflict table when all its records are deleted.
            ' Set the ConflictTable property to "".
         End If
      Next i
   End Sub

Synchronisierung Fehler

  • Eine Gültigkeitsregel auf Tabellenebene angewendet und andere Replikate vorhanden sind Daten, die nicht die Regel entsprechen.
  • Ein doppelter Schlüssel Fehler tritt, weil zwei unterschiedliche Replikaten die denselben Primärschlüssel in einer Tabelle eingegeben.
  • Ein Fehler referenzielle Integrität tritt auf, da ein primäre Tabellendatensatz in einem Replikat gelöscht wird und ein Datensatz zu einer verknüpften Tabelle in einem anderen Replikat hinzugefügt wird.
  • Ein Datensatz ist gesperrt, wenn Synchronisierung auftritt.
Synchronisierungsfehler werden in der Tabelle MSysErrors aufgezeichnet und auf alle Mitglieder der Replikatgruppe repliziert worden sind. Nachdem Sie die Fehler behoben haben, entfernt das Jet-Datenbankmodul automatisch die Fehlerdatensätze während einer nachfolgenden Synchronisierung.

Öffnen Sie die MSysErrors-Tabelle, um festzustellen, welche Fehler aufgetreten ist. Der folgende Teil einer Prozedur zeigt die Synchronisierungsfehler in der Tabelle MSysErrors:
  Sub ViewSyncError()
      Dim Db As DATABASE
      Dim Rs As Recordset
      Dim MsgString As String
      On Error GoTo ErrorHandler
      Set Db = CurrentDb
      Set Rs = Db.OpenRecordset("MSysErrors", dbOpenSnapshot)
      Rs.MoveLast
      If Rs.RecordCount > 0 Then
         Rs.MoveFirst
         Do Until Rs.EOF
            ' Build the error message string.
            MsgString = "Table ID: " & Rs!TableGUID & vbCr
            MsgString = MsgString & "Record ID: " & Rs!RowGUID & vbCr
            MsgString = MsgString & "Operation: " & Rs!Operation & vbCr
            MsgString = MsgString & "Failed Because: " & Rs!ReasonText
            MsgBox MsgString
            Rs.MoveNext
         Loop
      End If

   ExitProc:
      Exit Sub

   ErrorHandler:
      ' If the MSysErrors table is empty...
      If Err.Number = 3021 Then
         Resume ExitProc
      ' display any other error that occurs.
      Else
         MsgBox Err.Description
         Resume ExitProc
      End If
   End Sub
				

Design-Fehler

Ein Design-Fehler tritt auf, wenn ein lokales Objekt mit demselben Namen als im Designmaster replizierbar Objekt vorhanden ist. Schlägt beispielsweise fehl, wenn ein Benutzer auf ein Replikat das lokales Formular Form1 erstellt, und ein replizierbar Formular im Designmaster Form1 erstellen, Synchronisierung. Der Entwurf Fehler wird in einer Systemtabelle MSysSchemaProb aufgerufen aufgezeichnet. Die Datensätze in MSysSchemaProb werden automatisch gelöscht, wenn der Konflikt behoben und der Designänderung synchronisiert ist.

Die folgende Beispielprozedur überprüft das Vorhandensein der Tabelle MSysSchemaProb und zeigt den Design-Fehler:
  Sub ViewDesignError()
      Dim Db As DATABASE
      Dim Rs As Recordset
      Dim MsgString As String
      On Error GoTo ErrorHandler
      Set Db = CurrentDb
      Set Rs = Db.OpenRecordset("MSysSchemaProb", dbOpenSnapshot)
      Rs.MoveFirst
      Do Until Rs.EOF
         ' Build the error message string.
         MsgString = "Operation: " & Rs!Command & vbCr
         MsgString = MsgString & "Failed Because: " & Rs!ErrorText
         MsgBox MsgString
         Rs.MoveNext
      Loop

   ExitProc:
      Exit Sub

   ErrorHandler:
         ' If the MSysSchemaProb table does not exist.
         If Err.Number = 3078 Then
            Resume ExitProc
         ' If the MSysSchemaProb table is empty.
         ElseIf Err.Number = 3021 Then
            Resume ExitProc
         ' Display any other error that occurs.
         Else
            MsgBox Err.Description
            Resume ExitProc
         End If
   End Sub
				

Platzieren Sie Schritte

Nachdem Sie wie Sie jede Art von Synchronisierungsfehler behandeln möchten entschieden haben, erstellen Sie die benutzerdefinierte Funktion verwenden, wenn Konflikte auftreten. Im folgenden Beispiel wird eine einzelne Funktion in den früheren Abschnitten beschriebenen Verfahren Beispiel kombiniert:
   Function MyCustomFunction()
      ViewSyncConflict
      ViewSyncError
      ViewDesignError
   End Function
				

ReplicationConflictFunction-Eigenschaft

Sie können die Eigenschaft ReplicationConflictFunction programmgesteuert oder über die Benutzeroberfläche festlegen. Wenn Sie die Eigenschaft programmgesteuert festlegen, müssen Sie möglicherweise ReplicationConflictFunction zunächst zu der Properties-Auflistung der Datenbank hinzufügen und setzen Sie seinen Wert.

Programmgesteuertes Festlegen der ReplicationConflictFunction

  1. Öffnen Sie die Designmaster-Datenbank für die Replikatgruppe.
  2. Erstellen Sie ein Modul und geben Sie die folgende Prozedur:
          Sub SetCustomFunction(FunctionName As String)
             Dim Db As DATABASE, Ctr As Container, Doc As Document
             Dim Prp As Property
             On Error GoTo ErrorHandler
             Set Db = CurrentDb
             Set Ctr = Db.Containers!Databases
             ' Set Document variable pointing to user defined document.
             Set Doc = Ctr.Documents!UserDefined
             ' Set the ReplicationConflictFunction property if it exists.
             Doc.Properties!ReplicationConflictFunction = FunctionName
          Exit Sub
    
          ErrorHandler:
             ' If the property does not exist...
             If Err.Number = 3270 Then
                ' create ReplicationConflictFunction property and set its
                ' value.
                Set Prp = Doc.CreateProperty("ReplicationConflictFunction", _
                    dbText, FunctionName)
                ' Append the new property to the collection.
                Doc.Properties.Append Prp
                ' Resume the main procedure.
                Resume Next
             Else
                ' Display any other error that occurs.
                MsgBox Err.Number & ": " & Err.Description, vbCritical
             End If
          End Sub
    					
  3. Um diese Funktion zu testen, geben Sie die folgende Zeile in das Debugfenster ein und drücken Sie anschließend die [EINGABETASTE]:
    SetCustomFunction("MyCustomFunction()")

Festlegen der ReplicationConflictFunction über die Benutzeroberfläche

  1. Öffnen Sie die Designmaster-Datenbank für die Replikatgruppe.
  2. Klicken Sie im Menü Datei Datenbankeigenschaften.
  3. Klicken Sie im Dialogfeld <databasename> Eigenschaften auf die Registerkarte Benutzerdefiniert.
  4. Legen Sie die folgenden Eigenschaften:
    Name: ReplicationConflictFunction
    Typ: Text
    Wert: MyCustomFunction()
  5. Klicken Sie auf OK um das Dialogfeld Eigenschaften zu schließen.
Weitere Informationen über Replikation in Ihrer Datenbank finden Sie die folgenden Artikeln in der Microsoft Knowledge Base für Anweisungen zum erhalten des Microsoft Jet Datenbank-Whitepaper:
138828ACC95: Microsoft Jet Replication Whitepaper zur im Download Center verfügbar

164553ACC97: Jet 3.5 Replikation Whitepaper zur im Download Center verfügbar

Eigenschaften

Artikel-ID: 158930 - Geändert am: Mittwoch, 11. Oktober 2006 - Version: 3.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Access 95 Standard Edition
  • Microsoft Access 97 Standard Edition
  • Microsoft Access Developer's Toolkit 1.1
  • Microsoft Office 97 Developer Edition
Keywords: 
kbmt kbhowto kbprogramming KB158930 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 158930
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com