Artikel-ID: 191883 - Geändert am: Dienstag, 23. Januar 2007 - Version: 2.1

ACC: Datenänderungen werden auf den falschen Eintrag gespeichert.

Moderat: Erfordert grundlegende Kenntnisse in den Bereichen Makros, Programmierung und Interoperabilität.

Auf dieser Seite

Alles erweitern | Alles schließen

Problembeschreibung

Wenn Sie die Daten in einem Formular Datensatz ändern, finden Sie, dass die geänderten Daten mit dem falschen Datensatz gespeichert werden.

Ursache

Dieses Verhalten kann unter den folgenden zwei Bedingungen auftreten:
  1. Sie verwenden die AbsolutePosition-Eigenschaft als Ersatz-Datensatznummer zum Ausführen in ein Recordset verschiebt in dem Sie Datensätze löschen. Im folgende Beispiel DAO zum Reproduzieren des Problems auf einer Tabelle mit mehr als 255 Zeilen verwendet werden kann:
        Sub main()
            On Error GoTo ErrorHandler
            Dim db As DAO.Database, SQL As String
            Dim td As DAO.TableDef, fld As DAO.Field, qd As DAO.QueryDef
            Dim rs As DAO.Recordset
            Dim bkmk As Variant
            Dim nAbsolutePosition As Variant
    
    
            ' Open database with large table.
            Set db = DBEngine.OpenDatabase("C:\Northwind.mdb")
            Set db = CurrentDb()
    
            ' Open a dynaset or snapshot with hundreds of records.
            Set rs = _
            db.OpenRecordset("SELECT * FROM [Order Details]", _
            dbOpenDynaset)
    
            ' Populate the table.
            rs.Move (1000)
            bkmk = rs.Bookmark
    
            ' Delete a record.
            rs.MoveFirst
            rs.Delete
    
            ' Go to a bookmark way down the table.
            rs.Bookmark = bkmk
    
            ' Get the position so you can move back here.
            nAbsolutePosition = rs.AbsolutePosition
            Debug.Print "Absolute position = " & nAbsolutePosition _
            & ": UnitPrice = " & rs![UnitPrice]
    
            ' Move to position by moves.
            rs.MoveFirst
            rs.Move (nAbsolutePosition)
            Debug.Print nAbsolutePosition & " moves: UnitPrice = " _
            & rs![UnitPrice]
    
        Exit Sub
    
        ErrorHandler:
           MsgBox "An error has occurred "
           Resume Next
        End Sub
  2. Sie schrieb Visual Basic für Applikationen-Code oder das Kombinationsfeld oder Listenfeld-Assistent zum Erstellen von Visual Basic für Applikationen-Code, die einen Datensatz, auf dem Formular sucht verwendet und die folgenden Bedingungen vorliegen:
    1. Sie haben mehr als 255 Zeilen aus der Quelle aus der Sie Daten abrufen.
    2. Einen Datensatz in einem Formular löschen.
    3. Ohne das Formular schließen, suchen Sie nach einem anderen Datensatz in einer Weise, dass die Bookmark-Eigenschaft der Form und RecordsetClone Objekte verwendet. (Eine Möglichkeit hierfür besteht darin, die Option Kombinationsfeld-Assistenten verwenden, um "Find einen Datensatz im Formular basierend auf den im Kombinationsfeld gewählten Wert".)
    4. Sie haben Änderungen an Daten in den gefundenen Datensatz vornehmen.

Lösung

Führen Sie einen der folgenden Schritte durch, um dieses Problem zu beheben:
  • Beziehen Sie und installieren Sie Microsoft Office 97 Service Release 2. Weitere Informationen über das Abrufen dieses Service Release finden Sie unter den folgenden Artikel der Microsoft Knowledge Base:
    151261  (http://support.microsoft.com/kb/151261/EN-US/ ) OFF97: So erhalten und installieren Sie Microsoft Office 97 SR-2
  • Aktualisieren Sie das Formular vor dem Suchen nach einem Datensatz mithilfe der Bookmark-Eigenschaft. Im Fall von der durch des Kombinationsfeld-Assistenten erstellten Code würde fügen die Zeile
           Me.Requery
    am Anfang des im Ereignis NachAktualisierung des Kombinationsfelds Feld wie folgt
          Sub ComboBoxName_AfterUpdate()
    
             ' Add this line to requery the form.
             Me.Requery
    
             ' The remaining code was generated by the wizard.
             ' Find the record that matches the control.
             Me.RecordsetClone.FindFirst "[Key] = " & Me!ComboBoxName
             Me.Bookmark = Me.RecordsetClone.Bookmark
    
         End Sub
    beim Bearbeiten Sie jetzt Daten in den gefundenen Datensatz es ordnungsgemäß gespeichert werden.

    Um verdächtige Code zu finden, hat Microsoft ein Add-In-Assistenten Lesezeichen gefunden aufgerufen entwickelt. Weitere Informationen zu diesem Assistenten finden Sie unter der folgenden Microsoft Knowledge Base:
    193052  (http://support.microsoft.com/kb/193052/EN-US/ ) ACC: Suchen von Bookmark-Assistenten verfügbar im Download Center
  • Laden Sie sich die Datei "Jet35sp3.exe" von der Microsoft-Website herunter; diese Datei enthält die aktualisierte Version 3.51 der Microsoft Jet-Datenbank-Engine. Informationen zum Microsoft Jet 3.51 erhalten finden Sie unter den folgenden Artikel der Microsoft Knowledge Base:
    172733  (http://support.microsoft.com/kb/172733/EN-US/ ) ACC97: Neuere Version der Microsoft Jet 3.5 für Download

Status

Microsoft hat dies ein Problem in den am Anfang dieses Artikels aufgeführten Microsoft-Produkten bestätigt. Dieses Problem tritt nicht mehr in Microsoft Access 97 SR-2

Weitere Informationen

Dieses Verhalten ist abhängig von beide den Umfang der Daten in jedem Datensatz und die Anzahl der Datensätze zwischen dem Datensatz, der gelöscht wird und der Datensatz, der bearbeitet wird. Dieses Verhalten möglicherweise nicht angezeigt werden, wenn Sie nur sehr wenige Datensätze in der Tabelle haben oder wenn Sie ein Datensatz weit von den gelöschten Datensatz nicht suchen.

Zum Reproduzieren des Problems erforderliche Schritte

Erstellen das Suchformular:
  1. Öffnen Sie die Beispieldatenbank "Nordwind.mdb".
  2. Erstellen Sie ein neues Formular auf Grundlage der Tabelle Bestelldetails.
  3. Speichern Sie das neue Formular als FrmOrderDetails.
  4. Öffnen Sie das FrmOrderDetails-Formular in der Entwurfsansicht.
  5. Aktivieren Sie die Steuerelement-Assistenten und dem Formular fügen Sie ein Kombinationsfeld hinzu.
  6. Klicken Sie auf die Option "Einen Datensatz im Formular basierend auf den im Kombinationsfeld gewählten Wert suchen" der ersten Seite des Kombinationsfeld-Assistenten und klicken Sie dann auf Weiter.
  7. Wählen Sie die Tabelle Order Details aus der Liste der Tabellen.
  8. Das Feld OrderID aus der Liste Verfügbare Felder in die ausgewählte verschieben Felder Liste und klicken Sie auf Weiter.
  9. Klicken Sie auf Fertig stellen, und speichern Sie das Formular.
Das Problem zu reproduzieren:
  1. Öffnen Sie das FrmOrderDetails-Formular in der Formularansicht.
  2. Löschen Sie den ersten Datensatz.
  3. Wählen Sie die einem der Datensätze am Ende der Liste mit Kombinationsfeld, das Sie im Abschnitt "Erstellen der Suchformular" hinzugefügt.
  4. Eine Änderung an dem Feld Menge im Formular vornehmen.
  5. Wechseln Sie mithilfe der Navigationsschaltflächen am unteren Rand des Formulars, zu dem Datensatz weiter.
Sie sollten sehen, dass die Sie gerade auf dem Formular eingegebenen Daten, auf den nächsten Datensatz gespeichert wurde.

Hinweis: In Access 2.0 und 95 können Sie zwei Datensätze im Voraus verschieben nach dem Klicken auf die Navigationsschaltfläche. Sie müssen einen Datensatz finden Sie, dass die Daten, mit dem falschen Datensatz gespeichert wurde zurück verschieben.

Weitere Informationen mit Kombinationsfeldern zu einem Datensatz bewegen finden Sie die folgenden:
100132  (http://support.microsoft.com/kb/100132/EN-US/ ) ACC: Vier Möglichkeiten zum Verschieben eines Datensatzes aus einem Kombinationsfeld Feld Auswahl

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Access 2.0 Standard Edition
  • Microsoft Access 95 Standard Edition
  • Microsoft Access 97 Standard Edition
Keywords: 
kbmt kbbug kbpending KB191883 KbMtde
Maschinell übersetzter ArtikelMaschinell ü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: 191883  (http://support.microsoft.com/kb/191883/en-us/ )
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.
Retired KB ArticleDisclaimer 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.
 

SPRACHE AUSWÄHLEN