Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: carman0103 am November 09, 2012, 20:23:36

Titel: Autowerte zurücksetzten
Beitrag von: carman0103 am November 09, 2012, 20:23:36
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....
Titel: Re: Autowerte zurücksetzten
Beitrag von: Stapi am November 09, 2012, 21:29:02
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
Titel: Re: Autowerte zurücksetzten
Beitrag von: carman0103 am November 10, 2012, 07:12:12
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....
Titel: Re: Autowerte zurücksetzten
Beitrag von: MzKlMu am November 10, 2012, 07:48:15
Hallo,
Du musst die Beziehung vorrübergehend löschen. Dann die vorgeschlagene Aktion ausführen.

SICHERHEITSKOPIE machen !!!
Titel: Re: Autowerte zurücksetzten
Beitrag von: database am November 10, 2012, 08:40:47
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.
Titel: Re: Autowerte zurücksetzten
Beitrag von: Beaker s.a. am November 10, 2012, 11:12:48
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
Titel: Re: Autowerte zurücksetzten
Beitrag von: daolix am November 10, 2012, 13:33:05
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.
Titel: Re: Autowerte zurücksetzten
Beitrag von: database am November 10, 2012, 16:15:47
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
Titel: Re: Autowerte zurücksetzten
Beitrag von: carman0103 am November 11, 2012, 08:36:40
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
Titel: Re: Autowerte zurücksetzten
Beitrag von: carman0103 am November 11, 2012, 09:30:56
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?
Titel: Re: Autowerte zurücksetzten
Beitrag von: MzKlMu am November 11, 2012, 10:37:04
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.
Titel: Re: Autowerte zurücksetzten
Beitrag von: carman0103 am November 11, 2012, 11:28:50
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?
Titel: Re: Autowerte zurücksetzten
Beitrag von: MzKlMu am November 11, 2012, 11:37:39
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.
Titel: Re: Autowerte zurücksetzten
Beitrag von: carman0103 am November 11, 2012, 14:57:11
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]
Titel: Re: Autowerte zurücksetzten
Beitrag von: Beaker s.a. am November 11, 2012, 15:37:11
Hallo,
UPDATE AbhaengigeTabelle AS A
    INNER JOIN Tabelle AS T
        ON A.alterFK = T.alterAW
SET A.neuerFK = T.neuerAW

hth
gruss ekkehard
Titel: Re: Autowerte zurücksetzten
Beitrag von: carman0103 am November 11, 2012, 16:24:21
Super. Das scheint funktioniert zu haben. Vielen, vielen Dank.