Hallo Leute,
mir hat es in einer Tabelle die Autowerte zerissen. Beim Anlegen eines neuen Datensatzes hatte ich plötzlich statt einer vierstelligen Zahl eine 9-stellige Zahl. Nun habe ich zwei Datensätze in dieser Tabelle, die diese 9-stellige Zahl haben, da neue Datensätze nun diese 9-stellige Zahl annehmen. Kann ich ich das wieder reparieren? Über "komprimieren und reparieren" hat es nicht funktioniert. Ich verwende Access 2007.
Wäre schön, wenn mir jemand helfen könnte....
Hallo Carmano
In deiner Tabelle scheint sich der Atuowert von Intger auf Zufall verändert zu haben. (Warum auch immer).
Das kannst du nicht über die Funktion "komprimieren und reparieren" zuzrück setzen.
Eine Möglichkeit ist wäre öffne die besagte Tabelle im Entwurfmodus ändere den Autowert in eine Zahl, Tabelle schließen und speichern.
Deine Tabelle normal öffnen und die Spalte des alten Autowert absteigend oder aufsteigend sortieren lassen (so wie du es benötigst) Tabelle speichern und schließen.
Nun öffnest du die Tabelle erneut im Entwurfmodus und fügst eine neue Spalte mit deinem neuen Autowert Integer ein wieder schließen und speichern.
Öffne die Tabelle ganz normal erneut und du wirst sehen es wurde dein Autowert angefügt
Danke für Deine Antwort, aber leider funktioniert das nicht. Das Feld mit dem Autowert steht in Beziehung mit anderen Tabellen und ist der Primärschlüssel dieser Tabelle....
Hallo,
Du musst die Beziehung vorrübergehend löschen. Dann die vorgeschlagene Aktion ausführen.
SICHERHEITSKOPIE machen !!!
Hallo,
ZitatDu musst die Beziehung vorrübergehend löschen. Dann die vorgeschlagene Aktion ausführen.
... danach in der Detailtabelle ein neues FK-Feld (Felddatentyp Zahl, Long) einfügen und per Aktualisierungsbfrage die neuen Fremdschlüssel in die Detailtabelle holen. (= eine der Möglichkeiten)
Nach dieser Aktualisierung stellst du die Beziehung zwischen den Tabellen mit den neuen Feldern her.
Beachte aber auch, dass in der Folge ALLE Objekte, die sich auf die 'alten' Schlüsselfelder bezogen haben ebenfalls einer Aktualisierung unterzogen werden müssen (z.B. Abfragen, Formulare und Unterformulare, ...)
Wenn alle beziehungsrelevanten Angelegenheiten in der DB ordnungsgemäß funktionieren kannst du die alten Schlüsselfelder löschen.
Hallo,
Fragt sich nur wozu der ganze Hassle?
Ein Autowert-PK hat eindeutig zu sein,
was ja bei Design so ist, und sonst nichts.
Das ist kein Träger irgendeiner weiteren
Information. Der muss nicht schön, fortlaufend
oder sonstwas sein.
gruss ekkehard
hallo ekkehard
das stimmt, ein pk muss nicht schick sein. Aber
Zitat von: carman0103Nun habe ich zwei Datensätze in dieser Tabelle, die diese 9-stellige Zahl haben, da neue Datensätze nun diese 9-stellige Zahl annehmen.
Ich lese das jetzt so das es sich um die einunddieselbe Zahl wohl handelt. und somit isses kein PK mehr, nicht wirklich.
Hallo,
ZitatDer muss nicht schön, fortlaufend oder sonstwas sein
funktional nicht ;D ... aber vom TO so angefragt.
Zitatscheint sich der Atuowert von Intger auf Zufall verändert zu haben
So eine Umstellung kann NUR im Entwurfsmodus der Tabelle erfolgen, von alleine geht's bestimmt nicht ;)
Übrigens nicht von Integer sondern von Inkrementell auf Zufall
Danke für Eure vielen Vorschläge. Aber eigentlich hat ekkehard recht. Auch wenn der Autowert jetzt 9 Stellen hat statt 4, Hauptsache ist, dass er eindeutig ist und funktioniert. Aber trotzdem vielen Dank für Eure Mühe
Hallo nochmal,
es hat mir doch keine Ruhe gelassen. Ich hab ein wenig rumprobiert. Ich habe zunächst ein neues Feld vom Typ "Zahl" eingefügt. Dort habe ich die Werte aus dem Autowert-Feld eingefügt und entsprechend korrigiert. Ich habe dem neuen Zahlenfeld den Namen des Autowert-Feldes gegeben und die Beziehungen wieder hergestellt. Hat auch funktioniert. Dann wollte ich ein neues Autowert-Feld in die Tabelle einfügen. Doch beim speichern kommt dann folgende Meldung: "Anzahl der Dateisperrungen überschritten. Erhöhen Sie den Registryeintrag für MaxLocksPerFile". Wie komme ich denn hier weiter?
Hallo,
wenn auch ekkehard vom Prinip her recht hat, so würde mich einen Autowert der so eine große Lücke aufweist auch stören. Bei 10 Stellen (2147483647) wäre ohnehin Schluss. Das ist zwar noch weit hin, von 9 nach 10 Stellen, aber noch mal ein Sprung im Autowert und die Grenze könnte schnell erreicht sein.
Für eine Bereinigung ist aber ein etwas höherer Aufwand notwendig.
- Beziehungen löschen
- Jetzige Autowertspalte in eine Zahl (Long) ändern. Feldname ändern
Die Spalte muss aber indiziert bleiben, ohne Duplikate, aufsteigend sortiert.
- neue Autowertspalte mit dem ursprünglichen Namen der alten Autowertspalte
- Spalte prüfen ob gleiche Reihenfolge der DS wie mit altem Autowert
- In den beiden abhängigen Tabelle die alten Fremdschlüsselfelder umbenennen und
je ein neues Fremdschlüsselfeld mit dem früheren Namen einfügen
- Mit je einer Aktualisierungsabfrage die neuen Autowerte in die neuen Fremdschlüsselfelder übertragen.
In den Abfragen muss eine Beziehung über die alten Schlüsselfelder erstellt werden, damit korrekt übertragen wird
- Beziehungen über die neuen Felder erstellen
- Tabellen prüfen
- Wenn OK, alte Autowertspalte und die beiden alten Fremdschlüsselfelder löschen.
Bitte an einer kleineren Beispieldb erst probieren.
Vor Anwendung auf die Originaldb, von dieser Sicherheitskopie erstellen.
Hallo MzKlMu,
danke schonmal für den Lösungsvorschlag. Ich habe jetzt die Beziehungen gelösscht, das Autowert-Feld in ein Zahlenfeld geändert, dieses aufsteigend sortiert und ein neues Autowert-Feld erstellt. Beim Vergleich der Werte im alten und neuen Autowert-Feld weichen die Werte allerdings voneinander ab. Was kann ich da tun?
Hallo,
Zitatdas Autowert-Feld in ein Zahlenfeld geändert, dieses aufsteigend sortiert
Das Zahlenfeld kannst Du mal bis zur Löschung als Primärschlüssel lassen. Der Index muss sortiert werden, nicht die Tabelle. Die Tabelle per Klick auf den Spaltenkopf zu sortieren nutzt nix.
ZitatBeim Vergleich der Werte im alten und neuen Autowert-Feld weichen die Werte allerdings voneinander ab.
An sich spielt das keine Rolle, aus diesem Grund sollst Du ja die neuen Werte per Aktualisierungsabfrage in die neuen Fremdschlüsselfelder übertragen.
Also
- ich habe also die Beziehungen gelöscht
- dann das Autowert-Feld in ein Zahlenfeld umgewandelt und den Namen geändert
- den Index in diesem Feld auf "aufsteigend" gestellt
- ein neues Autowert-Feld eingefügt und diesem den Namen des alten Autowert-Feldes gegeben
Bis hierhin sieht das jetzt in der Tabelle so aus, wie im beigefügten Bild
Ich habe nun in der abhängigen Tabelle das Fremdschlüsselfeld umbenannt und ein neues mit dem alten Namen eingefügt. Wie muss nun die Aktualisierungsabfrage aussehen, damit ich die Werte da rein bekomme?
[Anhang gelöscht durch Administrator]
Hallo,
UPDATE AbhaengigeTabelle AS A
INNER JOIN Tabelle AS T
ON A.alterFK = T.alterAW
SET A.neuerFK = T.neuerAW
hth
gruss ekkehard
Super. Das scheint funktioniert zu haben. Vielen, vielen Dank.