Individuelle Nummerierungen

Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

Individuelle Nummerierungen

Manche Anwendungsfälle erfordern jedoch eine individuelle Nummerierung in einem Feld. Dafür kann es verschiedene Wege geben – zum Beispiel, wenn eine Nummerierung nach einer bestimmten Sortierung eines anderen Feldes erfolgen soll oder nach dem Entfernen oder Hinzufügen von Datensätzen eine neue Nummerierung erforderlich ist. Daher stellen wir in diesem Beitrag Wege vor, um die Nummerierung ganz nach Wunsch zu gestalten.

Gründe für durchnummerierte Felder

In den meisten Fällen ist die Darstellung der Daten Auslöser für den Wunsch nach einer durchgehenden Nummerierung. Dies lässt sich natürlich auch über eine entsprechende Abfrage regeln.

Je nach Datenmenge kostet dies jedoch Performance, und gerade wenn die neu zu nummerierenden Daten selten oder gar nicht mehr geändert werden, ist das Hinzufügen eines Nummerierungsfeldes oder auch die Anpassung des Primärschlüsselfeldes sinnvoll. In allen anderen Fällen sollte die Nummerierung dynamisch per Abfrage erfolgen.

Unabhängig davon, ob Sie nun ein Primärschlüsselfeld oder ein separates Zahlenfeld für die Nummerierung verwenden, sind meist die folgenden zwei Gründe verantwortlich für den Wunsch nach einer neuen Nummerierung:

  • Die Sortierkriterien als Grundlage für die Nummerierung haben sich geändert.
  • Es wurden Datensätze entfernt, sodass die Nummerierung wieder durchgehend gestaltet werden soll.

Ein dritter Grund ist, dass möglicherweise eine Menge aktuell gefilterter Daten nummeriert werden soll. Da dies jedoch meist mehrmals geschieht, sollte man hier grundsätzlich eine dynamische Nummerierung per Abfrage vornehmen.

Primärschlüsselfeld oder zusätzliches Feld nummerieren?

In manchen Fällen soll das Primärschlüsselfeld selbst nummeriert werden. Dies führt erstens dazu, dass man die Aktualisierung der Fremdschlüsselfelder verknüpfter Datensätze für die Beziehung aktivieren muss.

Zweitens muss man sich hier einen kleinen Algorithmus einfallen lassen, da man ja nicht einfach neu nummerieren kann – eine Neunummerierung nach einer anderen Reihenfolge zum Beispiel würde dazu führen, dass ein Datensatz die Nummer 1 erhalten soll, während ein anderer Datensatz, der nach unten sortiert wurde, diesen Wert ebenfalls enthält.

Und in Primärschlüsselfeldern darf nun einmal jeder Wert nur einmal vorkommen. Man müsste in diesem Fall also zunächst den größten Wert für das Primärschlüsselfeld ermitteln und alle Datensätze mit einem Wert im Primärschlüsselfeld füllen, der größer ist als dieser Wert. Erst dann könnte man die Datensätze in der gewünschten Sortierung mit 1 beginnend durchnummerieren.

Deutlich einfacher ist es, wenn Sie für die Nummerierung ein eigenes Feld vorsehen. Dies kostet zwar etwas Speicherplatz, aber das sollte in der heutigen Zeit keine übergeordnete Rolle mehr spielen.

Nummerieren zusätzlicher Felder

Beginnen wir mit den Techniken zum Nummerieren zusätzlicher Felder, die nicht mit einem eindeutigen Index versehen sind (in diesem Fall würde man diese auch erst mit höheren Zahlen nummerieren, bevor man diese beginnend mit dem Wert 1 nummerieren könnte).

Zu Beispielzwecken haben wir der Tabelle tblArtikel ein Feld namens Artikelnummer hinzugefügt, welches wir durchnummerieren wollen (s. Bild 1).

Zusätzliches Feld für eine Nummerierung

Bild 1: Zusätzliches Feld für eine Nummerierung

Die Füllung des Feldes Artikelnummer übernimmt die Prozedur aus Listing 1. Sie öffnet ein Recordset auf Basis der Tabelle tblArtikel, sortiert nach dem Feld ArtikelID.

Public Sub Sortierung()
     Dim db As DAO.Database
     Dim rst As DAO.Recordset
     Dim i As Integer
     Set db = CurrentDb
     Set rst = db.OpenRecordset("SELECT * FROM tblArtikel ORDER BY ArtikelID", dbOpenDynaset)
     Do While Not rst.EOF
         rst.Edit
         i = i + 1
         rst!Artikelnummer = i
         rst.Update
         rst.MoveNext
     Loop
End Sub

Listing 1: Einfache Sortierung im Feld Artikelnummer der Tabelle tblArtikel

Dann durchläuft sie alle Datensätze und erhöht dabei jeweils den Wert der Variablen i, der dann im Feld Artikelnummer landet.

Diese Prozedur lässt sich noch etwas vereinfachen, denn eigentlich benötigen wir die Variable i in diesem Fall gar nicht: Wenn mit dem Wert 1 beginnend durchgehend nummeriert werden soll, können wir dazu auch den Wert der Eigenschaft AbsolutePosition nutzen. Dies liefert die Position des Datensatzzeigers. Da dieser Wert für den ersten Datensatz den Wert 0 enthält, müssen wir nur noch den Wert 1 hinzuaddieren (s. Listing 2).

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Ich habe die Datenschutzbestimmungen zur Kenntnis genommen.