Meine insert-Anweisung ist:
%Vor%... wo alle Werte korrekt formatiert sind. Die Tabelle enthält die obigen Felder und ein weiteres, ein langes int-Autoinkrement-Schlüsselfeld. Die Fremdschlüssel sind 'inst_id', 'user_id' und 'app_id'.
Ich erhalte diesen Fehler von Access:
... und der folgende Fehler von VS 2005, wenn er ausfällt:
System.Data.OleDb.OleDbException: Die Änderungen, die Sie an der Tabelle angefordert haben waren nicht erfolgreich, weil sie es tun würden Erstellen Sie doppelte Werte im Index, Primärschlüssel oder Beziehung. Veränderung die Daten in dem Feld oder Felder, die doppelte Daten enthalten, entfernen Sie die Index oder definieren Sie den Index neu doppelte Einträge und versuchen Sie es erneut.
Wenn ich diese Einfügeabfrage anstelle, kann ich in die Datenbank schauen und sehen, dass jeder der Fremdschlüsselwerte in ihren jeweiligen Tabellen existiert und seit Monaten existiert (für das spezielle Beispiel, das ich verwende). Diese Felder sind auch so eingestellt, dass ich Duplikate haben kann, also ist das nicht das Problem. Anrufe dieser Art in anderen Tabellen funktionieren großartig. Ich muss den Auto-Inkrement-Schlüsselwert in der Einfügeabfrage nicht angeben, er fügt ihn automatisch für mich hinzu (wie es sollte).
Das Seltsame ist, dass wenn ich das in meinem Code mache:
%Vor%... oder wenn ich versuche, dies zweimal innerhalb von Access auszuführen, funktioniert es.
Ist jemand schon einmal darauf gestoßen? Auch diese Art von Einfügung funktioniert für andere Tabellen, alle Fremdschlüssel sind in ihren jeweiligen Tabellen vorhanden, der Primärschlüssel dieser Tabelle ist als 'Auto-Inkrement' festgelegt, und alle Felder (außer dem Primärschlüsselfeld natürlich) sind eingestellt, um Duplikate zuzulassen.
Irgendwelche Ideen?
BEARBEITEN: Größter Schlüssel vor dem Einfügen: 343085
. Größter Schlüssel nach dem Einfügen: 343086
. Das Format ist:
Gehen Sie durch eine alte Erinnerung hier ...
Versuchen Sie, ein Zeitstempelfeld in Ihre Tabelle einzufügen.
Ich kann mich nicht genau erinnern, warum das funktioniert - etwas, das mit Access zu tun hat, weil es Schwierigkeiten hat, Datensätze zu identifizieren / vielleicht eine Art Sperr- oder Indizierungsquirk. Ich habe einige Jahre darüber recherchiert, als es mit einem meiner Tische passierte.
Die Schlüsselverletzung, auf die sich der Fehler bezieht, ist kein fehlender Schlüssel in einer anderen Tabelle, es ist ein doppelter Schlüssel in derselben Tabelle. Manchmal werden die Kabel von Access gekreuzt und der Schlüssel, den er dem neuen Datensatz zuweist, ist bereits einem anderen Datensatz in der Tabelle zugewiesen. Ich weiß nicht, was das verursacht. Wenn Sie jedoch ein Timestamp-Feld in die Tabelle einfügen, bewirkt dies, dass Access anders denkt.
Es ist eine frustrierende Lösung, weil ich nicht weiß, warum es funktioniert. Und jetzt habe ich ein ansonsten nutzloses Zeitstempelfeld in meinem Tisch. Aber so sei es.
In myTable einfügen (inst_id, user_id, app_id, type, approach_on) VALUES (3264,2580, 'MyApp', 'Erneuern', jetzt);
Können Sie das einfach mit dem Zugriff auf -Datentyp und Jetzt -Datentyp
Ändern Sie den Werttyp von DateTime in String, während das Einfügen gut ist.
Lassen Sie mich wissen, ob das für Sie funktioniert.
Danke
rAfee
Ich weiß, dass ich vor langer Zeit ein ähnliches Problem hatte. In meinen Fällen bekam ich den gleichen Fehler, aber ich hatte keine eindeutigen Indizes in der Tabelle. Ich löste es schließlich durch Reparieren und Komprimieren der Datenbank .
Tags und Links sql c# insert key ms-access-2007