5 Stimmen

MS Access Problem mit automatischer Nummerierung

Ein Kunde von mir hat versehentlich etwa 500 Datensätze aus einer Access-Tabelle gelöscht, die ein primäres ID-Feld hat, das als "autonumber" angelegt wurde. Durch Deaktivieren der Spalte "Autonummer" (zurück zu einer Ganzzahl) konnte ich die fehlenden 500 Datensätze aus einer Sicherung wiederherstellen, aber jetzt kann die Autonummer natürlich nicht wieder aktiviert werden...

Welche Lösungsmöglichkeiten gibt es? Das ID-Feld wird als Verknüpfung zu anderen Tabellen verwendet, daher kann ich nicht einfach alles neu nummerieren, ohne auch alle Tabellen, die auf diese Nummer verweisen, neu zu nummerieren (das ist zwar mühsam, aber möglich).

Gibt es irgendeinen "Trick", um die automatische Nummerierung wieder einzuschalten und dabei max(id) als Ausgangspunkt zu verwenden, wenn bereits Daten in der Tabelle vorhanden sind?

5voto

Josip Medved Punkte 3481

Erstellen Sie eine neue Tabelle mit dem Feld ID als AutoNumber (alle Felder müssen dieselben sein wie in der Originaltabelle - außer ID). Kopieren Sie alle Daten aus der Original-Tabelle in die neue Tabelle:

INSERT INTO newTable SELECT * FROM originalTable

Sobald die Daten gefüllt sind, löschen Sie originalTable und benennen Sie newTable in originalTable um.

Auf diese Weise bleiben alle "Löcher" in der automatischen Nummerierung erhalten und newTable hat die automatische Nummerierung aktiviert.

P.S. Versuchen Sie immer, Fremdschlüssel zu Ihren IDs hinzuzufügen. In diesem Fall haben Sie, selbst wenn einige Daten gelöscht werden, zumindest einen konsistenten Zustand.

2voto

Tony Toews Punkte 7760

Die ideale Lösung, auch wenn es jetzt zu spät ist, wäre gewesen, die fehlenden 500 Datensätze in einer funktionierenden Tabelle wiederherzustellen. Dann eine Append-Abfrage in der Haupttabelle durchführen. Dies hätte das Feld "Autonummer" einbezogen.

1voto

Seth Spearman Punkte 6530

Wenn ich zu den gegebenen Antworten etwas hinzufügen darf.

Eine wenig bekannte Tatsache über Access-Felder mit automatischer Nummerierung ist, dass der Zähler für diese Felder zurückgesetzt wird, wenn Sie die Datenbank komprimieren und reparieren.

Ich bin auch ziemlich sicher, dass, wenn Sie eine Einfügung tun es WILL die numerische verwenden, die statt der nächsten Zahl in der Autonummer Zähler geliefert wird, solange es > (größer als) der interne Zähler von der Auto-Nummer Feld gehalten ist (macht das überhaupt Sinn?)

Mit anderen Worten: Sie KÖNNEN so etwas in einer brandneuen Zugriffstabelle tun, in der der Zähler auf 1 gesetzt werden sollte...

INSERT INTO myTable (myAutoNumber,myOtherField) VALUES (10000,'other data')

Die anderen hier erwähnten Lösungen sind besser, weil sie das Ergebnis besser garantieren, so dass ich sie fast aus akademischen Gründen erwähne.

Seth

0voto

Papa Burgundy Punkte 6307

Zustimmen, aber möglicherweise möchten Sie eine ORDER BY hinzufügen, um sicherzustellen, dass die AutoNumber in der richtigen Reihenfolge ist. Andernfalls werden Ihre anderen Tabellen die falsche ID-Zuordnung haben.

INSERT INTO newTable SELECT * FROM originalTable ORDER BY ID

Außerdem müssen Sie die Felder explizit benennen, anstatt * zu verwenden.

0voto

csbs Punkte 13

Sie erstellen ein neues Feld mit automatischer Nummerierung, löschen dann das Feld id und benennen das neue Feld in id um.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X