Warum lässt MS Access 2007 keine Zeileneinfügung zu, aber erlaubt sie dann beim nächsten Einfügeversuch?

8

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:

%Vor%     
Mike Webb 07.03.2011, 22:54
quelle

6 Antworten

1

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.

    
Chains 29.03.2011, 20:23
quelle
1

Es ist bekannt, dass MS-Access fehlerhafte Fehler beseitigt, die nichts mit dem Problem zu tun haben, das sie melden. Es würde nicht schaden, die Spalte "type" mit eckigen Klammern zu umgeben, [type].

Ссылка

    
Tim 23.03.2011 17:08
quelle
0

Ändert sich der Wert Jetzt zwischen den Versuchen, so dass es jetzt keinen doppelten Schlüsselfehler mehr gibt?

    
John M 18.03.2011 13:21
quelle
0

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

überprüfen



Ä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

    
Rafee 18.03.2011 22:45
quelle
0

Ich glaube, Jet / ACE wird die NOW () Methode nicht verstehen.

Und ich arbeitete mit ACE-Version, die Syntax konnte nicht funktionieren. Sie müssen den anderen Weg finden, die Syntax direkt zu implementieren.

    
Rafee 23.03.2011 16:44
quelle
0

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 .

    
Francisco Goldenstein 08.03.2018 23:20
quelle

Tags und Links