Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

TIPP: neu durchnummerieren ohne VBA

Begonnen von crystal, Juli 20, 2016, 15:45:23

⏪ vorheriges - nächstes ⏩

crystal

Ein letzter Tipp für heute (diesmal von mir selbst).

Access kann je Tabelle nur genau ein Feld als Autowert verwalten.

Was nun, wenn dieses Feld durch Löschen von Datensätzen (größere) Lücken aufweist?

Ganz einfach: im Tabellen-Design definiere ich ein neues Zahlenfeld, z. B. TempZahl. Dann rufe ich die Tabelle erneut im Design-Mode auf und ändere das bisherige Autowert-Feld (AutoZahl) auf Zahl sowie mein neues Feld auf Autowert.
Öffne ich die Tabelle dann im normalen Modus, füllt Access mein Feld TempZahl brav mit einer neuen laufenden Nummer. Das könnte ich natürlich über eine Selektion noch beschränken, z. B. auf alle Datensätze des letzten Jahres oder aber eine neue Sortierung per Query vornehmen.

Anschließend kann ich mein ursprüngliches Autowert-Feld löschen und TempZahl in AutoZahl umbenennen. Schwups ist mein Datenbestand mit einem neuen Autowert (ohne Lücken) versehen. Ggf. muss ich meine Tabelle einfach nur einmal durchscrollen.

ACHTUNG: Referenzen in andere Tabellen gehen dadurch natürlich kaputt!
Aber dieser Trick hat sich besonders beim Aufbau eines Basis-Datenbestandes aus Fremdquellen mit anschließender Duplikat-Entfernung gut bewährt.

Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Beaker s.a.

Hallo crystal,
Wozu? Bei Autowerten mach' ich mir doch keine Gedanken um Lücken.
Wenn du für irgendwas eine (gespeicherte) fortlaufende Nummerierung
ohne Lücken brauchst, nimm ein Extrafeld, und kümmere dich selber um
durchlaufende Nummerierung.
Da gehen dann auch keine Beziehungen den Bach runter.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

#2
Hallo,
wenn es unbedingt sein muss, kann man auch mit einem Autowertfeld eventuell entstandene Lücken wieder füllen, problemlos, ohne VBA.

Aber, wie bereits gesagt ein Autowert dient ausschließlich als Primärschlüssel und ist im Regelfall auch nicht zu sehen. Somit sind Lücken bedeutungslos.
Gruß Klaus

crystal

Eure Kritik ist ja wirklich berechtigt und es geht bei meinem Tipp auch eher nur um "Schönheit". Ich habe z. B. eine Kundentabelle mit ca. 8000 Einträgen, die aus mehreren Text-Dateien importiert wurden. Durch fehlerhafte und doppelte Importe musste ich mehrfach viele Datensätze wieder löschen, so dass mein aktueller Autowert dann auf 27000 stand. Mit meinem Trick habe ich die (sortierte) Tabelle dann 1-2-3 neu durchnummeriert und jetzt einen Autowert von 8000. Das finde ich einfach schön.

Wie gesagt - es ist ein Tipp für einen frühen Zeitpunkt einer Applikations-Entwicklung und "nett", wenn der Autowert nicht versteckt, sondern z. B. als KundenNummer sichtbar ist.

Schließlich liefert der Tipp Hinweise darauf, wie Access intern Autowerte behandelt und auch das finde ich (zumindest akademisch) interessant.
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

MzKlMu

Hallo,
da die Beziehungen ohnehin dann nicht mehr stimmen, kannst Du einfach das Autowertfeld löschen, Tabelle speichern, Autowertfeld wieder einfügen. Und schon ist ohne Lücken wieder neu nummeriert. Ein Temp Feld braucht es dazu nicht.

Und sobald das Autowertfeld Primärschlüssel war, dessen Wert in anderen Tabellen als Fremdschlüssel dient (was ja eher der Regelfall ist) wird das alles viel aufwendiger.
Gruß Klaus

ebs17

ZitatDurch fehlerhafte und doppelte Importe ...
Man könnte ja auch sagen: Wenn man gleich ordentlich arbeitet, kann man sich viel Aufräumerei sparen.
Mit freundlichem Glück Auf!

Eberhard

MaggieMay

Sorry, aber...
Zitat von: ebs17 am Juli 20, 2016, 21:29:45
Wenn man gleich ordentlich arbeitet, kann man sich viel Aufräumerei sparen.
scheinbar bist du als perfekter Access-Entwickler auf die Welt gekommen - Gratulation! Die meisten Leute dagegen haben das große Glück, über Kindheit, Jugend und Ausbildung allmählich erst in diesen Job hineinzuwachsen, wobei logischerweise auch (Anfänger-) Fehler gemacht werden.
Derartig sinnfreie und wenig zielführende Kommentare kannst du dir zukünftig also gerne sparen.
Freundliche Grüße
MaggieMay

ebs17

ZitatACHTUNG: Referenzen in andere Tabellen gehen dadurch natürlich kaputt!

Ob es sinnfrei ist, vor dem Aktionieren eine zusätzliche Überlegung und ggf. eine Recherche dazu durchzuführen und sich nachträglich viel Arbeit und als Ungeübter viel Probleme zusätzlich aufzuladen, das mag jeder für sich beurteilen.
Mit freundlichem Glück Auf!

Eberhard

MaggieMay

@ebs17:
Es wird nicht besser dadurch, dass du in deiner Replike willkürlich ein anderes Zitat als Grundlage für deinen Kommentar wählst. Natürlich ist es "falsch", ein Autowert-Feld in einer Tabelle neu anzulegen, wenn es Beziehungen aus anderen Tabellen dazu gibt. Was ja auch gar nicht möglich sein sollte, da diese Beziehungen einen derartigen Eingriff verhindern würden.

Sinnfrei ist im übrigen nicht das Bedenken der Konsequenzen des Handelns, weder bei der Arbeit mit Access noch sonstwo. Was demnach auch für dich und deine Äußerungen gilt. Als "sinnfrei" habe ich lediglich deinen wenig zielführenden Kommentar aus Antwort #5 bezeichnet.

Es wäre nett, wenn du auch bei kritischen Kommentaren stets bei der Sache bleiben könntest.


BTW:
Du machst dir regelmäßig nicht die Mühe, in deinen Beiträgen eine persönliche Anrede zu schreiben, also könntest du auch konsequenterweise auf das standardmäßig hinzugefügte "freundliche Glück Auf!" verzichten.

Freundliche Grüße
MaggieMay