"Die Daten wurden geändert" Fehler beim treten von Hauptformular in Unterformular
Ich bin der Migration einer Access-Datenbank auf SQL Server mithilfe des SQL Server Migration Assistant (SSMA). Die Access-Anwendung wird weiterhin genutzt werden, aber mit verknüpften Tabellen anstelle von den einheimischen.
Ich habe ein problem bei der post-migration testen mit einem Formular mit mehreren Unterformularen.
Prüfschritte:
1) Bearbeiten ein Feld in der main form;
2) verschieben den Fokus auf ein Feld in der SubForm;
3) Versuch, Bearbeiten Sie das Feld in der SubForm.
Ergebnis: Eine Fehlermeldung erscheint: "Die Daten wurden geändert. Ein anderer Benutzer bearbeitet diese Aufnahme und die änderungen gespeichert, bevor Sie versucht haben, Ihre änderungen zu speichern."
Einmal die Fehlermeldung abgewiesen wird das Feld im Unterformular bearbeitet werden können. Wenn das Feld im Hauptformular ist nicht bearbeitet, die form kann bearbeitet werden ohne die Fehlermeldung.
Irgendwelche Ideen, was könnte die Ursache dieses Fehlers?
Habe ich versucht, speichern Sie das Hauptformular der Datensatz in der Ereignisprozedur Enter für die sub-form-Steuerelement auf dem Hauptformular (ie dieses Ereignis passiert auf der main-form, bei der Eingabe das Steuerelement, enthält die form, nicht auf die form selbst). Macht keinen Unterschied. Ich habe versucht, erneutes Abfragen der wichtigsten form in der gleichen sub-Formular-Steuerelement-Ereignis Enter, aber das funktioniert nicht - erneutes Abfragen der Haupt-form bewegt sich der Fokus Weg von der sub-form, so kann es nicht bearbeitet werden.
Einem MS-forum vorgeschlagen, Mich.Eltern.Requery im After_Update-Ereignis der Unterformulare. Das hat nicht funktioniert entweder.
SQL Profiler zeigt eine einzelne update-Anweisung, die Tabelle zu aktualisieren zugrunde liegenden Hauptformular, wenn ich den Schritt in die sub-form. Es gibt keine anderen Anweisungen schlagen Sie die Datenbank, die Daten ändern.
Eine interessante Sache, die ich bemerkt habe: Die Datenquelle für das Hauptformular ist eigentlich eine select-Anweisung, die verbindet zwei Tabellen zusammen. Die wichtigsten Formular-Felder enthält, können aktualisieren von Spalten in jeder der Tabellen in der Datenquelle. Bearbeiten von Feldern im Hauptformular das update der untergeordneten Tabelle in der Beziehung nicht bewirken, dass die "Daten wurden geändert" Fehler. Der Fehler tritt nur beim Bearbeiten der Felder, aktualisieren Sie die übergeordnete Tabelle in der Beziehung. Ich habe versucht Felder, update verschiedener Spalten in jeder der beiden Tabellen. Die Ergebnisse sind konsistent: Bearbeiten des Datensatzes in der übergeordneten Tabelle, die den Fehler verursacht, Bearbeiten Sie den Datensatz in der untergeordneten Tabelle nicht.
Den link zwischen die Unterformulare und das Hauptformular schließt sich eine Spalte in der SubForm-Tabelle einer Spalte in der Kind-Tabelle in das Hauptformular Datensatzquelle.
Durch die Art und Weise, die Tabellen im Hauptformular Datensatzquelle tatsächlich, sich in einer 1:1-Beziehung (ein Datensatz in der untergeordneten Tabelle für jeden Datensatz in der übergeordneten Tabelle). Die untergeordnete Tabelle ist nur eine Erweiterung der Tabelle für den übergeordneten Tabelle.
Ich persönlich würde nicht design das system wie dieses, wenn ich bei null anfangen, aber es ist, was ich habe, mit zu arbeiten und ich hoffe, es gibt einige relativ einfach zu beheben, dass wird nicht verlangen, eine starke überarbeitung der Tabellen oder Formulare (Hauptformular und Unterformular haben jeweils über 100 Kontrollen).
Die 1:1-Beziehung scheint mir suspekt, da die Fehler, Sie werden immer spiegelt ein concurrent-user-Fehler höchstwahrscheinlich ausgestellt von ODBC. Vielleicht können Sie versuchen, durch fallenlassen der 1:1-Beziehung, nur um zu sehen, ob das isoliert die Fehler.
Thompson: es Versucht, mit einem Instead Of-trigger zu umgehen mit updates über die Ansicht. Gefunden hatte ich Sie auf hinzufügen eindeutigen index der verknüpften Tabelle auf der Access-Seite auf, die die Datensätze werden aktualisiert. Formular funktioniert genau so, wie es kam ursprünglich mit dem Fehler-dialog, wenn ich die Felder aktualisieren, die Zuordnung zu einer SQL Server-Tabelle, aber keine Probleme, wenn ich die Felder aktualisieren, die Karte zu der anderen Tabelle. Wenn ich schließen Sie das Fehlerdialogfeld kann ich das dann aktualisieren Sie die Felder Zuordnung zu den problem-Tabelle, nach wie vor. So nun ich vermute, es muss etwas zu tun mit den Eigenschaften der einzelnen Formular-Steuerelemente.
InformationsquelleAutor Simon Tewsi | 2013-04-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach viel Versuch und Irrtum habe ich das Problem gelöst. In der Ereignisprozedur enter für die sub-form-Steuerelement auf dem Hauptformular habe ich erneut abgefragt, die form selbst.
zB Auf dem main-form:
Ich weiß nicht, warum das funktioniert, nur, dass es funktioniert.
InformationsquelleAutor Simon Tewsi
Dies geschieht, wenn ein Datensatz in einer Tabelle aktualisiert wird, aber die Datensatzquelle des Hauptformulars wurde nicht aktualisiert, um die änderung widerzuspiegeln, so dass der Zugriff bekommt, widersprüchliche Informationen und denkt, dass der Datensatz geändert wurde. Siehe auch: http://support.microsoft.com/kb/302492
InformationsquelleAutor LauraNorth
Ich dieses problem lösen kann schriftlich über AfterUpdate-Formular-Ereignis wie dieses:
Ist es möglich, wriiten universal BeforeUpdate-form-Ereignis-Funktion erzeugt automatisch eine Update-Anweisung basierend auf der form.Datenherkunft und veränderter form-Felder, die aufgerufen werden können von allen AfterUpdate-form-Ereignisse vorbei Formular als parameter. Ich habe dieses, für mich.
InformationsquelleAutor Rosen Nikolov